安装了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