1.1 方案简介 Lvs+keepalived作为目前比较流行的高可用解决方案,lvs提供负载均衡,keepalived作为故障转移,提高系统的可用性。但是一般的mysql高可用为了实现mysql数据的一致性,一般都是采用单点写入,本方案采用keepalived中的sorry_server来实现写入数据库为单点的需求。本方案实现的功能是当网络有问题、mysql有问题、服务器宕机、keepalived服务停止后,服务器能自动跳转到备用机,当主服务器服务启动起来后会自动切换回来。 1.2 方案架构图 1.3 方案优缺点 优点: ü 安装配置简单,实现方便,高可用效率好,可以根据服务与系统的可用性多方面进行切换。 ü 可以将写VIP和读VIP分别进行设置,为读写分离做准备。 ü 扩展不是很方便。 ü 可以在后面添加多个从服务器,并做到负载均衡。 缺点: ü 在启动或者恢复后会立即替换掉定义的sorry_server,因此如果要实现指定条件替换或者不替换需要通过其他方式实现,比如:临时更改mysql的端口等。 ü 切换需要1s左右的时间。 1.4 方案实战 1.4.1 适用场景 这个方案适用于只有两台数据库服务器并且还没有实现数据库的读写分离的情况,读和写都配置VIP。这个方案能够便于单台数据库的管理维护以及切换工作。比如进行大表的表结构更改、数据库的升级等都是非常方便的。 1.4.2 实战环境介绍
1.4.3 Mysql的安装和配置 Mysql的安装和配置相对来讲非常简单 1.4.4 Mysql的主主同步配置 Mysql的主主同步这里也不做介绍了 1.4.5 Lvs的安装 在master、backup服务器都进行安装: ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux tar zxvf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 make && make install
1.4.6 Keepalived的安装 在master、backup服务器都进行安装: wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
tar zxvf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure --prefix=/usr/local/keepalived
make
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
1.4.7 Keepalived的配置 1.4.7.1 Master的keepalived的配置 Master和backup不一样的地方已经标记为红色 vim /etc/keepalived/keepalived.conf global_defs {
notification_email { } smtp_server mail.test.com smtp_connect_timeout 30 router_id LVS1 }
vrrp_sync_group test { group { loadbalance } }
vrrp_instance loadbalance { state MASTER interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 180 advert_int 1
authentication { auth_type PASS auth_pass 1111 }
virtual_ipaddress { 10.1.1.176 dev eth0 label eth0:1 } }
virtual_server 10.1.1.176 3306 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 20 protocol TCP sorry_server 10.1.1.75 3306 real_server 10.1.1.113 3306 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }
1.4.7.2 Backup的keepalived的配置 Master和backup不一样的地方已经标记为红色 vim /etc/keepalived/keepalived.conf global_defs {
notification_email { } smtp_server mail.test.com smtp_connect_timeout 30 router_id LVS1 }
vrrp_sync_group test { group { loadbalance } }
vrrp_instance loadbalance { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 150 advert_int 1
authentication { auth_type PASS auth_pass 1111 }
virtual_ipaddress { 10.1.1.176 dev eth0 label eth0:1 } }
virtual_server 10.1.1.176 3306 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 20 protocol TCP sorry_server 10.1.1.75 3306 real_server 10.1.1.113 3306 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }
1.4.8 Master和backup的realserver的配置 对于realserver的配置master和backup是一致的,脚本内容如下: vim /etc/rc.d/init.d/realserver.sh #!/bin/bash # description: Config realserver lo and apply noarp
SNS_VIP=10.1.1.176 /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
1.4.9 Master和backup的启动 启动master和backup的mysql以后,再在master和backup执行如下命令启动keepalived和realserver脚本: /etc/rc.d/init.d/realserver.sh start /etc/rc.d/init.d/keepalived start
并将keepalived和realserver的启动脚本加入到rc.local自启动中: echo “/etc/rc.d/init.d/realserver.sh start” >> /etc/rc.local echo “/etc/rc.d/init.d/keepalived start” >> /etc/rc.local
1.4.10 高可用方案测试 方案搭建好以后就要进行全方位的可靠性测试了,看看是否达到了我们的预期效果,大致测试步骤如下: ü 停掉master上的mysql,看看能否自动切换到sorry_server,使用如下命令查看:ipvsadm –ln。 ü 停掉master上的keepalived,看写VIP是否会迁移到backup。 ü 启动master上的mysql,看是否能切换回master。 ü 启动master上的keepalived,看VIP是否会迁移回master上。 ü 重启master的系统,看看切换过程是否OK |