Keepalived構建雙主MySQL

MySQL主主:http://blog.csdn.net/chengshiep/article/details/50943221

兩臺服務器
MySQL-master1(主):192.168.2.202
MySQL-master2(備):192.168.2.222
MySQL-VIP(虛擬ip):192.168.2.201

MySQL-master1(主)

#修改防火牆設置
vi /etc/sysconfig/iptables
#加上
iptables -A INPUT -p vrrp -j ACCEPT
service iptables restart

#安裝keepalived
cd /usr/local/src
tar zxvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/usr/local/keepalived --with-kernel-dir
make && make install

#複製keepalived腳本
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

#設置keepalived開機啓動腳本
chkconfig keepalived on

#修改配置腳本
vi /etc/keepalived/keepalived.conf
#內容如下
global_defs {
   #notification_email {
   # [email protected] 
   #}
   #notification_email_from [email protected]
   #smtp_server smtp.qq.com
   #smtp_connect_timeout 30
   router_id MySQL-ha
}

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.2.201
    }
}

virtual_server 192.168.2.201 3306 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.2.202 3306 {
        weight 3
        notify_down /etc/rc.d/keepalived.sh
    TCP_CHECK {
           # 連接超時時間
           connect_timeout 10
           # 重連次數
           nb_get_retry 3
           # 重連間隔時間
           delay_before_retry 3
           # 健康檢查端口
           connect_port 3306
        }
    }
}

#編寫檢測服務down後所要執行的腳本
vi /etc/rc.d/keepalived.sh
#內容如下
----------
#!/bin/sh
/etc/init.d/keepalived stop
----------

#或者內容如下
----------
#!/bin/bash

# 環境變量
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH

# 暫停5秒執行,防止數據庫人工正常重啓
sleep 5

# mysql_id(存活=1 死掉=0)
mysql_id=`ps -C mysqld --noheader |wc -l`

# 判斷mysql_id若死掉,則重啓mysql一次,若仍然無法啓動mysql則殺掉keepaliaved進程實現VIP切換
if [ $mysql_id -eq 0 ];then
/etc/init.d/mysqld restart
sleep 5
if [ $mysql_id -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
----------

#啓動keepalived
/etc/init.d/keepalived start

#查看連接狀態
ps -aux | grep keepalived

#查看VIP信息
ip addr

#查看vrrp通信
tcpdump vrrp

#查看keepalived進程
ps -aux | grep keepalived

MySQL-master2(備)

#修改防火牆設置
vi /etc/sysconfig/iptables
#加上
iptables -A INPUT -p vrrp -j ACCEPT
service iptables restart

#安裝keepalived
cd /usr/local/src
tar zxvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/usr/local/keepalived --with-kernel-dir
make && make install

#複製keepalived腳本
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

#設置keepalived開機啓動腳本
chkconfig keepalived on

#修改配置腳本
vi /etc/keepalived/keepalived.conf
#內容如下


----------


global_defs {
   #notification_email {
   #  [email protected]
   #}
   #notification_email_from [email protected]
   #smtp_server smtp.qq.com
   #smtp_connect_timeout 30
   router_id MySQL-ha
}

vrrp_instance VI_1 {
    state BACKUP
    interface em1 
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.201
    }
}

virtual_server 192.168.2.201 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.2.222 3306 {
        weight 1
        notify_down /etc/rc.d/keepalived.sh
        TCP_CHECK {
           connect_timeout 10
           nb_get_retry 3
           delay_before_retry 3
           connect_port 3306
        }
    }
}


----------


#編寫檢測服務down後所要執行的腳本
vi /etc/rc.d/keepalived.sh
#內容如下
----------
#!/bin/sh
/etc/init.d/keepalived stop
----------

#或者內容如下
----------
#!/bin/bash

# 環境變量
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH

# 暫停5秒執行,防止數據庫人工正常重啓
sleep 5

# mysql_id(存活=1 死掉=0)
mysql_id=`ps -C mysqld --noheader |wc -l`

# 判斷mysql_id若死掉,則重啓mysql一次,若仍然無法啓動mysql則殺掉keepaliaved進程實現VIP切換
if [ $mysql_id -eq 0 ];then
/etc/init.d/mysqld restart
sleep 5
if [ $mysql_id -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
----------

#啓動keepalived
/etc/init.d/keepalived start

#查看連接狀態
ps -aux | grep keepalived

#查看VIP信息
ip addr

#查看vrrp通信
tcpdump vrrp

#查看keepalived進程
ps -aux | grep keepalived

其他命令

#設置開機啓動
chkconfig mysqld on
chkconfig keepalived on

#查看連接狀態
ps -aux | grep keepalived

#查看VIP信息
ip addr

#查看vrrp通信
tcpdump vrrp

#查看keepalived進程
ps -aux | grep keepalived

#注意兩個數據庫的用戶名需要有一套相同的,用於vip鏈接

#主Keepalived故障重啓,不希望搶佔備keepalived,可以配置nopreempt屬性
設置爲不搶佔 
注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高
advert_int 1
nopreempt
發佈了70 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章