eql高可用部署方案

運行環境node

服務器兩臺(後面的全部配置案例都是以10.96.0.64和10.96.0.66爲例)mysql

操做系統CentOS release 6.2linux

必需要有共同的局域網網段sql

兩臺服務器都要安裝keepalived(雙機熱備)和eql服務apache

軟件部署bash

 

keepalived 部分服務器

 keepalived是一個用於作雙機熱備(HA)的軟件,常和haproxy聯合起來作熱備+負載均衡,達到高可用。負載均衡

keepalived經過選舉(看服務器設置的權重)挑選出一臺熱備服務器作MASTER機器,MASTER機器會被分配到一個指定的虛擬ip,外部程序可經過該ip訪問這臺服務器,若是這臺服務器出現故障(斷網,重啓,或者本機器上的keepalived crash等),keepalived會從其餘的備份機器上重選(仍是看服務器設置的權重)一臺機器作MASTER並分配一樣的虛擬IP,充當前一臺MASTER的角色。socket

服務器兩臺,兩臺機器要通局域網,虛擬IP會被設置在他們共有的局域網內oop

10.96.0.64   CentOS release 6.2

10.96.0.66   CentOS release 6.2

 

安裝popt庫

sudo yum install popt-devel.x86_64

下載軟件包

wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz

解壓安裝

tar -zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/usr/local/keepalived 
make
make install

下面這幾步不是必須的,可是爲了方便之後的操做建議作了

sudo cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
sudo cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
sudo cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

爲keepalived建立配置文件存放路徑

sudo mkdir -p /etc/keepalived/

打開配置文件

sudo emacs  /etc/keepalived/keepalived.conf

下面是服務器上的配置文件,兩臺服務器的配置選項徹底同樣,可是配置的值按在本機的具體狀況,配置項在下面會解釋

global_defs
{
    notification_email
    {
        baifanmvp@163.com
    }
    notification_email_from baifanmvp@163.com
    smtp_server 127.0.0.1
    stmp_connect_timeout 30
    router_id lnmp_node1
}

vrrp_instance lnmp {
    state MASTER
    interface eth0
    virtual_router_id 51
    mcast_src_ip 10.96.0.64

    priority 200
    advert_int 1
    track_interface {
         eth0
    }

    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.96.0.103/16 dev eth0 scope global 
    }
}
  • global_defs: 全局配置標識,表面下面的區域{}是全局配置
  • notification_email: 裏面填郵箱地址,若是keepalived在發生諸如切換操做時會的發郵件到配置上的郵箱,郵件地址能夠多個,每行一個。
  • notification_email_from:表示發送通知郵件時郵件源地址是誰
  • smtp_server:表示發送email時使用的smtp服務器地址,能夠填127.0.0.1
  • smtp_connect_timeout:鏈接smtp超時時間
  • vrrp_instance:各服務器上實例配置域,這裏按本服務器的具體狀況填值
  • state:本實例啓動狀態,MASTER/SLAVE,無論填MASTER/SLAVE,最終仍是要看本機器的權重。
  • interface:實例綁定的網卡,由於在配置虛擬IP的時候必須是在已有的網卡上添加的,這裏按本機狀況而定
  • virtual_router_id:這裏設置VRID,若是兩臺機器是同一個備份組,設置同樣
  • priority:設置本節點的優先級,哪一個服務器的優先級高的爲master,不能超過255
  • advert_int:組播信息發送間隔,同一個備份組兩個機器設置必須同樣,默認是1S
  • authentication:驗證域,同組的機器auth_type(驗證類型)和auth_pass(驗證密碼)必須同樣
  • virtual_ipaddress:VIP,爲master機器設置的虛擬地址,和實例綁定的網卡(interface)設置到一個網段

配置好了就能夠直接啓動了

sudo /etc/init.d/keepalived restart

啓動好之後能夠用 ip a 命令看虛擬IP的綁定狀況,個人配置是192.168.1.135上的權重高,因此VIP綁定到135上面

(ape0!1120)~/eql_core(10.96.0.64)ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:7e:a9:d5 brd ff:ff:ff:ff:ff:ff
    inet 10.96.0.64/16 brd 10.96.255.255 scope global eth0
    inet 10.96.0.103/16 scope global secondary eth0
    inet6 fe80::216:3eff:fe7e:a9d5/64 scope link 
       valid_lft forever preferred_lft forever
(ape0!1121)~/eql_core(10.96.0.64)

這時候就能夠用10.96.0.103這個IP訪問10.96.0.64這臺機器了

出現的問題記錄:

1. 在配好主從備份以後,發現虛擬IP能ping通,可是訪問虛擬IP對應機器上的服務(不是apache或者mysql之類的公用軟件)卻不成功,這是由於要訪問的服務綁定了主機上的一個實體IP不是INADDR_ANY地址,因此鏈接不上。

 

2.記得設置防火牆和關閉selinux策略

關閉selinux

vi /etc/sysconfig/selinux
修改:
SELINUX=disabled
#setenforce 0

 

3.注意配置文件裏的advert_int選項,這個是兩臺機器相互檢測的時間間隔,若是想在一臺機器宕機以後VIP能很快的跳轉到另一臺機器,請把這個值設置小一點。

 

4.有時候可能會出現設置都正確,可是虛擬ip依舊訪問不了的狀況,這時候請讓機房人員爲這個ip設置路由。

===============================================================================

eql部分

eql的下載和安裝請看eql和egg的安裝文檔,這裏就不重複了,eql高可用部署方案必須下載目前的trunk版本。

在eql和egg安裝成功後,請進入eql的根目錄下的rep目錄 裏面有三個文件

 

 eql_master.sh

eql_slave.sh

eqld_alive.sh

 ===================================================================

eql_master.sh用於啓動master機器上的全部服務

下面例子和相關注釋

有的選項值要根據實際狀況來設置,請看各選項的解釋

#!/bin/bash                                                                                                                                          

#啓動master機器上的eqld和eqlRepd服務                                                                                                                 
if [ "$1" = "start" ]
then
# --socket=/tmp/eql.socket 是本地socket文件路徑,這個能夠不用作改動 # --binlogdir=/ape/eql/eqllog/ 是eql的log日誌路徑,這個能夠不用作改動,可是路徑必須存在 # --ip=0.0.0.0 服務是綁定機器全部的IP,這個也不用改動 # --port=30001 服務綁定的端口號,這個按照實際狀況設置 nohup eqld --socket=/tmp/eql.socket --binlogdir=/ape/eql/eqllog/ --ip=0.0.0.0 --port=30001 & # --repnet 10.96.0.64:20000 eqlRepd服務綁定的ip和端口號,這個按照實際狀況設置 # --binlog /ape/eql/eqllog/ 是eql的log日誌路徑,這個能夠不用作改動,可是路徑必須存在 # --members 10.96.0.66:20000 另外那臺機器eqlRepd服務的ip和端口,也就是說若是本機是master這裏填slave的,若是本機是slave這裏填master的 # --eqldnet 10.96.0.64:30001 本機鏈接的eqld的ip和端口號 nohup eqlRepd --repnet 10.96.0.64:20000 --binlog /ape/eql/eqllog/ --members 10.96.0.66:20000 --eqldnet 10.96.0.64:30001 & #中止master機器上的eqld和eqlRepd服務 elif [ "$1" = "stop" ] then pkill eqld pkill eqlRepd #重啓master機器上的eqld和eqlRepd服務 elif [ "$1" = "restart" ] then pkill eqld pkill eqlRepd nohup eqld --socket=/tmp/eql.socket --binlogdir=/ape/eql/eqllog/ --ip=0.0.0.0 --port=30001 & nohup eqlRepd --repnet 10.96.0.64:20000 --binlog /ape/eql/eqllog/ --members 10.96.0.66:20000 --eqldnet 10.96.0.64:30001 & fi

 

 ===================================================================

eql_slave.sh用於啓動slave機器上的全部服務

slave機器上的eqld分爲2個,一個是給外部訪問的,這個的端口要和master上的eqld保持同樣,而且僅可讀不可修改和添加操做。另一個是用來接受master傳過來的同步日誌操做,這個是可讀可寫模式。至於eqlRep和master介紹的同樣

 

下面例子和相關注釋

有的選項值要根據實際狀況來設置,請看各選項的解釋

#!/bin/bash
if [ "$1" = "start" ]
then

# --readonly 啓動只讀模式
# --socket=/tmp/eql_r.socket 是本地socket文件路徑,這個能夠不用作改動
# --binlogdir=/ape/eql/eqllog/ 是eql的log日誌路徑,這個能夠不用作改動,可是路徑必須存在
# --ip=0.0.0.0 服務是綁定機器全部的IP,這個也不用改動
# --port=30002 服務綁定的端口號,這個按照實際狀況設置
nohup eqld --readonly --socket=/tmp/eql_r.socket --binlogdir=/ape/eql/eqllog/ --ip=0.0.0.0 --port=30001 &

# --socket=/tmp/eql.socket 是本地socket文件路徑,這個能夠不用作改動
# --binlogdir=/ape/eql/eqllog/ 是eql的log日誌路徑,這個能夠不用作改動,可是路徑必須存在
# --ip=0.0.0.0 服務是綁定機器全部的IP,這個也不用改動
# --port=30002 服務綁定的端口號,這個按照實際狀況設置
nohup eqld  --socket=/tmp/eql.socket --binlogdir=/ape/eql/eqllog/ --ip=0.0.0.0 --port=30002 &


# --repnet 10.96.0.66:20000 eqlRepd服務綁定的ip和端口號,這個按照實際狀況設置
# --binlog /ape/eql/eqllog/ 是eql的log日誌路徑,這個能夠不用作改動,可是路徑必須存在
# --members 10.96.0.64:20000 另外那臺機器eqlRepd服務的ip和端口,也就是說若是本機是master這裏填slave的,若是本機是slave這裏填master的
# --eqldnet 10.96.0.66:30002 本機鏈接的eqld的ip和端口號,slave機器上填擁有可寫可讀權限的那個eqld
nohup eqlRepd --repnet 10.96.0.66:20000 --binlog /ape/eql/eqllog/ --members 10.96.0.64:20000 --eqldnet 10.96.0.66:30002 &
elif [ "$1" = "stop" ]
then
pkill eqld
pkill eqlRepd
elif [ "$1" = "restart" ]
then
pkill eqld
pkill eqlRepd
nohup eqld --readonly --socket=/tmp/eql.socket --binlogdir=/ape/eql/eqllog/ --ip=0.0.0.0 --port=30001 &
nohup eqld  --socket=/tmp/eql.socket --binlogdir=/ape/eql/eqllog/ --ip=0.0.0.0 --port=30002 &
nohup eqlRepd --repnet 10.96.0.66:20000 --binlog /ape/eql/eqllog/ --members 10.96.0.64:20000 --eqldnet 10.96.0.66:30002 &
fi

 ===================================================================

eqld_alive.sh用來監控服務器上的eqld是否存活,若是不存在了就關閉keepalived讓虛擬IP切換

下面是例子內容

while true
do
process_cnt=`ps -ef|grep "eqld --socket=/tmp/eql.socket --binlogdir=/ape/eql/eqllog/ --ip=0.0.0.0 --port=30001"|wc -l`
if [ 2 != "$process_cnt" ];then
/etc/init.d/keepalived stop

fi
sleep 5
done

 ===================================================================

 啓動步驟

1.在兩臺機器上分別啓動eqld_alive.sh腳本

2.在master機器上啓動eql_master.sh腳本,在slave機器啓動eql_master.sh腳本

3 分別啓動兩臺機器的keepalived

相關文章
相關標籤/搜索