http://lansgg.blog.51cto.com/5675165/1180305順便參照這個部落客
<a></a>
<a>1.1 方案簡介</a>
Lvs+keepalived作為目前比較流行的高可用解決方案,lvs提供負載均衡,keepalived作為故障轉移,提高系統的可用性。但是一般的mysql高可用為了實作mysql資料的一緻性,一般都是采用單點寫入,本方案采用keepalived中的sorry_server來實作寫入資料庫為單點的需求。本方案實作的功能是當網絡有問題、mysql有問題、伺服器當機、keepalived服務停止後,伺服器能自動跳轉到備用機,當主伺服器服務啟動起來後會自動切換回來。
<a>1.2 方案架構圖</a>

<a>1.3 方案優缺點</a>
優點:
ü 安裝配置簡單,實作友善,高可用效率好,可以根據服務與系統的可用性多方面進行切換。
ü 可以将寫VIP和讀VIP分别進行設定,為讀寫分離做準備。
ü 擴充不是很友善。
ü 可以在後面添加多個從伺服器,并做到負載均衡。
缺點:
ü 在啟動或者恢複後會立即替換掉定義的sorry_server,是以如果要實作指定條件替換或者不替換需要通過其他方式實作,比如:臨時更改mysql的端口等。
ü 切換需要1s左右的時間。
<a>1.4 方案實戰</a>
<a>1.4.1 适用場景</a>
這個方案适用于隻有兩台資料庫伺服器并且還沒有實作資料庫的讀寫分離的情況,讀和寫都配置VIP。這個方案能夠便于單台資料庫的管理維護以及切換工作。比如進行大表的表結構更改、資料庫的更新等都是非常友善的。
<a>1.4.2 實戰環境介紹</a>
伺服器名
IP
VIP
系統
Mysql
Master
10.1.1.113
10.1.1.176
Centos 5.5 64bit
5.1.63
Backup
10.1.1.75
Mysql的安裝和配置相對來講非常簡單,這裡就不做介紹,有興趣的朋友可以檢視我部落格中關于mysql 5.1.63版本自動安裝的文章http://blog.chinaunix.net/uid-20639775-id-3168737.html
Mysql的主主同步這裡也不做介紹了,有興趣的話可以看一下我博文中關于mysql主從同步管理的介紹,主主同步和主從同步差不多,隻是互為主進而已,連結如下:
http://blog.chinaunix.net/uid-20639775-id-3254611.html
在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
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.1 Master的keepalived的配置
Master和backup不一樣的地方已經标記為紅色
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
notification_email_from [email protected]
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的配置
state BACKUP
priority 150
對于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
啟動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
<a>1.4.10 高可用方案測試</a>
方案搭建好以後就要進行全方位的可靠性測試了,看看是否達到了我們的預期效果,大緻測試步驟如下:
ü 停掉master上的mysql,看看能否自動切換到sorry_server,使用如下指令檢視:ipvsadm –ln。
ü 停掉master上的keepalived,看寫VIP是否會遷移到backup。
ü 啟動master上的mysql,看是否能切換回master。
ü 啟動master上的keepalived,看VIP是否會遷移回master上。
ü 重新開機master的系統,看看切換過程是否OK
出自http://blog.chinaunix.net/uid-20639775-id-3337448.html