Directorio de artículos
Prefacio
Programador de clústeres web común
En la actualidad, los programadores de clústeres web comunes se dividen en software y hardware. El software generalmente usa LVS, Haproxy y Nginx de código abierto. El hardware generalmente usa F5. Muchas personas usan algunos productos domésticos, como Barracuda, NSFOCUS, etc.
Aunque LVS tiene una gran capacidad anti-carga en aplicaciones empresariales, tiene 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 basado en aplicaciones TCP y HTTP.
Especialmente adecuado para sitios web con una gran carga. Al
ejecutarse en el hardware actual, puede admitir decenas de miles de solicitudes de conexión simultáneas.
Uno: algoritmo de programación Haproxy
Haproxy admite una variedad de algoritmos de programación, y hay tres más comúnmente utilizados: RR (Round Robin), LC (Least Connections), SH (Source Hashing)
1.1 : RR (Round Robin)
El algoritmo RR es el algoritmo más simple y más utilizado, es decir, la programación
por turnos. Entendiendo, por ejemplo, que
hay tres nodos A, B y C. El primer acceso de usuario se asignará al nodo A y el segundo acceso de usuario se asignará al nodo B. , El acceso del tercer usuario se asignará al nodo C. El
acceso del cuarto usuario seguirá siendo asignado al nodo A, sondeando y asignando solicitudes de acceso para lograr el equilibrio de carga.
1.2 : LC (Conexiones mínimas)
El algoritmo LC es el algoritmo de número mínimo de conexiones, que asigna dinámicamente solicitudes de front-end de acuerdo con el número de conexiones de los nodos de back-end.
Comprenda que
hay tres nodos A, B y C, y que el número de conexiones de cada nodo es A: 4, B: 5 y C: 6, esto Si hay la primera solicitud de conexión de usuario, se asignará a A, el número de conexiones se convierte en A: 5, B: 5, C: 6 La
segunda solicitud de usuario continuará asignándose a A, la cantidad de conexiones se convierte en A6, B: 5, C: 6; Se asignará una nueva solicitud a B, y cada vez se asignará una nueva solicitud al cliente con la menor cantidad de conexiones.
Debido a la situación real, la cantidad de conexiones de A, B y C se liberará dinámicamente, lo cual es difícil Habrá el mismo número de conexiones, por lo que este algoritmo está muy mejorado en comparación con el algoritmo rr. Es un algoritmo que se usa más actualmente.
1.3: SH (Source Hashing)
SH se basa en el algoritmo de programación de acceso a la fuente. Este algoritmo se usa para algunos Existe un escenario en el que la sesión de sesión se registra en el lado del servidor y la programación del clúster se puede realizar en función de la IP de origen, la cookie, etc.
Entendiendo, por ejemplo, que
hay tres nodos A, B y C. El primer usuario se asigna a A para la primera visita y el segundo usuario es el primero El acceso se asigna a B.
Cuando el primer usuario visita 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 primer usuario El acceso se asignará a A y 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 algunos accesos IP son muy grandes, causará una carga desequilibrada y algunos accesos a nodos. Sobredimensionado, afectando el uso comercial
Dos: construcción de clúster haproxy
2.1: Preparación ambiental
VMware软件
两台centos7虚拟机作为NGINX
IP地址:192.168.100.3 PC-3
IP地址:192.168.100.4 pc -4
一台centos7虚拟机作为Haproxy(IP地址:192.168.100.20) pc-2
2.2: Instalación y puesta en marcha de Nginx
Instale Nginx en los dos servidores web e inicie el servicio
Instalar software de entorno
yum install -y gcc gcc-c++ make pcre-devel expat-devel perl bzip2 zlib-devel pcre
useradd -M -s /sbin/nologin nginx // 创建程序账户
[root@pc-3 opt]# tar zxvf nginx-1.12.2.tar.gz
[root@pc-3 opt]# cd nginx-1.12.2/
[root@pc-4 nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx\
> --user=nginx\
> --group=nginx
[root@pc-4 nginx-1.12.2]# make && make install
Establecer página de inicio
[root@pc-4 nginx-1.12.2]# cd /usr/local/nginx/html/
[root@pc-4 html]# echo "this is monkey" > test.html
[root@pc-4 html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
PC3操作和PC4之前都一样
只不过这步不一样
[root@pc-3 html]# echo "this is yellowdog" > test.html
2.3 Configuración operativa de PC1
2.3.1 Instalar haproxy
[root@pc-2 opt]# yum install -y \
> pcre-devel \
> bzip2-devel \ //开启压缩功能
> gcc \
> gcc-c++ \
> make
tar zxvf haproxy-1.5.19.tar.gz
[root@pc-2 opt]# cd haproxy-1.5.19/
[root@pc-2 haproxy-1.5.19]# make TARGET=linux26
[root@pc-2 haproxy-1.5.19]# make install
2.3.2 Configurar haproxy
[root@pc-2 examples]# cp haproxy.cfg /etc/haproxy/
[root@pc-2 examples]# cd /etc/haproxy
[root@pc-2 haproxy]# vim haproxy.cfg
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 /test.html
balance roundrobin
server inst1 192.168.100.3:80 check inter 2000 fall 3
server inst2 192.168.100.4:80 check inter 2000 fall 3
2.4: Explicación detallada del archivo de configuración de Haproxy
Haproxy配置文件通常分为三个部分
global:为全局配置
defaults:为默认配置
listen:为应用组件配置
global配置参数
log127.0.0.1 lcal0:配置日志记录,local0为日志设备,默认存放到系统日志
log127.0.0.1 loca1 notice:notice为日志级别,通常有24个级别
maxconn4096:最大连接数
uid 99:用户uid
gid 99:用户gid
defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将安装默认配置参数设置
log global:定义日志为global配置中的日志定义
mode http:模式为http
option httplog:采用http日志格式记录日志
retries 3:检查节点服务器失败连续达到三次则认为节点不可用
maxconn2000:最大连接数
contimeout5000:连接超时时间
clitimeout50000:客户端超时时间
srvtimeout50000:服务器超时时间
listen配置项目一般为配置应用模块参数
listen appli4- backup 0.0.0.0:10004:定义一个appli4- backup的应用
option httpchk /index.html检查服务器的index.html文件
option persist:强制将请求发送到已经down掉的服务器
balance roundrobin:负载均衡调度算法使用轮询算法
server inst1 192.168.100.3:80 check inter 2000 fall 3:定义节点1
server inst2 192.168 100.4:80 check inter 2000 fall 3 backup:定义节点2
2.5 Abra el servicio nginx de los dos nodos
[root@pc-3 nginx-1.12.2]# nginx
[root@pc-3 nginx-1.12.2]# netstat -ntap | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22646/nginx: master
2.6 Acceder a la prueba 192.168.100.20/test.html en el cliente
Tres: gestión de registros haproxy
El registro de Haproxy se envía al syslog del sistema de forma predeterminada, que generalmente se define por separado en el entorno de producción.
Pasos definidos del método
3.1 Modifique las opciones de configuración del registro en el archivo de configuración de Haproxy y agregue la configuración:
log /dev/log local0 info
log /dev/log local0 notice
修改 rsyslog配置,将 Haproxy相关的配置独立定义到
haproxy.conf,并放到/etc/rsyslog.d/下
保存配置文件并重启 rsyslog服务,完成 rsyslog配置
vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
3.2 Reinicie el servicio y agregue archivos de configuración
root@pc-2 /]# service haproxy restart
Restarting haproxy (via systemctl): [ 确定 ]
[root@pc-2 /]# touch /etc/rsyslog.d/haproxy.conf
[root@pc-2 /]# vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text =='info' )
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice' )
then -/var/log/haproxy/haproxy-notice.log
&~
~
~
~
systemctl restart rsyslog.service
3.3 Visite el navegador para ver el archivo de registro generado
[root@pc-2 log]# systemctl restart rsyslog.service
[root@pc-2 log]# cd /var/log
Cuatro: Explicación detallada de los parámetros que puede optimizar Haproxy
Con el aumento de la carga del sitio web corporativo, la optimización de los parámetros
haproxy es muy importante maxconn: el número máximo de conexiones, ajustado de acuerdo con la situación real de la aplicación, se recomienda usar
10240 daemon: modo daemon, Haproxy se puede iniciar en modo no daemon, se recomienda usar el modo daemon para comenzar
nbproc: la cantidad de procesos simultáneos para el equilibrio de carga. Se recomienda que sea igual o dos veces la cantidad de núcleos de CPU del servidor actual.
reintentos: la cantidad de reintentos, que se utilizan principalmente para verificar los nodos del clúster. Si hay muchos nodos y la cantidad de simultaneidad es grande, establézcalo en 2 veces O 3 veces la
opción http-server-close: cierre activamente la opción de solicitud http, se recomienda utilizar esta opción en el entorno de producción
timeout http-keep-alive: tiempo de espera de conexión largo, establezca el tiempo de espera de conexión largo, se puede configurar en 10s
timeout http-request : Tiempo de espera de solicitud Http, se recomienda establecer este tiempo en 5 ~ 10 s para aumentar la velocidad de liberación de la conexión http.
Timeout cliente: tiempo de espera del cliente, si el tráfico es demasiado grande y la respuesta del nodo es lenta, puede establecer este tiempo más corto, se recomienda configurarlo en Aproximadamente 1 minuto está bien