標籤:mysql 高可用 keepalive
實驗目的:
通過Keepalive來構建Mysql的高可用。Mysql已做主從,當一台Mysql宕機的時候不影響對Mysql的調用。
實驗環境:
兩台Mysql伺服器(基於LAMP且已做主從),兩台Mysql伺服器都通過Apache發布Discuz論壇(discuz調用的是主mysql地址)。
身份 主機名稱 IP地址
主Mysql master 192.168.1.3
從Myslq slave 192.168.1.4
LAMP平台請參見<<搭建Discuz論壇的兩種方式>>
Mysql主從參見<<構建Mysql三部曲之三 主從案例>>
實驗步驟:
一、在主mysql上安裝配置keepalive
[[email protected] ~]# bash keepalive_install.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/1D/wKiom1VcUVix6gI6AAMDYWrXRzw071.jpg" title="1.png" style="float:none;" alt="wKiom1VcUVix6gI6AAMDYWrXRzw071.jpg" />
“指令碼”內容如下:
[[email protected] ~]# cat keepalive_install.sh#!/bin/bashyum -y install kernel-devel openssl-devel popt-devel &&wgethttp://www.keepalived.org/software/keepalived-1.1.15.tar.gz &&tar -zxf keepalived-1.1.15.tar.gz &&cd keepalived-1.1.15 &&./configure--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ &&make && make install &&DIR=/usr/local/cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ &&cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/&& mkdir -p /etc/keepalived &&cp $DIR/sbin/keepalived/usr/sbin/&&cp/usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ &&/etc/init.d/keepalived restartif [ $? -eq 0 ];then echo -e ‘\e[32mInstall Keepalive Successfully!\e[0m‘else echo -e ‘\e[31mInstall Keepalive Failure!\e[0m‘fi
載入ip_vs的核心模組
[[email protected] ~]# modprobe ip_vs[[email protected]~]# modprobe ip_vs_wrr[[email protected]~]# modprobe ip_vs_rr
修改keepalived.conf設定檔如下:
[[email protected] ~]# vim /etc/keepalived/keepalived.conf[[email protected] ~]# cat/etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL} vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.77 }} virtual_server 192.168.1.77 3306 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.1.3 3306 { weight 1 notify_down/data/sh/ keepalive_stop.sh TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } }}
[[email protected] ~]# mkdir -p /data/sh[[email protected] ~]# vim/data/sh/keepalive_stop.sh[[email protected] ~]# chmod +x /data/sh/keepalive_stop.sh[[email protected] ~]# /etc/init.d/keepalivedreloadReloading keepalived: [ OK ][[email protected] ~]# cat/data/sh/keepalive_stop.sh#!/bin/bash/etc/init.d/keepalived stop[[email protected] ~]#
二、在從mysql上安裝配置keepalive
[[email protected] ~]# bash keepalive_install.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6D/1D/wKiom1VcUViQFeiwAAMAvbyK6dM432.jpg" title="2.png" style="float:none;" alt="wKiom1VcUViQFeiwAAMAvbyK6dM432.jpg" />
“指令碼”內容如下,同master上執行的指令碼一致(非嚴格意義上的指令碼,安裝命令放一起而已)。
[[email protected] ~]# cat keepalive_install.sh#!/bin/bashyum -y install kernel-developenssl-devel popt-devel &&wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz&&tar -zxf keepalived-1.1.15.tar.gz &&cd keepalived-1.1.15 &&./configure--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ &&make && make install &&DIR=/usr/local/cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ &&cp $DIR/etc/sysconfig/keepalived/etc/sysconfig/ && mkdir -p /etc/keepalived &&cp $DIR/sbin/keepalived/usr/sbin/&&cp/usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ &&/etc/init.d/keepalived restartif [ $? -eq 0 ];then echo -e ‘\e[32mInstall Keepalive Successfully!\e[0m‘else echo -e ‘\e[31mInstall Keepalive Failure!\e[0m‘fi[[email protected] ~]#
載入ip_vs的核心模組
[[email protected] ~]# modprobe ip_vs[[email protected] ~]# modprobe ip_vs_wrr[[email protected] ~]# modprobe ip_vs_rr
修改keepalived.conf設定檔如下
[[email protected] ~]# vim/etc/keepalived/keepalived.conf[[email protected] ~]# cat/etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL} vrrp_instance VI_1 { state BACKUP !此處同master不一樣 interface eth0 virtual_router_id 51 priority 90 !優先順序比master上低 advert_int 1 authentication{ auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.77 }} virtual_server 192.168.1.77 3306 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.1.4 3306 { !Slave上的IP weight 1 notify_down/data/sh/keepalive_stop.sh TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } }}
[[email protected] ~]#[email protected] ~]# mkdir -p /data/sh[[email protected] ~]# vim/data/sh/keepalive_stop.sh[[email protected] ~]# chmod +x/data/sh/keepalive_stop.sh[[email protected] ~]# /etc/init.d/keepalivedreloadReloading keepalived: [ OK ][[email protected] ~]# cat/data/sh/keepalive_stop.sh#!/bin/bash/etc/init.d/keepalived stop[[email protected] ~]#
三、修改Discuz論壇資料庫連接IP為VIP
直接存取master上的192.168.1.3論壇是可以訪問的,且直接存取slave上的192.168.1.4論壇也是可以訪問的,現在我們直接存取VIP(虛擬IP) 192.168.1.77依舊可以訪問論壇。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/17/wKioL1VcUtPSWZQ7AAM64OwyBqg115.jpg" title="3.png" style="float:none;" alt="wKioL1VcUtPSWZQ7AAM64OwyBqg115.jpg" />
這個時候因為discuz調用的是master上的資料庫IP,所以我們應該讓其調用VIP 192.168.1.77,這樣才能保證在主掛的時候自動切換到從上。
在master上
[[email protected] ~]#sed -i ‘s/192.168.1.3/192.168.1.77/‘/usr/local/apache/htdocs/config/config_global.php[[email protected] ~]#/usr/local/apache/bin/apachectl restart
在slave上
[[email protected] ~]#sed -i ‘s/192.168.1.3/192.168.1.77/‘/usr/local/apache/htdocs/config/config_global.php[[email protected] ~]#/usr/local/apache/bin/apachectl restart
四、測試
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/1D/wKiom1VcUVmSIFOeAAE085AoVaU398.jpg" title="4.png" style="float:none;" alt="wKiom1VcUVmSIFOeAAE085AoVaU398.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/17/wKioL1VcUtPDmo-JAADg29wc5rc322.jpg" title="5.png" style="float:none;" alt="wKioL1VcUtPDmo-JAADg29wc5rc322.jpg" />
上邊兩個圖很明顯可以看出此時VIP在master上。
手動類比master上的mysql關閉
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/1D/wKiom1VcUVqjIT_uAAMB8Um51w4975.jpg" title="6.png" style="float:none;" alt="wKiom1VcUVqjIT_uAAMB8Um51w4975.jpg" />
VIP自動漂到slave上
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6D/17/wKioL1VcUtSyGjSvAAEx6to-bjA380.jpg" title="7.png" style="float:none;" alt="wKioL1VcUtSyGjSvAAEx6to-bjA380.jpg" />
論壇依舊可以訪問
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6D/1D/wKiom1VcUVvAkEFKAAI_A0bWLEc647.jpg" style="float:none;" title="8.png" alt="wKiom1VcUVvAkEFKAAI_A0bWLEc647.jpg" />
本文出自 “一步步踏入Linux世界” 部落格,請務必保留此出處http://linuxnote.blog.51cto.com/9876511/1653242
構建高可用伺服器之三 Keepalive均衡Mysql