Hyproxy crea un clúster web

Hyproxy crea un clúster web

Prefacio

  • Programador de clúster web común El programador de clúster
    web se divide en software y hardware . El software suele utilizar LVS, Haproxy, Nginx de código abierto y el hardware más utilizado es F5 . Muchas personas también utilizan algunos productos domésticos, como Barracuda y Green League etc.

  • Aunque LVS tiene una gran capacidad anti-carga en aplicaciones empresariales, tiene deficiencias

LVS不支持正则处理,不能实现动静分离
对于大型网站,LVS的实施配置复杂,维护成本相对较高
  • Haproxy es un software que puede proporcionar alta disponibilidad, equilibrio de carga y proxy basado en aplicaciones TCP y HTTP, especialmente adecuado para sitios web con cargas pesadas.
  • La ejecución en 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, los más comúnmente utilizados son tres: RR (Round Robin), LC (Least Connections), SH (Source Hashing)

1.1 Programación del round robin de RR (Round Robin)

  • El algoritmo RR es el algoritmo más simple y más utilizado, a saber, la programación por turnos

Si 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, y el tercer acceso de usuario se asignará al nodo C y el
cuarto acceso de usuario será ser asignado al nodo C. Continuar siendo asignado al nodo A, sondear y asignar solicitudes de acceso para lograr el equilibrio de carga

1.2 LC (Least Connections) algoritmo de número mínimo de conexiones

  • El algoritmo LC es el algoritmo de conexión mínimo, que asigna dinámicamente las solicitudes de front-end de acuerdo con la cantidad de conexiones de nodo de back-end

Si hay tres nodos A, B y C, el número de conexiones de cada nodo es A: 4, B: 5, C: 6. En este momento, si hay la primera solicitud de conexión de usuario, se asignará a A, y el número de conexiones cambiará. Para A: 5, B: 5, C: 6, la
segunda solicitud de usuario seguirá asignándose a A, y el número de conexiones pasará a ser A6, B: 5, C: 6; se asignará una nueva solicitud a B cada vez. Asigne nuevas solicitudes al cliente con el menor número de conexiones.
Sin embargo, en condiciones reales, la cantidad de conexiones de A, B y C se liberará dinámicamente y es difícil tener la misma cantidad de conexiones. Por lo tanto, este algoritmo se ha mejorado mucho en comparación con el algoritmo rr, y es un algoritmo que se utiliza más actualmente.

1.3: Algoritmo de programación de acceso a la fuente SH (Source Hashing)

SH se basa en el algoritmo de programación de acceso a la fuente. Este algoritmo se utiliza en algunos escenarios donde las sesiones de sesión se registran en el lado del servidor. La programación del clúster puede basarse en la IP de origen, la cookie, etc.

Si hay tres nodos A, B, C, el primer usuario
se asignará a A para la primera visita y el segundo usuario se asignará a B para la primera visita. Cuando el primer usuario visite por segunda vez, continuará siendo asignado a A, el segundo usuario seguirá siendo asignado a B durante la segunda visita. Siempre que el programador de equilibrio de carga no se reinicie, el acceso del primer usuario se asignará a A y el acceso del segundo usuario se asignará to B para lograr la programación de clústeres 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.

Dos: configuración del clúster Haproxy

2.1 Composición ambiental

  1. Servidor Haproxy CentoS 7.4 x86_64 192.168.100.10 haproxy-1.5.19.tar.gz
  2. Servidor Nginx 1 CentOs 7.4 x86_64 192.168.100.11 nginx-1.12.0.tar.gz
  3. Servidor Nginx 2 CentOs 7.4 x86_64 192.168.100.12 nginx-1.12.0.tar.gz
  4. servidor nfs CentOS 7.4 x86_64 192.168.100.13 nsf-utils rpcbind
  5. Cliente CentOS 7.4 x86_64 192.168.100.15 Chrome

2.2: Instalación y puesta en marcha de Nginx

Instale Nginx en los dos servidores web e inicie el servicio

使用源码编译的方式进行安装
关闭 Firewalld防火墙
安装编译安装所需环境包
增加系统用户账号 nginx
编译安装 Nginx并启动
在两台Nginx上配置测试网站,测试网页的内容应该不同,以便进行测试

2.3: Instalación y puesta en marcha de Haproxy

Instale Haproxy en el programador de equilibrio de carga

  • Pasos de instalación
  1. Instalar paquete de entorno
  2. Compila e instala haproxy
  3. Crear archivo de configuración de Haproxy
  4. Cree el directorio del archivo de configuración / etc / haproxy
  5. Copie el archivo de configuración de muestra haproxy.cfg proporcionado por el paquete fuente en el directorio del archivo de configuración

2.4: Archivo de configuración de Haproxy

El archivo de configuración de Haproxy generalmente se divide en tres partes

global:为全局配置
defaults:为默认配置
listen:为应用组件配置
  • parámetros de configuración global
log 127.0.0.1 lcal0:配置日志记录,local0为日志设备,默认存放到系统日志
log 127.0.0.1 loca1 notice:notice为日志级别,通常有24个级别
maxconn 4096:最大连接数
uid 99:用户uid
gid 99:用户gid
  • Los parámetros predeterminados de configuración del elemento de configuración predeterminados
    generalmente serán heredados por el componente de la aplicación, si no hay una declaración especial en el componente de la aplicación, se instalarán los parámetros de configuración predeterminados.
log global:定义日志为global配置中的日志
mode http:模式为http
option httplog:采用http日志格式记录日志
retries 3:检查节点服务器失败连续达到三次则认为节点不可用
maxconn 2000       最大连接数
contimeout 5000      连接超时时间
clitimeout 50000     客户端超时时间
srvtimeout 50000     服务器超时时间
  • El elemento de configuración de escucha generalmente configura los parámetros del módulo de aplicación
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.114.56:80 check inter 2000 fall 3   定义在线节点
server inst2 192.168 114.56:81 check inter 2000 fall 3 backup:定义备份节点

Ver archivo de configuración

global
        log 127.0.0.1   local0   //日志输出配置,所有日志都记录在本机,通过local0输出
        log 127.0.0.1   local1 notice  //notice为日志级别
        #log loghost    local0 info
        maxconn 4096        //最大连接数
        chroot /usr/share/haproxy     //锁定家目录
        uid 99   //用户uid
        gid 99   //用户gid
        daemon
        #debug
        #quiet
        
defaults
        log     global   		//定义日志为global配置中的日志
        mode    http     		//模式为http
        option  httplog  		//采用http日志格式记录日志
        option  dontlognull 
        retries 3    			//检查节点服务器失败次数,连续达到三次失败,则节点不可用
        redispatch      		//请求继续发个DOWN的节点
        maxconn 2000    		//最大连接数
        contimeout      5000    //连接超时时间
        clitimeout      50000   //客户端超时时间
        srvtimeout      50000   //服务器超时时间
 
listen  appli1-rewrite 0.0.0.0:10001   //定义一个appli1-rewrite的应用
        cookie  SERVERID rewrite
        balance roundrobin           //负载均衡算法使用轮询算法
        server  app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
        server  app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5
        server  app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5
        server  app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5
 
listen  appli2-insert 0.0.0.0:10002
        option  httpchk              //检查服务器的文件
        balance roundrobin
        cookie  SERVERID insert indirect nocache
        server  inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
        server  inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
        capture cookie vgnvisitor= len 32
 
        option  httpclose               # disable keep-alive
        rspidel ^Set-cookie:\ IP=       # do not let this cookie tell our internal IP address
 
listen  appli3-relais 0.0.0.0:10003
        dispatch 192.168.135.17:80

Nota: El nivel de registro, 0 (EMERG, emergencia), 1 (ALERTA, advertencia), 2 (CRIT, grave), 3 (ERR, error), 4 (ADVERTENCIA, recordatorio), 5 (AVISO, atención), 6 ( INFO, información), 7 (DEBUG, depuración)

Tres, operación real

Para una operación simple, solo verifique la función de programación de haproxy, no usamos el servidor compartido nfs.
Solo 4 dispositivos:

  1. IP del programador hyproxy 192.168.100.10
  2. IP del servidor nginx1 192.168.100.11
  3. IP del servidor nginx2 192.168.100.12
  4. Verifique la IP del cliente Linux 192.168.100.15

3.1 Configurar el servidor de nodo web Nginx

1. 配置环境
yum -y install \
pcre-devel zlib-devel \
gcc gcc-c++ make

2. 创建nginx的账户
useradd -M -s /sbin/nologin nginx

3. 解压软件包
tar zxvf nginx-1.12.0.tar.gz -C /opt/   // -C:指定解压的目录

4. 编译且安装
cd nginx-1.12.0/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
make && make install

5. 编辑测试主页面
cd /usr/local/nginx/html
echo "this is nginx1" > test.html

6. 链接nginx执行程序
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

7. 验证语法错误
nginx -t

8. 开启nginx服务,关闭防火墙
nginx
netstat -ntap |grep nginx

[root@nginx1 logs]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      57802/nginx: master 

systemctl stop firewalld
setenforce 0
自己浏览器查看nginx

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

3.2 Configurar el servidor haproxy

1. 编译环境
yum -y install \
pcre-devel \
bzip2-devel \
gcc \
gcc-c++ \
make

2. 解压haproxy软件包
tar zxvf haproxy-1.4.24.tar.gz -C /opt/     //-C 指定目标目录

3.编译安装haproxy
cd /opt/haproxy-1.4.24/
make TARGET=linux26					//编译成指定内核版本
make install

4. 创建配置文件的目录,且复制模板
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

5. 编辑配置文件
cd /etc/haproxy/
vim haproxy.cfg

删除以下语句
#chroot /usr/share/haproxy			//关闭固定家目录
#redispatch							//关闭对于失败服务器发送请求

#删除所有listen项目并添加
listen webcluster 0.0.0.0:80		//监听任意网段的80端口,webcluster自定义名称
	option httpchk GET /test.html
	balance roundrobin
	server inst1 192.168.100.11:80 check inter 2000 fall 3
	server inst2 192.168.100.12:80 check inter 2000 fall 3

6. 配置服务控制方式	
cp /opt/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d
chmod +x haproxy
vim haproxy
#chkconfig 35 81 25
:wq
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
7. 关闭安全性功能,开启服务
systemctl stop firewalld
setenforce 0
systemctl start haproxy
netstat -ntap |grep haproxy   '检查80端口'

Prueba: Visite la dirección del servidor proxy 192.168.100.10 para actualizar y comprobar si se
utiliza el conmutador de programación . Utilice el cliente 192.168.100.15 curl 192.168.100.10/test.html, el resultado es el siguiente:
Inserte la descripción de la imagen aquí
vista del navegador: el
Inserte la descripción de la imagen aquí
servidor de programación se ha iniciado Planificación

Cuatro, gestión de registros Haproxy

4.1: Configuración de registro

El registro de Haproxy se envía al registro del sistema del sistema de forma predeterminada, generalmente lo definimos por separado

Pasos:

1.修改 Haproxy配置文件中关于日志配置的选项,加入配置
vim /etc/haproxy/haproxy.cfg
log /dev/log local0 info
log /dev/log local0 notice

修改 rsyslog配置,将 Haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下

保存配置文件并重启 rsyslog服务,完成 rsyslog配置

访问Haproxy群集测试网页并查看日志信息

4.2 Operación

// Continuar con la operación anterior

  • Configurar el registro, agregar scripts
vim /etc/haproxy/haproxy.cfg
	log /dev/log local0 info
	log /dev/log local0 notice
:wq
systemctl restart haproxy

touch /etc/rsyslog.d/haproxy.conf
vim  /etc/rsyslog.d/haproxy.conf
//添加下面代码
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
//当程序名匹配到haproxy 和 日志级别是info时,输出到/var/log/haproxy/haproxy-info.log里
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
//当程序名匹配到haproxy 和 日志级别是notice时,输出到/var/log/haproxy/haproxy-notice.log里
  • Reinicie el servicio
    systemctl restart rsyslog.service // Reinicie el registro del sistema
    systemctl restart haproxy // Reinicie el servicio para tener el archivo de registro
    Compruebe el efecto:
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Cinco, optimización de parámetros de Haproxy

A medida que aumenta la carga de sitios web corporativos, es necesario optimizar los parámetros haproxy

  1. maxconn: Número máximo de conexiones, ajustado según la situación real de la aplicación, se recomienda 10240
  2. daemon: modo de proceso demonio, Haproxy se puede iniciar en modo de proceso no demonio, se recomienda utilizar el modo de proceso demonio para iniciar
  3. nbproc: el número de procesos concurrentes para el equilibrio de carga, se recomienda que sea igual o 2 veces el número de núcleos de CPU del servidor actual
  4. reintentos: la cantidad de reintentos, que se utiliza principalmente para verificar los nodos del clúster. Si hay muchos nodos y la cantidad de simultaneidad es grande, configúrelo en 2 o 3 veces
  5. opción http-server-close: cierre activamente la opción de solicitud http, se recomienda utilizar esta opción en un entorno de producción
  6. timeout http-keep-alive: tiempo de espera de conexión prolongado, establezca el tiempo de espera de conexión prolongado, que se puede configurar en 10 s
  7. timeout http-request: tiempo de espera de la solicitud http, se recomienda establecer este tiempo en 5 ~ 10 s para aumentar la velocidad de liberación de la conexión http
  8. timeout client: 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 establecerlo en aproximadamente 1 min.

Supongo que te gusta

Origin blog.csdn.net/qq_46480020/article/details/110945555
Recomendado
Clasificación