您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

Keepalived+Haproxy负载均衡MySQL集群服务器

时间:08-27来源:作者:点击数:

上一篇我们用三台Ubuntu搭建了MySQL集群服务器

docker搭建了MySQL集群服务器

这里讲一下利用Haproxy对MySQL进行负载均衡

将这台服务器的ip设置为192.168.117.120

MySQL集群服务器的ip分别是

192.168.117.111

192.168.117.112

192.168.117.113

我们需要用Navicat登录其中一台MySQL服务器,创建一个用户haproxy,密码设置为空

对应sql

CREATE USER `haproxy`@`%` IDENTIFIED WITH mysql_native_password;

在192.168.117.120 新服务器上安装haproxy软件

apt install haproxy -y

修改配置文件

vim /etc/haproxy/haproxy.cfg

在文件末添加后台管理界面 以及监听MySQL进行负载均衡

你需要好好看一下添加的内容注释


#监控界面	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:4001
	#访问协议
	mode        http
	#URI相对地址  ip:端口/dbs可以查看后台
	stats uri   /dbs
	#统计报告格式
	stats realm     Global\ statistics
	#登陆帐户信息    账户admin  密码123456
	stats auth  admin:123456
#数据库负载均衡
listen  proxy-mysql
	#访问的IP和端口
	bind  0.0.0.0:3306  
	#网络协议
	mode  tcp
	#负载均衡算法(轮询算法、后面的权重不会生效)
	#轮询算法:roundrobin
	#权重算法:static-rr
	#最少连接算法:leastconn
	#请求源IP算法:source 
	balance  roundrobin
	#日志格式
	option  tcplog
	#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
	option  mysql-check user haproxy
	server  MySQL_1 192.168.117.111:3306 check weight 1 maxconn 2000  
	server  MySQL_2 192.168.117.112:3306 check weight 1 maxconn 2000  
	server  MySQL_3 192.168.117.113:3306 check weight 1 maxconn 2000 
	server  MySQL_4 192.168.117.114:3306 check weight 1 maxconn 2000
	server  MySQL_5 192.168.117.115:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option  tcpka  

将配置文件生效

haproxy -f /etc/haproxy/haproxy.cfg

然后就可以通过浏览器查看mysql服务器的状态

http://localhost:4001/dbs

输入在配置文件填入的 账号admin 密码123456即可查看后台情况

以及通过haproxy的ip 端口3306可以管理mysql数据库 这个也就是暴露在外部使用的数据库服务器ip

在这个数据库中操作和直接在各个节点数据库操作是一样的效果,但haproxy本身不存储数据库

为了让haproxy高可用,我们需要搭建haproxy集群,采用keepalive技术让让haproxy可以实现down机自动切换备用服务器

在haproxy服务器上安装keepalived

apt install keepalived -y

查看本机网卡

ifconfig

创建keepalived配置文件

vim /etc/keepalived/keepalived.conf

添加如下

! Configuration File for keepalived

global_defs {
   # 通知邮件服务器的配置
   notification_email {
     # 当master失去VIP或则VIP的时候,会发一封通知邮件到your-email@qq.com
     your-email@qq.com
   }
   # 发件人信息
   notification_email_from keepalived@qq.com
   # 邮件服务器地址
   smtp_server 127.0.0.1
   # 邮件服务器超时时间
   smtp_connect_timeout 30
   # 邮件TITLE
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    # 主机: MASTER
    # 备机: BACKUP
    state MASTER
    # 实例绑定的网卡, 用ip a命令查看网卡编号
    interface ens33
    # 虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID必须一样
    virtual_router_id 88
    # 优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器
    priority 100
    # 主备之间同步检查的时间间隔单位秒
    advert_int 1
    # 验证类型和密码
    authentication {
        # 验证类型有两种 PASS和HA
        auth_type PASS
        # 验证密码,在一个实例中主备密码保持一样
        auth_pass 123456
    }
    # 虚拟IP地址,可以有多个,每行一个
    virtual_ipaddress {
        192.168.117.244
    }
}

virtual_server 192.168.117.244 443 {
    # 健康检查时间间隔
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    # 通过调度算法把Master切换到真实的负载均衡服务器上
    # 真实的主机会定期确定进行健康检查,如果MASTER不可用,则切换到备机上
    real_server 192.168.117.120 443 {
        weight 1
        TCP_CHECK {
            # 连接超端口
            connect_port 443
            # 连接超时时间
            connect_timeout 3
        }
    }
    real_server 192.168.1.121 443 {
        weight 1
        TCP_CHECK {
            connect_port 443
            connect_timeout 3
        }
    }
}

注意修改对应参数,virtual_ipaddress是根据网卡网段自己设置的一个虚拟的ip,haproxy的真实ip是192.168.117.120

启动keepalived

service keepalived restart

测试 通过ping 虚拟ip测试一下

通过 ping 192.168.117.244

同样的道理可以再创建一台Haproxy+Keepalived的服务器,因为在配置文件里我写入的是两台服务器ip分别是

192.168.117.120 和 192.168.117.121

实际暴露在外面使用的是虚拟ip 192.168.117.244

可以通过Navicat连接虚拟ip调用MySQL集群这样MySQL集群架构变成了

如果你还想进一步学习:搭建Nginx集群+Haproxy集群

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门