目录
1、 部署Nginx 服务器:192.168.80.111和192.168.80.112
一、haproxy调优
1、进程
服务启动以后,可以看到默认开启一个主进程,带一个工作进程以及三个线程
可以根据cpu个数来决定开机时启动的work进程数量:在全局配置中添加nbproc参数
nbproc n #开启的haproxy work 进程数,默认进程数是一个
重启之后打开的工作进程就是设置的数量
2、cpu亲缘性
CPU亲缘性(CPU Affinity)是指将进程或线程绑定到特定的CPU核心上运行的技术。通过设置CPU亲缘性,可以避免进程在不同核心之间频繁迁移,从而减少缓存失效、上下文切换等开销,提高系统的整体性能和效率
通过添加cpu-map参数将工作进程与cpu绑定:cpu-map n(work) n(cpu)
重启服务后可以看到工作进程与CPU进行了绑定
这样设置后,haproxy的工作进程将会在指定的核心上运行,有利于优化并行处理能力和减少资源竞争。使得每个进程都在固定的核心上执行,有助于提升数据包处理的稳定性和一致性,尤其在多核处理器环境中更为重要。当然,实际应用时需要根据具体的硬件环境和负载情况合理配置CPU亲缘性。
3、状态页
可以通过http服务来查看状态页,在写配置文件时就已经添加好了
使用浏览器进行访问
可以看到服务的一些状态信息,所以需要妥善保管密码
二、实验:部署HAProxy集群
实验环境:
Haproxy服务器:192.168.80.114
Nginx 服务器1:192.168.80.112
Nginx 服务器2:192.168.80.113
客户端:192.168.80.111
1、 部署Nginx 服务器:192.168.80.111和192.168.80.112
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装依赖关系包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
3. #新建用户和组便于管理
useradd -M -s /sbin/nologin nginx
4. #切换至opt目录,将下载好的压缩包传进来解压
cd /opt
rz -E
tar -zxf nginx-1.12.0.tar.gz
5. #切换至解压后的目录下编译
cd nginx-1.12.0
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
6. #安装
make -j4 && make install
7. #做软连接,让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
8. #将nginx命令加入服务
cd /lib/systemd/system
vim nginx.service
#!/bin.bash
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
9. #创建站点目录
echo "this is 220nginx1 web" > /usr/local/nginx/html/index.html
cat /usr/local/nginx/html/index.html
10. #重新加载单元.启动服务
systemctl daemon-reload
systemctl start nginx
11. #查看是否能成功启动
ss -ntap|grep nginx
curl 192.168.80.111
或者浏览器访问
192.168.80.111
nginx2服务器设置同上,只是在设置站点目录的时候不一样
2、修改haproxy配置文件
listen webcluster 0.0.0.0:80 #定义一个名为webcluster的应用
option httpchk GET /index.html #检查服务器的index.html文件
balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
server inst1 192.168.80.112:80 check inter 2000 fall 3 #定义在线节点
server inst2 192.168.80.113:80 check inter 2000 fall 3
3、验证
三、 实验:重新定义HAProxy集群的日志
- HAproxy本身不记录客户端的访问日志,以减少服务器负载,一般生产中HAProxy不记录日志,也可以配置HAProxy利用rsyslog服务记录日志到指定日志文件中。
#在global配置项定义:
log 127.0.0.1 local{1-7} info #基于syslog记录日志到指定设备,级别有(err、warning、info、debug)
listen web_port
bind 127.0.0.1:80
mode http
log global #开启当前web_port的日志功能,默认不记录日志
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
将日志记录到指定的文件中(本地日志):
#修改配置文件
vim /etc/haproxy/haproxy.cfg
log 127.0.0.1 local3 info
#记录日志到local3 info
#修改配置文件
vim /etc/rsyslog.conf
14 # Provides UDP syslog reception
15 $ModLoad imudp
16 $UDPServerRun 514
74 local3.* /var/log/haproxy.log
systemctl restart haproxy.service
systemctl restart rsyslog.service
#重启服务
ls /var/log/haproxy.log
#访问haproxy状态页,生成日志文件
192.168.80.114:9999/haproxy-status
#验证访问
tail -f /var/log/haproxy.log
#实时查看
将日志传给远端服务器(远程日志):
#修改配置文件
vim /etc/haproxy/haproxy.cfg
log 127.0.0.1 local3 info
log 192.168.10.11 local6 info
#指定远端服务器记录日志到local6 info
systemctl restart haproxy.service
#重启服务
#修改远端服务器配置文件
vim /etc/rsyslog.conf
14 # Provides UDP syslog reception
15 $ModLoad imudp
16 $UDPServerRun 514
#服务器要开启udp端口
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
74 local6.* /var/log/haproxy.log
#指定日志存放位置
systemctl restart rsyslog.service
#重启服务
192.168.10.12:9999/haproxy-status
#验证访问
tail -f /var/log/haproxy.log
#实时查看