Clúster web de alta disponibilidad con equilibrio de carga basado en nginx

Clúster web de alta disponibilidad con equilibrio de carga basado en nginx

Prefacio

nombre del proyecto

Clúster web de alta disponibilidad con equilibrio de carga basado en nginx

Entorno del proyecto

9 servidores centos7.9, nginx 1.21.1, ab, nfs, zabbix, keepalived 2.1.5, ansible 2.9.27

Descripción del Proyecto

Cree un proyecto de clúster web de equilibrio de carga https basado en nginx, use ansible para escribir guías para implementar la implementación del entorno del proyecto, use keepalived para lograr un equilibrio de carga VIP dual, use servidores DNS para implementar el sondeo VIP, use NFS para mantener la coherencia de los datos de la página web y utilice Prometheus + grafana para implementar el monitoreo de visualización de datos.

![Inserte descripción de la imagen aquí](https://img-blog.csdnimg.cn/d47f50e180564f58a8a511fc868a32f2.png

Pasos del proyecto

1. Utilice 3 servidores como servidor real back-end para proporcionar servicios web reales y utilice el libro de estrategias para implementar rápidamente el entorno; 2.
Cree un servidor nfs para garantizar la coherencia de los datos del sitio web y monte archivos compartidos en el servidor web. y configurar el montaje de inicio automático;
3. Utilice 2 servidores como equilibradores de carga, llame a la cantidad mínima de conexiones a través de nginx para lograr el equilibrio de carga e implemente keepalived para lograr alta disponibilidad VIP dual y detección de estado; 4. Cree un servidor dns para
implementar resolución de nombres de dominio y sondeo VIP dual
5.Construya monitoreo Prometheus + grafana para lograr la visualización de datos.

1. Establezca un canal de contraseñas e implemente ansible

1. Instale ansible:

[root@ansible ~]# yum install epel-release -y
[root@ansible ~]# yum install ansible -y
#查看版本
[root@ansible ~]# ansible --version
ansible 2.9.27

2. Establezca canales libres de secretos con el servidor ansible en todos los servidores:

Establecer canales libres de secretos en todas las máquinas que requieran ansible: servidores web, balanceadores de carga, servidores nfs…

[root@ansible ~]# ssh-keygen 
[root@ansible ~]# cd /root/.ssh/
[root@ansible .ssh]# ls
id_rsa  id_rsa.pub
[root@ansible .ssh]# ssh-copy-id -i id_rsa.pub [email protected].*

3. Cree una lista de anfitriones:

[root@ansible /]# cd /etc/ansible/
[root@ansible ansible]# ls
ansible.cfg  hosts  roles
[root@ansible ansible]# vim hosts 
[LBservers]
192.168.78.134          #负载均衡1
192.168.78.133          #负载均衡2

[webservers]
192.168.78.130          #web1
192.168.78.131          #web2
192.168.78.135          #web3

[nfsservers]
192.168.78.136          #nfs

[dnsservers]
192.168.78.137          #dns

4. Escriba un manual para instalar el software por lotes:

[root@ansible playbooks]# vim install.yaml 
---
- hosts: LBservers      #在负载均衡器上安装nginx,keepalived
  remote_user: root
  tasks:
  - name: install nginx
    script: /etc/ansible/playbooks/one_key_install_nginx.sh     #执行一键安装脚本
  - name: install keepalived
    yum: name=keepalived state=latest

- hosts: webservers     #在web服务器上安装nginx,nfs-utils
  remote_user: root
  tasks:
  - name: install nginx
    script: /etc/ansible/playbooks/one_key_install_nginx.sh
  - name: install nfs
    yum: name=nfs-utils state=latest

- hosts: webservers LBservers    #在web服务器,负载均衡器上安装node_exporter,以便于Prometheus服务器采集数据
  remote_user: root
  tasks:
  - name: install node_exporter
    script: /etc/ansible/playbooks/one_key_install_node_exporter.sh

El script nginx de instalación con un solo clic es el siguiente one_key_install_nginx.sh:

#!/bin/bash

mkdir -p /my_nginx
cd /my_nginx

# 下载nginx压缩包
curl -O http://nginx.org/download/nginx-1.23.3.tar.gz

# 解压
tar xf nginx-1.23.3.tar.gz
# 进入文件夹
cd nginx-1.23.3

# 新建用户,用于启动nginx进程
useradd -s /sbin/nologin ly

# 安装依赖包,ssh相关、gcc为编译需要、pcre正则相关、make编译相关
yum install -y openssl openssl-devel gcc pcre pcre-devel automake make net-tools vim

# configure是一个配置的脚本文件,会根据指定的配置生成一个Makefile文件,这个文件会影响后面make命令的编译,相当于图纸
# configure可配置参数可以参考官方文档:http://nginx.org/en/docs/configure.html
# 常用选项:
# --with-*:开启某个功能,默认不安装    --without-*:禁用某个功能,默认安装
# --prefix=path:指定路径                       --conf-path=path:指定配置文件路径,不指定会放到prefix路径下
# --user=name:指定启动nginx worker进程的用户
# --with-http_ssl_moudle 开启https的功能,下载ssl来进行公钥和私钥的认证
# --without-http——memcached_moudle 禁用http_memcached
# --with-http_realip_module 启用realip功能,让后端知道通过代理访问的用户的ip
# --with-http_v2_module:对http2.0版本的支持
# --with-threads:开启线程池功能                --with-http_stub_status_moudle:开启nginx状态统计功能,可以知道多少访问
# --with-stream 支持tcp/udp反向代理,即4层负载均衡
./configure --prefix=/usr/local/nginx --user=ly --with-http_ssl_module --with-http_realip_module --with-http_v2_module --with-threads --with-http_stub_status_module --with-stream

# 编译
# make是按照Makefile的配置去编译程序为二进制文件,二进制文件就是执行可以运行的程序
# -j:指定编译进程数,多点速度快些,可以使用top后按1查看虚拟机配有几个核心
make -j2
# 将编译好的二进制文件复制到指定安装路径目录下
make install

# 启动nginx
/usr/local/nginx/sbin/nginx

# 修改PATH变量
PATH=$PATH:/usr/local/nginx/sbin
echo "PATH=$PATH" >>/root/.bashrc

# 设置nginx的开机启动,rc.local是指向rc.d/rc.local的链接,后者需要拥有执行权限才能开机自启
echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

# selinux和firewalld防火墙都关闭
# selinux临时和永久关闭
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

# 防火墙临时和永久关闭
service firewalld stop
systemctl disable firewalld

El script node_exporter de instalación con un solo clic es el siguiente one_key_install_node_exporter.sh:

#!/bin/bash

# 解压
tar xf /root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz -C /root
mv /root/node_exporter-1.4.0-rc.0.linux-amd64/*  /node_exporter

# 修改PATH变量
PATH=/node_exporter/:$PATH
echo "PATH=$PATH" >>/root/.bashrc
chmod +x /etc/rc.d/rc.local

#执行node exporter 代理程序,设置端口号,不要与已有服务起冲突
nohup node_exporter --web.listen-address 0.0.0.0:8090  &

5. Ejecute el manual para implementar rápidamente el entorno:

[root@ansible playbooks]# ansible-playbook install.yaml 
PLAY [LBservers] ****************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [192.168.78.133]
ok: [192.168.78.134]

TASK [install nginx] ************************************************************************************************************************************************
changed: [192.168.78.133]
changed: [192.168.78.134]

TASK [install keepalived] *******************************************************************************************************************************************
changed: [192.168.78.134]
changed: [192.168.78.133]

PLAY [webservers] ***************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [192.168.78.135]
ok: [192.168.78.131]
ok: [192.168.78.130]

TASK [install nginx] ************************************************************************************************************************************************
changed: [192.168.78.130]
changed: [192.168.78.131]
changed: [192.168.78.135]

TASK [install nfs] **************************************************************************************************************************************************
changed: [192.168.78.131]
changed: [192.168.78.130]
changed: [192.168.78.135]
[WARNING]: Could not match supplied host pattern, ignoring: LBserver

PLAY [webservers LBserver] ******************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [192.168.78.131]
ok: [192.168.78.130]
ok: [192.168.78.135]

TASK [install node_exporter] ****************************************************************************************************************************************
changed: [192.168.78.130]
changed: [192.168.78.131]
changed: [192.168.78.135]

PLAY RECAP **********************************************************************************************************************************************************
192.168.78.130             : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.78.131             : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.78.133             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.78.134             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.78.135             : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Se encontró un error: [WARNING]: Could not match supplied host pattern, ignoring: LBserverEsto se debe a que la lista de hosts de LBserver no se agregó al archivo /etc/ansible/hosts. Después de la inspección, se descubrió que se trataba de un error de escritura en el libro de jugadas.

2. Configurar el servidor web

Habilite la función de estadísticas de estado y oculte el número de versión de nginx

worker_processes  2;   #启动2个worker 进程

events {
    
    
    worker_connections  1024;	#一个worker进程允许1024个用户访问
}

http {
    
    
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
    
    sendfile        on;
    keepalive_timeout  65;

    server_tokens off;          #隐藏nginx版本
    
    server {
    
    
        listen       80;        
        server_name  localhost;
    
        location / {
    
     
            root   html;
            index  index.html index.htm;
        }
            
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
    
    
            root   html;             
        }
        
        location ~ /status {
    
                          #访问位置为/status
            stub_status   on;                        #打开状态统计功能
            access_log off;                         #关闭此位置的日志记录
        }    
            
    }       
        
}

3. Configurar el servidor NFS

Permitir el intercambio de archivos entre tres servidores web a través de la red para mantener la coherencia de los datos de la página web.

1. Instalar y comenzar

[root@nfs ~]# yum install nfs-utils -y
[root@nfs ~]# service nfs-server restart
Redirecting to /bin/systemctl restart nfs-server.service

2. Editar archivos compartidos/etc/export

[root@nfs ~]# vim /etc/exports
[root@nfs ~]# cat /etc/exports
/web 192.168.78.0/24(ro,all_squash,sync) 	#共享目录/web,78网段全部可以访问,只读权限,实时共享
[root@nfs ~]# mkdir /web
[root@nfs ~]# cd /web/
[root@nfs web]# mkdir sc
[root@nfs web]# vim index.html
[root@nfs web]# ls
index.html  sc
[root@nfs web]# exportfs -rv		#刷新nfs服务
exporting 192.168.78.0/24:/web
[root@nfs web]# service firewalld stop		#关闭防火墙
Redirecting to /bin/systemctl stop firewalld.service

3. Montar y utilizar carpetas compartidas en otros servidores web.

[root@localhost web1]# mount 192.168.78.136:/web 	/usr/local/nginx/html

4. Montar automáticamente el sistema de archivos nfs al iniciar

Modifique el archivo de configuración en el servidor web /etc/rc.localy monte nfs en el arranque

[root@web1 html]# vim /etc/rc.local
service nfs-server start
mount  192.168.0.139:/web   /usr/local/nginx/html
[root@web1 html]# chmod +x /etc/rc.d/rc.local

Esto asegura que todos los servidores web tengan la misma página.

4. Equilibrio de carga

1. Modifique el archivo de configuración ngin en el equilibrador de carga LB, llame al algoritmo de número mínimo de conexiones y habilite HTTPS:

worker_processes  2;

events {
    
    
    worker_connections  1024;
}


http {
    
    
    include       mime.types;
    default_type  application/octet-stream;

	server_tokens off;          #隐藏nginx版本
    sendfile        on;
    keepalive_timeout  65;
    upstream  LB{
    
    
        least_conn;                     #调用最小连接数
        server  192.168.78.130;         #web1
        server  192.168.78.131;         #web2
        server  192.168.78.135;         #web3
        }
    server {
    
    
        listen       80;
        #把http的域名请求转成https
        return 301 https://www.yilong.love;
    }

    # HTTPS server
    server {
    
    
        listen       443 ssl;
        server_name  www.yilong.com;	#申请的域名

        ssl_certificate      9993605_yilong.love.pem;	#ssl证书
        ssl_certificate_key  9993605_yilong.love.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
    
    
            proxy_pass http://LB;       #代理转发到LB组
            proxy_set_header   X-Real-IP     $remote_addr;      #添加日志字段,让后端服务器知道客户机的IP

        }
    }

2. Edite el formato de registro en el servidor web, agregue el campo X-Real-IP y obtenga la IP del usuario:

	log_format  main  '$remote_addr -  $HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

5. Implementar un servidor de equilibrio de carga VIP dual keepalived

1. Modifique el archivo de configuración en el equilibrador de carga LB1 /etc/keepalived/keepalived.conf:

! Configuration File for keepalived

global_defs {
    
    
   notification_email {
    
    
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    
    
    state MASTER	#做master角色
    interface ens33
    virtual_router_id 220
    priority 120	#优先级
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    		#vip1
        192.168.78.199
    }
}

vrrp_instance VI_2 {
    
    
    state BACKUP
    interface ens33
    virtual_router_id 221
    priority 100
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    		#vip2
        192.168.78.188
    }
}

2. Modifique el archivo de configuración en el equilibrador de carga LB2 /etc/keepalived/keepalived.conf:

! Configuration File for keepalived

global_defs {
    
    
   notification_email {
    
    
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    
    
    state BACKUP
    interface ens33
    virtual_router_id 220
    priority 100
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    
        192.168.78.199
    }
}

vrrp_instance VI_2 {
    
    
    state MASTER
    interface ens33
    virtual_router_id 221
    priority 120
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    
        192.168.78.188
    }
}

Inicie 2 instancias vrrp. Habilite 2 instancias vrrp en cada máquina. Una es la maestra y la otra es la copia de seguridad. Habilite 2 VIP. Habrá un VIP en cada máquina. Ambos VIP brindan servicios al mundo exterior. De esta manera puede Evite la situación de un solo VIP, uno está muy ocupado y el otro muy inactivo. Puede mejorar el uso del dispositivo. Los archivos de configuración en LB1 y LB2 son mutuamente activos y de respaldo.

3.Pruebas de salud

El valor de keepalived se basa en la condición de que nginx pueda funcionar normalmente. Si nginx es anormal, esta máquina ya no es un equilibrador de carga. Necesita detener su estado maestro, reducir su prioridad y dar paso a otras máquinas. Es necesario que haya una función de detección de salud detrás de esto.
1. Escriba un script en dos balanceadores de carga para monitorear si nginx se está ejecutando y otorgar permisos ejecutables:

[root@lb-1 nginx]# cat check_nginx.sh 
#!/bin/bash
#检测nginx是否正常运行
if  /usr/sbin/pidof  nginx  ;then
	exit 0
else
	exit 1
fi
[root@lb-1 nginx]# chmod +x check_nginx.sh 

2. Defina el script de monitoreo en keepalived y llámelo:
la llamada debe definirse en la función maestra.
Modificar LB1 /etc/keepalived/keepalived.conf:

#定义监控脚本chk_nginx
vrrp_script chk_nginx {
    
    
#当脚本/nginx/check_nginx.sh脚本执行返回值为0的时候,不执行下面的weight  -30的操作,只有脚本执行失败,返回值非0的时候,就执行执行权重值减30的操作
script "/my_nginx/check_nginx.sh"
interval 1      #健康检查周期
weight -30
}

vrrp_instance VI_1 {
    
    
    state MASTER
    interface ens33
    virtual_router_id 220
    priority 120
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    
        192.168.78.199
    }
    #调用监控脚本
    track_script {
    
    
        chk_nginx
    }   
}

Modificar LB2 /etc/keepalived/keepalived.conf:

#定义监控脚本chk_nginx
vrrp_script chk_nginx {
    
    
#当脚本/my_nginx/check_nginx.sh脚本执行返回值为0的时候,不执行下面的weight  -30的操作,只有脚本执行失败,返回值非0的时候,就执行执行权重值减30的操作
script "/my_nginx/check_nginx.sh"
interval 1
weight -30
}
vrrp_instance VI_2 {
    
    
    state MASTER
    interface ens33
    virtual_router_id 221
    priority 120
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    
        192.168.78.188
    }
    #调用监控脚本
    track_script {
    
    
        chk_nginx
    }   
}

6. Construya un servidor DNS

1. Apague el firewall y SELINUX e instale bind*:

[root@dns ~]# systemctl stop firewalld
[root@dns ~]# vim /etc/selinux/config 
SELINUX=disabled
[root@dns ~]# yum install bind* -y

2. Configure el servicio con nombre para que se inicie al arrancar e inicie el servicio DNS inmediatamente:

[root@dns ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@dns ~]# systemctl start named		#立马启动named进程
[root@dns ~]# netstat -anplut|grep named
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      4987/named          
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      4987/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      4987/named          
tcp6       0      0 ::1:53                  :::*                    LISTEN      4987/named          
udp        0      0 127.0.0.1:53            0.0.0.0:*                           4987/named          
udp6       0      0 ::1:53                  :::*                                4987/named 

3. Modifique el servicio dns a la interfaz local:

[root@dns ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 127.0.0.1	#127.0.0.1代表本地回环接口地址,任何机器都有,只能本机使用

4. Modifique el archivo de configuración para permitir que otras máquinas consulten el nombre de dominio dns:

[root@dns ~]# vim /etc/named.conf
options {
    
    
        listen-on port 53 {
    
     any; };     #127.0.0.1修改为any,任意
        listen-on-v6 port 53 {
    
     any; };  #修改
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     {
    
     any; };       #修改
[root@dns ~]# service named restart
Redirecting to /bin/systemctl restart named.service

5. Modifique el archivo de configuración y dígale a nombrado que proporcione resolución de nombre de dominio para yilong.love

[root@dns ~]# vim /etc/named.rfc1912.zones
#添加内容
zone "yilong.love" IN {
    
    
        type master;
        file "yilong.love.zone";
        allow-updateyilong.love {
    
     none; };
};

/var/named6. Cree el archivo de datos de yilong.love en el directorio de datos de la resolución de nombres de dominio DNS :

[root@dns named]# pwd
/var/named
[root@dns named]# ls
chroot  chroot_sdb  data  dynamic  dyndb-ldap  named.ca  named.empty  named.localhost  named.loopback  slaves  yilong.love.zone
[root@dns named]# cp -a  named.localhost yilong.love.zone  #-a相同属性,复制产生一个yilong.love的数据文件
[root@dns named]# vim yilong.love.zone
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.78.137
www IN A 192.168.78.199		#vip1
www IN A 192.168.78.188		#vip2

Al agregar dos registros A con el mismo nombre correspondientes a dos direcciones VIP, se logra el equilibrio de carga del nombre de dominio DNS y el tráfico se distribuye a diferentes servidores.
Probar la resolución DNS:

[root@long ~]# ping www.yilong.love
PING www.yilong.love (192.168.78.188) 56(84) bytes of data.
64 bytes from 192.168.78.188 (192.168.78.188): icmp_seq=1 ttl=64 time=0.234 ms
64 bytes from 192.168.78.188 (192.168.78.188): icmp_seq=2 ttl=64 time=0.551 ms
^Z
[3]+  已停止               ping www.yilong.love
[root@long ~]# ping www.baidu.com
PING www.a.shifen.com (14.119.104.189) 56(84) bytes of data.
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=1 ttl=128 time=23.5 ms
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=2 ttl=128 time=23.7 ms
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=3 ttl=128 time=23.5 ms
^Z
[4]+  已停止               ping www.baidu.com

7. Configurar el monitoreo de Prometheus+grafana

1. Instale el servidor prometheus

#上传下载的源码包到linux服务器
[root@prometheus ~]# mkdir /prom
[root@prometheus ~]# cd /prom
[root@prometheus prom]# ls
prometheus-2.34.0.linux-amd64.tar.gz
#解压源码包
[root@prometheus prom]# tar xf prometheus-2.34.0.linux-amd64.tar.gz
[root@prometheus prom]# ls
prometheus-2.34.0.linux-amd64  prometheus-2.34.0.linux-amd64.tar.gz
[root@prometheus prom]# mv prometheus-2.34.0.linux-amd64 prometheus
[root@prometheus prom]# ls
prometheus  prometheus-2.34.0.linux-amd64.tar.gz
#临时和永久修改PATH变量,添加prometheus的路径
[root@prometheus prometheus]# PATH=/prom/prometheus:$PATH		#临时
[root@prometheus prometheus]# cat /root/.bashrc				#永久
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi
PATH=/prom/prometheus:$PATH   #添加
#执行prometheus程序
[root@prometheus prometheus]# nohup prometheus  --config.file=/prom/prometheus/prometheus.yml &
[1] 8431
[root@prometheus prometheus]# nohup: 忽略输入并把输出追加到"nohup.out"

2.Hacer de Prometheus un servicio para la gestión.

[root@prometheus prometheus]# vim /usr/lib/systemd/system/prometheus.service 
[Unit]
Description=prometheus
[Service]
ExecStart=/prom/prometheus/prometheus --config.file=/prom/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]:
WantedBy=multi-user.target
#重新加载systemd相关的服务
[root@prometheus prometheus]# systemctl daemon-reload
[root@prometheus prometheus]#  service prometheus start
[root@prometheus system]# ps aux|grep prometheu
root       7193  2.0  4.4 782084 44752 ?        Ssl  13:16   0:00 /prom/prometheus/prometheus --config.file=/prom/prometheus/prometheus.yml
root       7201  0.0  0.0 112824   972 pts/1    S+   13:16   0:00 grep --color=auto prometheu

3. Agregue el programa exportador en el servidor Prometheus.

Agregue la configuración para capturar datos en el servidor Prometheus, agregue el servidor de nodo y almacene los datos capturados en la base de datos de series temporales, para que pueda saber dónde extraer los datos.

[root@prometheus prometheus]# vim prometheus.yml 
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
  #添加以下要监控的节点
  - job_name: "LB1"
    static_configs:
      - targets: ["192.168.78.134:8090"]
  - job_name: "LB2"
    static_configs:
      - targets: ["192.168.78.133:8090"]
  - job_name: "web1"
    static_configs:
      - targets: ["192.168.78.130:8090"]
  - job_name: "web2"
    static_configs:
      - targets: ["192.168.78.131:8090"]
  - job_name: "web3"
    static_configs:
      - targets: ["192.168.78.135:8090"]
[root@prometheus prometheus]# service prometheus restart
Redirecting to /bin/systemctl restart prometheus.service

4. Inicie sesión en Prometheus para comprobar si los objetivos se agregaron correctamente.
Insertar descripción de la imagen aquí

4. Implementar grafana

Grafana es una plataforma de análisis y visualización de datos de código abierto que admite consultas y visualización de múltiples fuentes de datos.

[root@prometheus grafana]# wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.1.2-1.x86_64.rpm
[root@prometheus grafana]# yum install grafana-enterprise-9.1.2-1.x86_64.rpm -y
[root@prometheus grafana]# service grafana-server start
Starting grafana-server (via systemctl):                   [  确定  ]
#设置开机启动
[root@prometheus grafana]# systemctl enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
#查看端口号
[root@prometheus grafana]# netstat -anplut|grep grafana
tcp6       0      0 :::3000                 :::*                    LISTEN      2187/grafana-server 

Inicie sesión para ver:

El nombre de usuario y la contraseña predeterminados son
Nombre de usuario admin
Contraseña admin

Insertar descripción de la imagen aquí
Configure la fuente de datos de Prometheus (haga clic en Configuración> Agregar fuente de datos> Prometheus), complete la URL y luego guarde: importe
Insertar descripción de la imagen aquí
la plantilla de grafana (haga clic en importar en Paneles), complete el número de plantilla:
Insertar descripción de la imagen aquí
obtenga el siguiente efecto de monitoreo:
Insertar descripción de la imagen aquí

5. Prueba de estrés:

[root@long ~]# ab -n 60000 -c 20000 http://www.yilong.love/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.yilong.love (be patient)
Completed 6000 requests
Completed 12000 requests
Completed 18000 requests
Completed 24000 requests
Completed 30000 requests
Completed 36000 requests
Completed 42000 requests
Completed 48000 requests
Completed 54000 requests
Completed 60000 requests
Finished 60000 requests


Server Software:        nginx
Server Hostname:        www.yilong.love
Server Port:            80

Document Path:          /
Document Length:        162 bytes

Concurrency Level:      20000
Time taken for tests:   6.059 seconds
Complete requests:      60000
Failed requests:        124526
   (Connect: 0, Receive: 0, Length: 69984, Exceptions: 54542)
Write errors:           0
Non-2xx responses:      5458
Total transferred:      1899384 bytes
HTML transferred:       884196 bytes
Requests per second:    9902.93 [#/sec] (mean)
Time per request:       2019.604 [ms] (mean)
Time per request:       0.101 [ms] (mean, across all concurrent requests)
Transfer rate:          306.14 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1  806 203.4    786    2176
Processing:    62  863 276.7    855    1701
Waiting:        0   99 316.5      0    1276
Total:       1026 1669 188.7   1645    3044

Percentage of the requests served within a certain time (ms)
  50%   1645
  66%   1735
  75%   1738
  80%   1741
  90%   1763
  95%   1813
  98%   2236
  99%   2449
 100%   3044 (longest request)

El número máximo de procesamiento simultáneo es de aproximadamente 2000.
¡En este punto, el proyecto está completo!

Experiencia en proyectos:

1. Tener una cierta comprensión de la implementación e instalación con un solo clic, que es muy conveniente y rápida, lo que brinda confianza para un mejor aprendizaje posible en el futuro; 2. Tener una comprensión
más profunda del uso de nginx y la implementación de alta disponibilidad. cierta comprensión y capacidad de solución;
3. Aprendí el monitoreo de Prometheus, que es un trabajo de operación y mantenimiento muy básico. Puede ver los problemas con anticipación y proporcionar alerta temprana;
4. Sentar las bases para aprender clústeres a gran escala en el futuro. se ha mejorado la capacidad de planificación general
5. Tener cierta comprensión de la cooperación de muchos software funcionales básicos, como: keepalived, ansible, nginx, nfs, etc.

En resumen, al realizar experimentos, no solo profundicé mi comprensión de los conocimientos teóricos relevantes, sino que también dominé habilidades y métodos prácticos. Los problemas que surgieron en el experimento ejercieron mi capacidad y nivel de pensamiento para resolver problemas prácticos. Al mismo tiempo, enfrentar los problemas que surgieron durante el proyecto me ayudó a aprender a comunicarme y colaborar mejor con mis compañeros y profesores. A través de los experimentos, la valiosa experiencia que adquirí no solo se convertirá en mi riqueza, sino que también me ayudará a aprender mejor conocimientos relevantes y trabajos prácticos relevantes en el futuro.

Supongo que te gusta

Origin blog.csdn.net/zheng_long_/article/details/130714816
Recomendado
Clasificación