Keepalived实现mysql的负载均衡

安装了mysql一主两从,mysql进行读写分离,读的这部分需要用keepalived负载均衡。高可用的话使用MHA,keepalived也可以高可用,但是不推荐。

一、准备工作

前面的mysql主从自己搭建

192.168.88.129 负载均衡主机 这里备机下次试试.

192.168.88.130 mysql从机A

192.168.88.131 mysql从机B

 192.168.88.18  虚拟ip

上面三个主机的防火墙都先关闭

systemctl stop firewalld

二、负载均衡主机搭建Keepalived ipvsadm

①安装keepalived、ipvsadm

yum install -y keepalived
yum install -y ipvsadm

② 配置keepalived

 vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
  router_id LVS_MASTER  # 设置lvs的id,在一个网络内应该是唯一的
}

vrrp_instance VI_1 {
    state MASTER  #指定Keepalived的角色,MASTER为主,BACKUP为备
    interface ens33  ##网卡名称
    virtual_router_id 51 #虚拟路由编号,主备要一致
    priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1 #检查间隔,默认为1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.88.18  #定义虚拟IP(VIP)为192.168.88.18,可多设,每行一个
    }
}

virtual_server 192.168.88.18 3306 {
    delay_loop 6 # 设置健康检查时间,单位是秒
    lb_algo rr   # 设置负载调度的算法 这个值可以百度一下 根据需求
    lb_kind DR   # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式,我默认用的NAT,一直不行,改了DR就可以了
    nat_mask 255.255.255.0 
    #persistence_timeout 50 #会话保持时间
    protocol TCP
    
    real_server 192.168.88.130 3306 {  #分配给mysql从机的ip
        weight 3                       # 配置节点权值,数字越大权重越高
        TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 3306
        }
    }
	
    real_server 192.168.88.131 3306 {  #分配给mysql从机的ip
        weight 3                       # 配置节点权值,数字越大权重越高
        TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 3306
        }
    }
}

③ 启动keepalived

systemctl start keepalived

查看keepalived的状态

systemctl status keepalived

这里如果有问题可以查看 keepalived的日志,如果下面的分发有问题也可以看日志。

tail -f /var/log/messages  

④ 查看 ipvsadm的状态

先启动 systemctl start ipvsadm

systemctl status ipvsadm

 如果这里的状态是失败的,请看失败的错误的信息百度一下,重新启动,我在这里出现过问题,搞了很久才成功

查看ip的分发情况  命令 ipvsadm -Ln

可以看出虚拟ip 192.168.88.18 分发给130、131两个ip 

 三、从机配置

 创建 /etc/init.d/realserver.sh 

chmod +x /etc/init.d/realserver.sh 

sh /etc/init.d/realserver.sh start ##启动

SNS_VIP=192.168.88.18      ##虚拟ip
#/etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

四、检验负载均衡是否成功

 通过其他局域网主机来访问

mysql -h192.168.88.18 -urpl -p"123456" -e"show variables like 'server_uuid'"

这里的mysql用户一定要配置可以局域网访问。

 从可以看出请求两次是连接到不同的mysql中

遇到的坑:

① ipvsadm没有启动起来,记得用systemctl status ipvsadm来查看状态,搞了很长时间

② 从机不需要安装keepalived, 当时学的时候,需要安装keepalived的是负载均衡的主机和备机,用keepalived高可靠的用,我这里的例子没有备机就没有,mysql从机上面是需要安装realserver.sh 并启动即可

③ /etc/keepalived/keepalived.conf 中的 lb_kind  设置LVS实现负载的机制,有NAT、TUN、DR三个模式,我们这个例子中使用的是DR, 如果使用NAT是行不通的,这里是最大的一个坑。

④ 记得关闭防火墙

⑤ 记得keepalived有问题要看日志,就跟mysql启动不起来要看mysql的日志文件一样。

参考博文

https://blog.csdn.net/weixin_30895723/article/details/107777933
https://www.cnblogs.com/tangyanbo/p/4305589.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值