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)

  • 荧惑 普通 2021年8月20日 下午7:06

    您好,有几个问题想向您请教一下,因为是刚刚接触haproxy,就是想用这个做一个浮动IP,这个可以实现吗?第二个问题:要是可以做浮动IP,那可以让应用连接这个浮动IP然后去挂数据库吗?这个是怎么操作?我这里搭建了MySQL的主主互备,应用也做了主备,但是服务器A的数据库死掉了,服务器A的应用不就连接不到数据库了吗?然后想通过让应用去连接浮动IP然后去链接到数据库,请求获得详细指导,谢谢啦。