在部署mysql 主主高可用时,使用haproxy进行负载,在服务部使用的情况下发现服务器cpu占比高,负载也高,因此急需解决这个问题。
1.解决前现状
1.1 部署配置文件
cat > haproxy.cfg << EOF
globalmaxconn 4000nbthread 2daemon
defaultslog globallog 127.0.0.1 local3mode httpoption tcplogoption dontlognullretries 10option redispatchmaxconn 2000timeout connect 30stimeout client 10mtimeout server 10m#timeout http-keep-alive 10stimeout check 10s
######## 监控界面配置 #################
listen admin_stats#监控界面的访问的IP和端口bind 0.0.0.0:8888#访问协议mode http#URI相对地址stats uri /dbs#统计报告格式stats realm Global\ statistics#登陆帐户信息stats auth admin:admin# 隐藏HAProxy的版本号stats hide-version# 管理界面,如果认证成功了,可通过webui管理节点stats admin if TRUE# 统计页面自动刷新时间stats refresh 30s
listen mysqlbind 0.0.0.0:3306mode tcp#负载均衡算法(轮询算法)#轮询算法:roundrobin#权重算法:static-rr#最少连接算法:leastconn#请求源IP算法:source balance roundrobin# 监控检查需要一个无密码的账号# mysql健康检查 haproxy为mysql登录用户名(需要在实体数据有这个账户,且无密码)# option mysql-check user haproxy server s1 mysql-master1:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2server s2 mysql-master2:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2 backup
EOFcat > dokcer-stark-haproxy.yml << EOF
version: '3'networks:liuhm-net:external: true services:haproxy:image: haproxy:alpinehostname: haproxyvolumes:- "${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"- "/etc/localtime:/etc/localtime:ro"restart: alwaysprivileged: trueports:- 8888:8888- 3306:3306networks:- liuhm-netdeploy:mode: global
EOF
2.解决后
- 修改了镜像版haproxy:2.9.1-alpine
- 增加了配置 tune.disable-zero-copy-forwarding
- github 解决问题地址
cat > haproxy.cfg << EOF
globalmaxconn 4000nbthread 2daemon ## tune.disable-zero-copy-forwarding必须配置,不然cpu占比很高tune.disable-zero-copy-forwarding
defaultslog globallog 127.0.0.1 local3mode httpoption tcplogoption dontlognullretries 10option redispatchmaxconn 2000timeout connect 30stimeout client 10mtimeout server 10m#timeout http-keep-alive 10stimeout check 10s
######## 监控界面配置 #################
listen admin_stats#监控界面的访问的IP和端口bind 0.0.0.0:8888#访问协议mode http#URI相对地址stats uri /dbs#统计报告格式stats realm Global\ statistics#登陆帐户信息stats auth admin:admin# 隐藏HAProxy的版本号stats hide-version# 管理界面,如果认证成功了,可通过webui管理节点stats admin if TRUE# 统计页面自动刷新时间stats refresh 30s
listen mysqlbind 0.0.0.0:3306mode tcp#负载均衡算法(轮询算法)#轮询算法:roundrobin#权重算法:static-rr#最少连接算法:leastconn#请求源IP算法:source balance roundrobin# 监控检查需要一个无密码的账号# mysql健康检查 haproxy为mysql登录用户名(需要在实体数据有这个账户,且无密码)# option mysql-check user haproxy server s1 mysql-master1:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2server s2 mysql-master2:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2 backup
EOFcat > dokcer-stark-haproxy.yml << EOF
version: '3'networks:liuhm-net:external: true services:haproxy:image: haproxy:2.9.1-alpinehostname: haproxyvolumes:- "${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"- "/etc/localtime:/etc/localtime:ro"restart: alwaysprivileged: trueports:- 8888:8888- 3306:3306networks:- liuhm-netdeploy:mode: global
EOF
实际配置后没有飙升