系统结构:
主机名 | IP |
---|---|
MySQL1 | 10.1.1.20 |
MySQL2 | 10.1.1.21 |
HAProxy | 10.1.1.26 |
安装MySQL双主,上面有,不多说。
安装HAProxy:
[root@localhost ~]# yum install -y haproxy #安装
查看HAProxy的版本等信息
[root@localhost ~]# rpm -qi haproxy.x86_64
Name : haproxy
Version : 1.5.18
Release : 8.el7
Architecture: x86_64
查看HAProxy的配置信息,下面只列出简要信息:
[root@localhost ~]# rpm -ql haproxy.x86_64
/etc/haproxy
/etc/haproxy/haproxy.cfg #此处为HAProxy的配置文件位置
/etc/logrotate.d/haproxy
/etc/sysconfig/haproxy
/usr/bin/halog
/usr/bin/iprange
/usr/lib/systemd/system/haproxy.service
/usr/sbin/haproxy
/usr/sbin/haproxy-systemd-wrapper
HAProxy安装完成后配置文件默认是不存在的,需要先启动HAProxy,然后才会生成:
[root@localhost ~]# systemctl start haproxy
[root@localhost ~]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2019-05-31 14:03:26 CST; 10min ago
Main PID: 7291 (haproxy-systemd)
启动HAProxy后再看/etc/haproxy/haproxy.cfg文件已经生成了,此时我们需要根据我们的MySQL来配置负载:
# vim /etc/haproxy/haproxy.cfg
# 全局配置参数
global
#开启HAProxy的日志功能
log 127.0.0.1 local0 info
user haproxy
group haproxy
# 一些默认参数
defaults
log global
retries 3
option dontlognull
option redispatch
maxconn 2000
timeout connect 3000
timeout server 5000
timeout client 5000
# 这个是我们定义的负载均衡的配置
listen mysql-lb1
# 绑定的IP和端口 haproxy服务器一个网卡IP
bind 0.0.0.0:3344
# 模式是TCP
mode tcp
# 通过mysql连接去检测mysql是否可以访问 创建用户haproxy_check 密码为空,权限usage
option mysql-check user haproxy_check
# 负载均衡算法是 轮询
balance roundrobin
# 下面两个就是后端被访问的server
server mysql_1 10.1.1.20:3306
server mysql_2 10.1.1.21:3306
# 自带的监控服务器的配置
# 监控服务的端口是 8888
listen stats *:8888
# 监控模式是http
mode http
option httpclose
balance roundrobin
stats uri /
stats realm Haproxy\ Statistics
# 监控的用户名和密码
stats auth myadmin:myadmin
以上配置完成后,重启HAProxy服务会发现服务器不来,通过systemctl status haproxy命令可以看到有如下两个报错:
第一个报错:Starting proxy mysql-lb1: cannot bind socket 0.0.0.0:3344
解决方法:
1,haproxy -f /etc/haproxy/haproxy.cfg -c检查配置文件
2,bind端口不要冲突
3,先设置haproxy连接策略,执行以下命令即可
setsebool -P haproxy_connect_any=1
4,vim /etc/sysctl.conf
添加:net.ipv4.ip_nonlocal_bind=1
然后执行sysctl -p
第二个报错:[/usr/sbin/haproxy.main()] Cannot create pidfile /run/haproxy.pid
错原因:我们再刚安装完HAProxy时启动了一次服务,已经产生了/run/haproxy.pid这个文件。
解决方法:
rm -rf /run/haproxy.pid
然后再启动服务就可以成功了。
开启HAProxy日志功能:
服务的日志默认记录在/var/log/haproxy/haproxy.log文件中,但此文件默认是不存在的需要手动创建:
[root@localhost ~]# mkdir -p /var/log/haproxy/
[root@localhost ~]# touch /var/log/haproxy/haproxy.log
[root@localhost ~]# chown -R haproxy:haproxy /var/log/haproxy/
然后修改HAProxy的配置文件,在global全局变量中添加一行配置:
global
#local0是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别
log 127.0.0.1 local0 info
开启rsyslog记录haproxy日志功能,编辑“/etc/rsyslog.conf”打开如下配置项:
$ModLoad imudp
$UDPServerRun 514
添加如下内容:
# Save haproxy log,local0是日志级别对应/etc/haproxy/haproxy.cfg中的日志配置og
local0.* /var/log/haproxy/haproxy.log
修改“/etc/sysconfig/rsyslog”文件,内容如下:
SYSLOGD_OPTIONS="-r -m 0 -c 2"
验证是否生效:
重启服务
systemctl restart haproxy
service rsyslog restart
###查看日志记录
tailf /var/log/haproxy/haproxy.log
服务启动后检查一下端口监听情况:
[root@localhost ~]# netstat -tunlp|grep haproxy