Haproxy coopera con Nginx para crear un experimento de implementación de clústeres web (¡gráfico detallado!)

Haproxy coopera con Nginx para crear un experimento de implementación de clústeres web (¡gráfico detallado!)

Un programador de clúster web común

1) El programador de clústeres web común actual se divide en software y hardware. El
software generalmente utiliza LVS, Haproxy, Nginx de código abierto.

2) LVS tiene el mejor rendimiento, pero es relativamente complicado de construir; el módulo ascendente de Nginx admite funciones de clúster, pero la función de verificación de estado de los nodos del clúster no es sólida y la alta concurrencia no es tan buena como Haproxy

3) El hardware más utilizado es F5, y muchas personas utilizan 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 hay deficiencias.
    LVS no admite el procesamiento regular y no puede lograr una separación dinámica y estática.
    Para sitios web a gran escala, la implementación y configuración de LVS son complejas y el éxito del mantenimiento es relativamente alto.
  • Haproxy es un software que proporciona alta disponibilidad, equilibrio de carga y proxy basado en aplicaciones TCP y HTTP. Es
    adecuado para sitios web con cargas pesadas. Se
    ejecuta en hardware y admite decenas de miles de solicitudes de conexión simultáneas.

Tres, principio del algoritmo de programación Haproxy

Haproxy admite una variedad de algoritmos de programación, los más utilizados son tres

  • El
    algoritmo RR (Round Robin) RR es el algoritmo más simple y más utilizado, a saber, la programación por turnos.
  • El
    algoritmo de conexiones mínimas LC (Least Connections) asigna dinámicamente las solicitudes de front-end de acuerdo con el número de conexiones de nodo de back-end.
  • SH (Source Hashing) se
    basa en el algoritmo de programación de acceso a la fuente. Se utiliza 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.

Cuarto, Haproxy crea un clúster web

Paquete de instalación necesario para el experimento

haproxy-1.5.19.tar.gz
nginx-1.12.0.tar.gz

Configuración del entorno

Anfitrión Sistema operativo dirección IP Software / paquete de instalación / herramienta necesarios
Abreviatura de Haproxy-Server
HS
CentOS7
7-2
192.168.2.4 haproxy-1.5.19.tar.gz
Nginx-Server1
abreviatura NS1
CentOS7
7-3
192.168.2.5 nginx-1.12.0.tar.gz
Nginx-Server2
abreviatura NS1
CentOS7
7-4
192.168.2.6 nginx-1.12.0.tar.gz
Cliente Win10 192.168.2.10

Inserte la descripción de la imagen aquí

Nota:

1) Debido al mismo segmento de red, no hay necesidad de servicios de puerta de enlace y DNS, solo comente en la configuración de la tarjeta de red.

2) Todos los servidores deben cerrar el firewall.

3) Es mejor configurar primero el servidor nginx y luego configurar el servidor haproxy para evitar errores. Lo último que debe visitar es la dirección / test.html del servidor haproxy.

4) Cuando el puerto nginx está ocupado, se pueden utilizar los siguientes métodos para resolver el problema

lsof -i:80
kill -9 进程号
nginx或者/usr/local/nginx/sbin/nginx
netstat -natp | grep 80

Inserte la descripción de la imagen aquí

1. Compilación de secuencias de comandos e instalación del servidor Nginx (la fuente yum viene con la implementación)

NS1: 192.168.2.5
NS2: 192.168.2.6

Nota: primero debe arrastrar el paquete nginx-1.12.0.tar.gz al directorio / opt

#!/bin/bash
#======配置yum源======
echo -e "\033[31m =====正在验证当前为仅主机还是NAT模式===== \033[0m"
ping -c2 -w2 www.baidu.com &> /dev/null
if [ $? -eq 0 ];then echo -e "\033[31m 检测当前为NAT模式,为您配置在线yum源 \033[0m"
mkdir -p /etc/yum.repos.d/repo.bak

mv -f /etc/yum.repos.d/* /etc/yum.repos.d/repo.bak &> /dev/null

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null

yum clean all &> /dev/null
yum list &> /dev/null
echo -e "\033[31m 在线源已配置完成 \033[0m"

else
echo -e "\033[31m 检测当前为仅主机模式,为您配置本地yum源 \033[0m"
mount /dev/sr0 /mnt &> /dev/null
cd /etc/yum.repos.d/
mkdir -p /etc/yum.repos.d/repo.bak

mv -f /etc/yum.repos.d/* /etc/yum.repos.d/repo.bak &> /dev/null

echo '[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0' > /etc/yum.repos.d/local.repo
yum clean all &> /dev/null
yum makecache &> /dev/null

df -h | grep "/mnt" 
if [ $? -ne 0 ];then
echo -e "\033[31m 检测当前为仅主机模式,但光盘未连接! \033[0m"
else
echo -e "\033[31m 本地yum源已配置完成 \033[0m"
fi
fi
#======编译安装nginx服务======
#安装所需开发包和编译环境、编译器
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#创建程序用户,便于准确控制访问
useradd -M -s /sbin/nologin nginx

#解压安装包
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

#指定安装路径、指定用户名、组名、启用模块以支持统计状态
cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-file-aio --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module


#编译及安装
make && make install

#软链接便于系统识别nginx操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

#添加nginx系统服务
echo '[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service

#赋权及开启服务、开启开机自启
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

Inserte la descripción de la imagen aquí

Las operaciones anteriores son las mismas para los dos servidores nginx, por lo que no las repetiré

NS1: 192.168.2.5

echo "this is NS1 web" > /usr/local/nginx/html/test.html
cat /usr/local/nginx/html/test.html

Inserte la descripción de la imagen aquí

NS2: 192.168.163.6

echo "this is NS2 web" > /usr/local/nginx/html/test.html
cat /usr/local/nginx/html/test.html

Inserte la descripción de la imagen aquí

2. Implementar el servidor haproxy

Haproxy-Server: 192.168.2.4

1) Apague el firewall y cargue los paquetes de software necesarios para instalar Haproxy en el directorio / opt

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

cd /opt
#把haproxy-1.5.19.tar.gz安装包拖进来

Inserte la descripción de la imagen aquí

2) Compile e instale Haproxy

yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64 && make install

参数说明
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
TARGET=linux26	#内核版本
ARCH=x86_64 	#系统位数,64位系统

Inserte la descripción de la imagen aquí

3) Configuración del servidor Haproxy

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

cd /etc/haproxy/
vim haproxy.cfg
global
  #4~5行–修改,配置日志记录,local0为日志设备,默认存放到系统日志
  log /dev/log   local0 info		
  log /dev/log   local0 notice
  #log loghost    local0 info
  maxconn 4096   #最大连接数,需考虑ulimit-n限制
  
  #8行–注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
  #chroot /usr/share/haproxy
  uid 99    #用户UID
  gid 99    #用户GID
  daemon    #守护进程模式

defaults        
  log     global      #定义日志为global配置中的日志定义
  mode    http	      #模式为http
  option  httplog     #采用http日志格式记录日志
  option  dontlognull #不记录健康检查日志信息
  retries 3           #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
  redispatch				    #当服务器负载很高时,自动结束当前队列处理比较久的连接
  maxconn 2000					#最大连接数
  contimeout      5000			#连接超时时间
  clitimeout      50000			#客户端超时时间
  srvtimeout      50000			#服务器超时时间

#删除下面所有listen项–,添加
listen  webcluster 0.0.0.0:80		
    option httpchk GET /test.html	#检查服务器的test.html文件
    balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
    server inst1 192.168.2.5:80 check inter 2000 fall 3		#定义在线节点
    server inst2 192.168.2.6:80 check inter 2000 fall 3

#--参数说明----------------
balance roundrobin   #负载均衡调度算法
#轮询算法: roundrobin;最小连接数算法: leastconn;来源访问调度算法: source,类似于nginx的ip_hash

check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
fall 3   #表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有""backup"表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带"backup",表示为主节点,和其它主节点共同提供服务。

Inserte la descripción de la imagen aquí

4) Agregue el servicio del sistema Haproxy

Nota: Este paso debe realizarse después de configurar el servidor Nginx; de lo contrario, no se iniciará

cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
ll
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start

Inserte la descripción de la imagen aquí

3. Pruebe el clúster web

Abra http://192.168.2.4/test.html con un navegador en el cliente y actualice constantemente el navegador para probar el efecto de equilibrio de carga

Inserte la descripción de la imagen aquí

Cinco, definición de registro

1. Edite el archivo de configuración de haproxy

De forma predeterminada, el registro de haproxy se envía al syslog del sistema, que no es muy conveniente de ver. Para administrar mejor el registro de haproxy, generalmente lo definimos por separado en el entorno de producción. Los registros de información y avisos de haproxy deben registrarse en diferentes archivos de registro.

vim /etc/haproxy/haproxy.cfg
global
	log /dev/log local0 info
	log /dev/log local0 notice

service haproxy restart
123456

2. Modifique la configuración de rsyslog

Necesita modificar la configuración de rsyslog, para facilitar la gestión. Defina la configuración relacionada con haproxy de forma independiente en haproxy.conf y colóquela en /etc/rsyslog.d/. Cuando rsyslog se inicie, cargará automáticamente todos los archivos de configuración en este directorio.

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
&~
12345678

Nota:
Esta parte de la configuración es para registrar el registro de información de haproxy en /var/log/haproxy/haproxy-info.log, y para registrar el registro de avisos en /var/log/haproxy/haproxy-notice.log. "& ~" significa que cuando el registro se escribe en el archivo de registro, rsyslog deja de procesar esta información.

systemctl restart rsyslog.service

tail -f /var/log/haproxy/haproxy-info.log		#查看haproxy的访问请求日志信息

Supongo que te gusta

Origin blog.csdn.net/qq_35456705/article/details/113668088
Recomendado
Clasificación