haproxy代理mysql
背景
在做mysql集群的时候需要一个负载均衡解决方案,以便流量可以按照需求传给mysql各个节点,以下主要记录haproxy的配置
安装mysql(略)
创建haproxy用户
create user if not exists 'haproxy'@'%' identified with mysql_native_password by ''; grant all privileges on *.* to 'haproxy'@'%'; flush privileges;PS:如果是Mysql8需要使用mysql_native_password加密方法,否则会报错
安装haproxy
yum install haproxy配置haproxy
vi /etc/haproxy/haproxy.cfg global log 127.0.0.1 local2 err chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode http option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 maxconn 4096 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时 #timeout check 2000 #=心跳检测超时 log 127.0.0.1 local2 err #[err warning info debug] listen admin_status bind 0.0.0.0:82 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称 mode http #设置http的7 层模式层 option httpclose stats refresh 30s #设置监控页面刷新时间:5s stats uri / # 设置监控页面的url stats realm Haproxy Statistics #设置页面提示信息 stats auth admin:admin #设置监控页面的用户和密码:admin,可以设置多个用户名 stats hide-version #隐藏统计页面的HAproxy版本信息 listen proxy-mysql bind *:3307 #监听端口 mode tcp #监听模式 balance roundrobin #负载均衡方式为轮循 option tcplog option mysql-check user haproxy #haproxy为免密Mysql用户 server MySQL_1 10.10.10.103:3306 check weight 1 maxconn 2000 #后端服务器1 server MySQL_2 10.10.10.103:23306 check weight 1 maxconn 2000 #后端服务器2配置rsyslog
将haproxy错误日志写入rsyslog指定的目录
cd /var/log mkdir haproxy cd haproxy touch haproxy.log chmod a+w haproxy.log vi /etc/rsyslog.conf 添加 local2.* /var/log/haproxy/haproxy.log 将以下两行取消注释 $ModLoad imudp $UDPServerRun 514 vi /etc/sysconfig/rsyslog 修改成 SYSLOGD_OPTIONS="-r -m 2 -c 2"重启rsyslog和haproxy
systemctl restart rsyslog systemctl restart haproxy查看效果
访问浏览器82端口查看监控状态,可以看到两个均为已上线 使用navicat连接也可以看到不同的连接次数会连接到不同的后端