¡Haproxy construye una teoría + experimento súper detallado de clústeres web! ! !

1. Programador de clústeres WEB común

  • El programador de clústeres WEB común actual se divide en software y hardware
  • El software generalmente usa LVS, Haproxy, Nginx
  • El hardware más utilizado es F5 y muchas personas utilizan algunos productos domésticos, como Barracuda y NSFOCUS.

Dos, análisis de la aplicación Haproxy

■ LVS tiene una gran capacidad anti-carga en aplicaciones empresariales, pero existen deficiencias

  • LVS no admite el procesamiento regular y no puede lograr una separación dinámica y estática
  • Para sitios web grandes, la implementación y configuración de LVS son complicadas y el costo de mantenimiento es relativamente alto.

■ Haproxy es un software que proporciona alta disponibilidad, equilibrio de carga y proxy de aplicación basado en TCP y HTTP.

  • Adecuado para sitios web con cargas pesadas
  • La ejecución en hardware puede admitir decenas de miles de solicitudes de conexión simultáneas

Tres, principio del algoritmo de programación Haproxy

3.1 、 RR (Round Robin)

■ Haproxy admite múltiples algoritmos de programación, los más utilizados son tres

  • RR (Round Robin)
    ◆ El algoritmo RR es el algoritmo más simple y más utilizado, a saber, la programación por turnos.

  • Ejemplo de comprensión
    ◆ Hay tres nodos A, B, C
    ◆ El primer acceso de usuario se asignará al nodo A
    ◆ El segundo acceso de usuario se asignará al nodo B
    ◆ El tercer acceso de usuario se asignará al nodo C
    ◆ Cuarto Se continúa asignando un acceso de usuario al nodo A, sondeo para asignar solicitudes de acceso para lograr el equilibrio de carga

3.2 、 LC (conexiones mínimas)

■ LC (conexiones mínimas)

  • El algoritmo de número mínimo de conexiones asigna dinámicamente solicitudes de front-end de acuerdo con el número de conexiones de nodo back-end

■ Comprensión de ejemplos

  • Hay tres nodos A, B y C, y el número de conexiones de cada nodo es A: 4, B: 5, C: 6
  • La primera solicitud de conexión de usuario se asignará a A y el número de conexiones se convertirá en A: 5, B: 5, C: 6
  • La segunda solicitud de usuario seguirá siendo asignada a A, y el número de conexiones pasará a ser A: 6, B: 5, C: 6; se asignará una nueva solicitud a B, cada vez que se asigne una nueva solicitud al menor número de conexiones Cliente
  • Dado que el número de conexiones de A, B y C se liberará dinámicamente en situaciones reales, es difícil tener el mismo número de conexiones.
  • En comparación con el algoritmo rr, este algoritmo se ha mejorado mucho y es un algoritmo que se utiliza más actualmente.

3.3 、 SH (Hash de fuente)

■ SH (Hash de fuente)

  • Basado en el algoritmo de programación de acceso a la fuente, utilizado en algunos escenarios donde las sesiones de sesión se registran en el lado del servidor. La programación del clúster se puede realizar en función de la IP de origen, la cookie, etc.

■ Comprensión de ejemplos

  • Hay tres nodos A, B y C. El primer usuario se asigna a A para la primera visita y el segundo usuario se asigna a B para la primera visita.
  • Cuando el primer usuario visite por segunda vez, seguirá estando asignado a A, y el segundo usuario seguirá siendo asignado a B para la segunda visita. Siempre que el programador de equilibrio de carga no se reinicie, el acceso del primer usuario se asignará a A, el segundo acceso de usuario se asignará a B para lograr la programación del clúster
  • La ventaja de este algoritmo de programación es lograr la retención de la sesión, pero cuando algunas visitas de IP son muy grandes, causará una carga desequilibrada y algunos nodos tienen visitas excesivas, lo que afecta el uso comercial.

Cuarto, use Haproxy para construir un clúster web

4.1, configuración del entorno

■ Requisitos de host

  • Un servidor Haproxy, dos servidores Nginx y un servidor de almacenamiento compartido (NFS)
Anfitrión dirección IP sistema operativo Software principal
Servidor haproxy CentOS 7.6 x86_64 192.168.100.21 haproxy-1.4.24.tar
Servidor Nginx 1 CentOS 7.6 x86_64 192.168.100.22 nginx-1.12.2.tar
Servidor Nginx 2 CentOS 7.6 x86_64 192.168.100.23 nginx-1.12.2.tar
Servidor NFS CentOS 7.6 x86_64 192.168.100.24 nfs-utils , rpcbind
  • Al hacer este experimento, primero debe desactivar el firewall y la protección del núcleo de todos los servidores.
[root@localhost examples]# systemctl stop firewalld
[root@localhost examples]# systemctl disable firewalld
[root@localhost examples]# vi /etc/selinux/config 
SELINUX=disabled   ## 关闭核心防护
= >> wq 保存

4.2, servidor de almacenamiento 192.168.100.24

## 做共享目录实验时,最好不要选择7.4版本,会有很多bug
[root@localhost ~]# yum -y install rpcbind nfs-utils
[root@localhost ~]# systemctl start rpcbind   ## 启动时,先启动rpcbind
[root@localhost ~]# systemctl start nfs

[root@localhost ~]# vi /etc/exports  ## 做共享网段的目录
/opt/Tom 192.168.100.0/24(rw,sync)
/opt/Jack 192.168.100.0/24(rw,sync)

## 设置重启和开机自启rpcbind,nfs-utils
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl enable nfs

## 创建共享的主页,并给主页插入不同的内容,可以让我们更直观的看见后面的负载轮询页面
[root@localhost ~]# mkdir /opt/Tom /opt/Jack
[root@localhost ~]# echo "this is www.Tom.com" >/opt/Tom/index.html
[root@localhost ~]# echo "this is www.Jack.com" >/opt/Jack/index.html

4.2, servidor Nginx 1192.168.100.22

  • Para compilar e instalar Nginx, primero cargamos el paquete nginx en / opt, que se puede cargar con xftp u otro software (el paquete está en los recursos que cargué)
[root@localhost ~]#yum -y install pcre-devel zlib-devel gcc-c++
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# cd /opt
[root@localhost ~]# tar zxvf nginx-1.12.2.tar.gz
[root@localhost ~]# cd nginx-1.12.2
[root@localhost nginx-1.12.2]# 
./configure \
--prefix=/usr/local/nginx \    ## 指定安装路径
--user=nginx \   ## 指定用户账号
--group=nginx    ## 指定组账户

[root@localhost nginx-1.12.2]# make && make install   ## 进行编译安装
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/   ## 做软连接,并查看
[root@localhost nginx-1.12.2]# ls -l /usr/local/sbin/nginx
lrwxrwxrwx 1 root root 27 5 月 16 16:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx
  • Control de operación de Nginx

■ Verificar el archivo de configuración Al
igual que el programa principal httpd de Apache, el programa principal de Nginx también proporciona la opción "-t" para
verificar el archivo de configuración con el fin de encontrar una configuración incorrecta o incorrecta. El archivo de configuración nginx.conf se encuentra en el subdirectorio conf / del directorio de instalación por defecto
. Para verificar los archivos de configuración ubicados en otras ubicaciones, puede usar la opción "-c" para especificar la ruta

[root@localhost ~]# nginx -t   ## 检查语法有无错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

■ 启动、 停止 Nginx
killall -1 nginx                                                     ####安全重启
killall -3 nginx                                                     ###停止服务

如果出现: -bash: killall: command not found
[root@localhost ~]# yum -y install psmisc    ## 安装一下这条命令就好了
[root@localhost ~]# nginx                                ####启动
[root@localhost ~]# yum install net-tools
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
7180/nginx: master
  • Agregar el servicio del sistema Nginx
■添加 Nginx 系统服务
[root@localhost ~]# vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx                                                 ####描述
After=network.target                                            ####描述服务类别
[Service]
Type=forking                                                          ####后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid                ####PID 文件位置
ExecStart=/usr/local/nginx/sbin/nginx                  ####启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID         ####根据 PID 重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID           ####根据 PID 终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
= >> wq 保存

[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service.
这样一来, 就可以 systemctl 命令来启动、 停止、 重启、 重载 Nginx 服务器了, 方法是
在执行时添加相应的 start、 stop、 restart、 reload 参数

#######刷下命令,服务正常工作了#########
[root@localhost ~]# killall -3 nginx                                                     ###停止服务
[root@localhost ~]# systemctl start nginx.service
[root@localhost ~]# systemctl enable nginx.service
  • Instalar la página de prueba de montaje httpd
root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.24     ####如果还没发布,请到存储服务器发布下,exportfs -rv
Export list for 192.168.100.24:
/opt/Tom (everyone)
/opt/Jack  (everyone)

[root@localhost ~]# vi /etc/fstab 
192.168.100.24:/opt/Tom/ /usr/local/nginx/html/ nfs     defaults,_netdev     0 0        ###开机自动挂载,注意格式对齐

[root@localhost nginx-1.12.2]# systemctl start nfs  ## 开启nfs
[root@localhost nginx-1.12.2]# systemctl enable nfs  ## 设置开机自启nfs
[root@localhost nginx-1.12.2]# init 6   ## 重启测试一下测试页
[root@localhost ~]# curl 192.168.100.22   ## 可以使用这种方法验证
this is www.Tom.com
## 也可以在浏览输入 192.168.100.22 测试一下

4.3, servidor Nginx 2192.168.100.23

Los pasos anteriores son los mismos que los del servidor Nginx 1

  • Instalar la página de prueba de montaje httpd
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.24     ####如果还没发布,请到存储服务器发布下,exportfs -rv
Export list for 192.168.100.24:
/opt/Tom  (everyone)
/opt/Jack (everyone)
 
[root@localhost ~]# vi /etc/fstab 
192.168.100.24:/opt/Jack/ /usr/local/nginx/html/ nfs     defaults     0 0        ###开机自动挂载,注意格式对齐

[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl enable nfs
[root@localhost nginx-1.12.2]# init 6

[root@localhost ~]# curl 192.168.100.23
this is www.Jack.com
## 也可以在浏览输入 192.168.100.23 测试一下

4.4, servidor Haproxy 192.168.100.21

  • Compile e instale Haproxy, cargue haproxy-1.4.24.tar.gz en el directorio / opt
[root@localhost ~]# yum -y install pcre-devel bzip2-devel gcc gcc-c++   ## 安装所需环境
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf haproxy-1.4.24.tar.gz 
[root@localhost opt]# cd haproxy-1.4.24/
[root@localhost haproxy-1.4.24]# make TARGET=linux26
[root@localhost haproxy-1.4.24]# make install
  • Configurar el servicio Haproxy
[root@localhost haproxy-1.4.24]# mkdir /etc/haproxy
[root@localhost haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/
[root@localhost haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg 
100dd ,把里面的配置文件都删除!输入下面代码!
global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        #redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen  webcluster 0.0.0.0:80
        option httpchk GET /index.html
        balance roundrobin
        server inst1 192.168.100.22:80 check inter 2000 fall 3        ## 这里IP改成节点服务器 1 的IP
        server inst2 192.168.100.23:80 check inter 2000 fall 3        ## 这里IP改成节点服务器 2 的IP
        
[root@localhost haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy 
[root@localhost haproxy-1.4.24]# chmod 755 /etc/init.d/haproxy
[root@localhost haproxy-1.4.24]# chkconfig --add haproxy
[root@localhost haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@localhost haproxy-1.4.24]# service haproxy start 

[root@localhost haproxy-1.4.24]# systemctl start haproxy.service 
[root@localhost haproxy-1.4.24]# systemctl enable haproxy.service 

4.5. Verifique que Haproxy construya un clúster web

  • Ingrese 192.168.100.21 en el navegador para verificar si sondear la página.
  • ¡La verificación es exitosa! ! !

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_46563938/article/details/108776567
Recomendado
Clasificación