HA+MySQL高可用负载均衡集群

系统结构:

主机名 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

在这里插入图片描述可以看到3344端口和8888端口都处于监听状态。
测试:
使用Navicat连接10.1.1.26:3344数据库:在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章