mysql主从使用haproxy实现负载均衡
mysql需要配置数据同步服务
一、配置主mysql
mysql5.7.20安装见
https://www.cnbugs.com/post-833.html
修改配置文件:
修改my.cnf配置文件添加如下配置文件
[root@lnmp-zabbix ~]# vim /etc/my.cnf
# 指定服务器ID
server-id=1
# 开启二进制日志
log-bin=mysql-bin
重启mysql服务
[root@lnmp-zabbix ~]# /etc/init.d/mysqld57 restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
在Master服务器上创建MySQL用户(授权复制用户)
mysql> grant replication slave on *.* to 'slave'@'10.168.1.151' identified by 'Aa123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
18521137579
命令:grant replication slave on . to '用户名'@'slave IP地址' identified by '密码';
查看master状态
mysql> show master status;

二、配置备mysql
修改my.cnf配置文件添加如下参数
[root@keeplived_haproxy_mysql ~]# vim /etc/my.cnf
server-id = 2
log-bin=mysql-bin
重启mysql服务
[root@keeplived_haproxy_mysql ~]# /etc/init.d/mysqld57 restart
配置slave
mysql> change master to master_host='10.168.1.150',master_user='slave',master_password='Aa123456',master_log_file='mysql-bin.000006',master_port=3306,master_log_pos=154;
说明:
change master to
->master_host='master主机IP',
->master_port='master mysql服务使用端口',
->master_user='master mysql远程用户名',
->master_password='master mysql远程密码',
->master_log_file='master二进制日志文件', #show master status中File的值
->master_log_pos='master日志地址'; show master status中Position的值
启动slave并查看主从配置是否成功
mysql> start slave;
mysql> show slave status\G;

三、安装Haproxy
master和slave安装配置步骤相同。
1、 下载安装包并解压
[root@lnmp-zabbix opt]# wget https://mirrors.huaweicloud.com/haproxy/2.1/src/haproxy-2.1.5.tar.gz
[root@lnmp-zabbix opt]# tar xf haproxy-2.1.5.tar.gz
2、编译安装
(1)编译
[root@lnmp-zabbix opt]# cd haproxy-2.1.5/
[root@lnmp-zabbix haproxy-2.1.5]# make -j $(nproc) TARGET=linux-glibc USE_NS=
USE_NS = 跳过依赖
(2)安装
make -j $(nproc) TARGET=linux-glibc USE_NS=
[root@lnmp-zabbix haproxy-2.1.5]# make install PREFIX=/usr/local/haproxy
make install PREFIX=安装路径
查看生成的文件

3、创建配置文件日志目录
[root@lnmp-zabbix ~]# mkdir /usr/local/haproxy/logs
[root@lnmp-zabbix ~]# mkdir /usr/local/haproxy/conf
4、编辑配置文件
[root@lnmp-zabbix ~]# vim /usr/local/haproxy/conf/haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
uid 99
gid 99
daemon
defaults
mode http
log global
option tcplog
option dontlognull
option redispatch
retries 3
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 10s
maxconn 4096
listen mysql_proxy
bind 0.0.0.0:3307
mode tcp
balance source
option mysql-check user haproxy #在mysql中创建无任何权限用户haproxy,且无密码
server mysqldb1 10.168.1.150:3306 weight 1 check inter 1s rise 2 fall 2 #master mysql
server mysqldb2 10.168.1.151:3306 weight 2 check inter 1s rise 2 fall 2 backup #slave mysql
listen stats
mode http
bind 0.0.0.0:8888
stats enable
stats uri /dbs
stats realm Global\ statistics
stats auth admin:admin
数据库创建无任何权限的haproxy用户
mysql> CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
服务启动
[root@lnmp-zabbix conf]# /usr/local/haproxy/sbin/haproxy -D -f /usr/local/haproxy/conf/haproxy.cfg
查看服务是否启动

浏览器打开:http://10.168.1.150:8888/dbs,用户名和密码均为admin

开启系统日志文件支持
(1)修改/etc/syslog.conf,命令:vim /etc/rsyslog.conf ,添加内容:
local1.* /usr/log/haproxy/logs/haproxy.log
#注意:local数字 该值与haproxy.conf中的配置保持一致
(2)修改/etc/sysconfig/syslog,命令:vim/etc/sysconfig/rsyslog,添加内容:
[root@lnmp-zabbix ~]# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS=”-c 2 -r -m 0″
#注释:-c 2 使用兼容模式,默认是 -c 5,-r开启远程日志,-m 0标记时间戳。单位是分钟,为0时,表示禁用该功能
(3)重启rsyslog服务,命令:
[root@lnmp-zabbix ~]# systemctl restart rsyslog
(4)重启haproxy服务,命令:
[root@lnmp-zabbix ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
四、测试
创建测试数据库和用户
mysql> create database wxj;
mysql> grant all privileges on wxj.* to 'wxj'@'%' identified by '123456';
mysql> flush privileges;
关掉一个数据库在进行测试连接,依然连接正常,haproxy生效

mysql利用haproxy负载均衡搭建完成。
注意:mysql数据库最好做成主主库,这样当一个数据库服务器断掉后不会影响业务。
评论(2)
您好,有几个问题想向您请教一下,因为是刚刚接触haproxy,就是想用这个做一个浮动IP,这个可以实现吗?第二个问题:要是可以做浮动IP,那可以让应用连接这个浮动IP然后去挂数据库吗?这个是怎么操作?我这里搭建了MySQL的主主互备,应用也做了主备,但是服务器A的数据库死掉了,服务器A的应用不就连接不到数据库了吗?然后想通过让应用去连接浮动IP然后去链接到数据库,请求获得详细指导,谢谢啦。
可以使用VIP,也可以使用keepalived