应用背景:
MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动
切换到另外一台主机。LVS和Keppalived可以设定一个VIP来实现统一访问入口,实现单点故障时,VIP自动切换至另外一台
主机上达到高可用效果,同时LVS可以提供多种调度算法来实现负载均衡机制。
测试环境:
MySQL主主复制,利用Keepalived控制LVS的高可用,在利用LVS的某种调度算法对2台MySQL实现负载均衡。
操作步骤:
1. MySQL复制(双主)
略
2. 安装LVS和Keepalived(在两台LVS上操作)
[root@server-8 ~]# yum install epel-release -y [root@server-8 ~]# yum install ipvsadm keepalived -y [root@server-8 ~]# echo "" > /etc/keepalived/keepalived.conf [root@server-8 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id LVS1 #另外一台就写LVS2 } vrrp_instance VI_1 { state MASTER #指定instance初始状态,当前是主MASTER,另外一节点填BACKUP interface eth0 #请查看网卡名,CentOS6和7命名不一样 virtual_router_id 51 #VRID,相同VRID为一个组,决定多播MAC地址,重要!主备一致 priority 100 #优先级,另一台改为低一点,比如90 advert_int 1 #检查间隔 authentication { auth_type PASS #认证方式,可以是pass或ha auth_pass 1111 #认证密码 } virtual_ipaddress { 138.138.82.222 #VIP } } virtual_server 138.138.82.222 3306 { delay_loop 6 #服务轮询的时间间隔 lb_algo wlr #加权最小连接调度算法,LVS调度算法 rr|wrr|lc|wlc|lblc|lblcr|sh|dh|sed|nq lb_kind DR #LVS集群模式 NAT|DR|TUN,其中DR模式要求负载均衡器网卡必须有一块与物理网卡在同一个网段 persistence_timeout 50 #会话保持时间 protocol TCP #健康检查协议
#=== Real Server设置,3306就是MySQL连接端口 ===# real_server 138.138.82.10 3306 { weight 3 #权重 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } real_server 138.138.82.11 3306 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }
保存,退出;
另外一台LVS主机的Keepalived配置同上,修改上面的提到的router_id,state,priority值即可,不在赘述;
接下来启动Keepalived
[root@server-8 ~]# service keepalived start [root@server-9 ~]# service keepalived start [root@server-8 ~]# ip a
[root@server-8 ~]# ipvsadm -ln
目前VIP只在MASTER上,如果MASTER节点挂了,VIP自动飘到BACKUP节点上;
3. 配置两台MySQL所需脚本(在两台MySQL上操作)
[root@server-10 ~]# vim lvs.sh
#!/bin/bash VIP=138.138.82.222 case "$1" in start) echo "start LVS of RealServer DR" /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $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 ;; stop) /sbin/ifconfig lo:0 down echo "close LVS of RealServer DR" 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 "Usage: $0 {start|stop}" exit 1 esac exit 0
保存,退出;
启动脚本:
[root@server-10 ~]# sh lvs.sh start [root@server-10 ~]# ip a
另一台MySQL操作如上(脚本内容一致)。
[root@server-11 ~]# ip a
这样,两台mysql会通过各自的loopback接口与这个VIP通信。
直此,客户端就可以通过统一个接口IP(138.138.82.222)来访问数据了。
关于LVS的10种调度算法介绍
官网:http://www.linuxvirtualserver.org/docs/scheduling.html
参考:https://blog.csdn.net/scape1989/article/details/21085659
结束.