Linux&&LVS+Keepalived高可用羣集

瞭解

用途:
判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換爲新的服務器,當故障主機恢復後將其重新加入羣集。
官方網站:
http://www.keepalived.org/
實現功能:

  • 雙主熱備
  • DNS負載均衡
  • keepalived跟蹤服務(web)
  • inotify+rsync數據同步

keepalived的熱備方式

keepalived採用VRRP(Virtual Router Redundancy Protocol,虛擬路由冗餘協議)熱備份協議,以軟件的方式實現Linux服務器的多機熱備功能。
VRRP是針對路由器的一種備份解決方案-----由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務;每個熱備組內同一時刻只有一臺主路由器提供服務,其他路由器處於冗餘狀態,若當前在線的路由器失效,則其他路由器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。
在這裏插入圖片描述
熱備組內的每臺路由器都可能成爲主路由器,虛擬路由器的IP地址(VIP)可以在熱備組內的路由器之間進行移動,所以也成爲漂移IP地址。
使用keepalived時,漂移地址的實現不需要手動建立虛接口配置文件(如eth0:0),而是由keepalived根據配置文件自動管理。

部署

預安裝內核開發支持庫:

yum  -y  install  kernel-devel  openssl-devel  popt-devel
yum  -y  ipvsadm
#編譯安裝keepalived
tar  zxf  keepalived-1.2.13.tar.gz
cd  keepalived-1.2.13
./configure  --prefix=/  --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64
make  &&  make  install
#使用keepalived服務。執行make  install操作以後,會自動生成/etc/init.d/keepalived腳本文件,但換需要手動添加爲系統服務,這樣就可以使用service、chkconfig工具來對keepalived服務程序進行管理了。
ls  -l  /etc/init.d/keepalived
chkconfig  --add  keepalived
chkconfig  keepalived  on

使用keepalived實現雙機熱備

基於VRRP協議的熱備方式,keepalived可用作服務器的故障切換,每個熱備組可以有多臺服務器。
在雙機熱備方案中,故障切換主要針對虛擬IP地址的漂移來實現,so能夠適用於各種應用服務器(web、ftp、mail、ssh、dns)
以下基於web服務進行部署、測試
在這裏插入圖片描述

主服務器配置

#編寫httpd服務監控腳本
vim  /opt/chk_httpd.sh
    service  httpd  status  &>  /dev/null
    if [ $? -ne 0 ];then
        service  httpd  restart  &>  /dev/null
        service  httpd  status  &>  /dev/null
        if [ $? -ne 0 ];then
            killall  keepalived
        fi
    fi
chmod  +x  /opt/chk_httpd.sh
#進入keepalived服務的配置目錄
cd  /etc/keepalived/
#備份並編輯主配置文件
cp  keepalived.conf  keepalived.conf.bak
vim  keepalived.conf
    #指定全局參數
    global_defs {
        route_id  HA_TEST_R1  //本路由器(服務器)的名稱
    }
    #定義httpd服務監控腳本並設置別名爲chk_http_port
    vrrp_script chk_http_port {
        script  "/opt/chk_httpd.sh"  //檢測nginx狀態的腳本路徑
        interval  2
    }
    #指定VRRP熱備參數
    vrrp_instance dfq {  //定義VRRP熱備實例
        state  MASTER  //熱備狀態,MASTER表示主服務器
        interface  eth0  //承載VIP地址的物理網卡接口
        virtual_route_id  1  //虛擬路由器的ID號,每個熱備組保持一致
        priority  100  //優先級,數值越大優先級越高
        advert_int  1  //通告間隔秒數(心跳頻率)
        authentication {  //認證信息,每個熱備組保持一致
            auth_type  PASS  //認證類型
            auth_pass  123456  //密碼字串
        }
        #調用監控別名
        track_script {
            chk_http_port
        }
        virtual_ipaddress {  //指定漂移地址(VIP),可以有多個
            172.16.16.172
        }
    }
    #指定VRRP熱備組2
    vrrp_instance dfq2 {  //定義VRRP熱備實例2
        state  BACKUP  //熱備狀態,MASTER表示主服務器
        interface  eth0  //承載VIP地址的物理網卡接口
        virtual_route_id  2  //虛擬路由器的ID號,每個熱備組保持一致
        priority  90  //優先級,數值越大優先級越高
        advert_int  1  //通告間隔秒數(心跳頻率)
        authentication {  //認證信息,每個熱備組保持一致
            auth_type  PASS  //認證類型
            auth_pass  123456  //密碼字串
        }
        #調用監控別名
        track_script {
            chk_http_port
        }
        virtual_ipaddress {  //指定漂移地址(VIP),可以有多個
            172.16.16.173
        }
    }
#啓動keepalived服務。實際狀態爲MASTER的主服務器將爲eth0接口自動添加VIP地址,通過ip命令可以查看(ifconfig命令看不到)
service  keepalived  start
ip  addr  show  dev  eth0

#實現ssh免交互登錄
ssh-keygen  -t  rsa
ssh-copy-id  [email protected]
#安裝inotify
tar  zxf  inotify-tools-3.14.tar.gz  -C  /usr/src
cd  /usr/src/inotify-tools-3.14/
./configure  &&  make  &&  make  install
vim  /opt/rsync.sh
    inotify_cmd="inotifywait  -mrq  -e  create,delete,move,modify,attrb  /var/www/html"
    rsync_cmd="rsync  -za  --delete  /var/www/html/  [email protected]:/var/www/html/"
    #inotify_cmd | while  read  a b c
    do
        if [ $(pgrep ^rsync$| wc -l)  -le  0 ];then
            $rsync_cmd
    done
chown  a+x  /opt/rsync.sh
/opt/rsync.sh &

priority 高的就是主服務器,即便state爲MASTER

備用服務器配置

  • router_id : 路由器名稱,建議爲相同熱備組的不同服務器配置不同路由器(服務器)的名稱
  • state : 熱備狀態,至少存在一臺狀態爲MASTER的主服務器,存在多臺狀態爲BACKUP的備用服務器。
  • priorit : 優先級,數值越大則取得VIP控制權的優先級越高,因此主服務器的優先級應設爲最高;其他備用服務器的優先級可以依次遞減,但不要相同,避免在爭奪VIP控制權時發生衝突。
#預安裝內核開發支持庫:
yum  -y  install  kernel-devel  openssl-devel  popt-devel
yum  -y  ipvsadm
#編譯安裝keepalived
tar  zxf  keepalived-1.2.13.tar.gz
cd  keepalived-1.2.13
./configure  --prefix=/  --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64
make  &&  make  install
#使用keepalived服務。執行make  install操作以後,會自動生成/etc/init.d/keepalived腳本文件,但換需要手動添加爲系統服務,這樣就可以使用service、chkconfig工具來對keepalived服務程序進行管理了。
ls  -l  /etc/init.d/keepalived
chkconfig  --add  keepalived
chkconfig  keepalived  on
service  ipstables  stop

#編寫httpd服務監控腳本
vim  /opt/chk_httpd.sh
    service  httpd  status  &>  /dev/null
    if [ $? -ne 0 ];then
        service  httpd  restart  &>  /dev/null
        service  httpd  status  &>  /dev/null
        if [ $? -ne 0 ];then
            killall  keepalived
        fi
    fi
chmod  +x  /opt/chk_httpd.sh

cd  /etc/keepalived
#備份並編輯主配置文件
cp  keepalived.conf  keepalived.conf.bak
vim  keepalived.conf
    #指定全局參數
    global_defs {
        route_id  HA_TEST_R2  //本路由器(服務器)的名稱
    }
    #定義httpd服務監控腳本並設置別名爲chk_http_port
    vrrp_script chk_http_port {
        script  "/opt/chk_httpd.sh"  //檢測nginx狀態的腳本路徑
        interval  2
    }
    #指定VRRP熱備參數
    vrrp_instance dfq {  //定義VRRP熱備實例
        state  BACKUP  //熱備狀態,MASTER表示主服務器
        interface  eth0  //承載VIP地址的物理網卡接口
        virtual_route_id  1  //虛擬路由器的ID號,每個熱備組保持一致
        priority  99  //優先級,數值越大優先級越高
        advert_int  1  //通告間隔秒數(心跳頻率)
        authentication {  //認證信息,每個熱備組保持一致
            auth_type  PASS  //認證類型
            auth_pass  123456  //密碼字串
        }
        #調用監控別名
        track_script {
            chk_http_port
        }
        virtual_ipaddress {  //指定漂移地址(VIP),可以有多個
            172.16.16.172
        }
    }
    #指定VRRP熱備組2
    vrrp_instance dfq {  //定義VRRP熱備實例2
        state  MASTER  //熱備狀態,MASTER表示主服務器
        interface  eth0  //承載VIP地址的物理網卡接口
        virtual_route_id  2  //虛擬路由器的ID號,每個熱備組保持一致
        priority  100  //優先級,數值越大優先級越高
        advert_int  1  //通告間隔秒數(心跳頻率)
        authentication {  //認證信息,每個熱備組保持一致
            auth_type  PASS  //認證類型
            auth_pass  123456  //密碼字串
        }
        #調用監控別名
        track_script {
            chk_http_port
        }
        virtual_ipaddress {  //指定漂移地址(VIP),可以有多個
            172.16.16.173
        }
    }
#啓動keepalived服務。實際狀態爲MASTER的主服務器將爲eth0接口自動添加VIP地址,通過ip命令可以查看(ifconfig命令看不到)
service  keepalived  start
ip  addr  show  dev  eth0

DNS負載均衡配置

yum  clean  all
yum  -y  install  bind  bind-chroot
vim  /etc/named.rfc1912.zones
   zone  "test.com"  in  {
       type  master;
       file  "test.com";
   } 
cd  /var/named
cp  -p  named.localhost  test.com
vim  test.com
    $TTL 1D
    @  IN  SOA  @  rname.invalid. (
                                       0
                                       1D
                                       1H
                                       1W
                                       3H    )
         IN  NS  dns
    dns  in  a   172.16.16.170
    www  in  a   172.16.16.172
    www  in  a   172.16.16.173
service  named  restart

測試雙機熱備功能

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

LVS+Keepalived高可用羣集

優勢:
對LVS負載調度器實現熱備切換,提高可用性;對服務器池中的節點進行健康檢查,自動移除失效節點,恢復後再重新加入。

在這裏插入圖片描述

配置主調度器

全局配置、熱備配置:
爲主、從調度器實現熱備功能,漂移地址使用LVS羣集的VIP地址

#加載ip_vs模塊
modprobe  ip_vs
#重複上個環境的安裝
--snip--
vim  /etc/sysctl.conf
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.eth0.send_redirects = 0
sysctl  -p
vim  /etc/keepalived/keepalived.conf
    global_defs {
        router_id  LVS_HA_R1  //主調度器名稱
    }
    vrrp_instance  VI_1 {
        state  MASTER  //主調度器的熱備狀態
        interface  eth0
        virtual_router_id  1  
        priority  100  //主調度器的優先級
        advert_int  1
        authentication {  //主、從熱備認證信息
            auth_type  PASS  //認證類型
            auth_pass  123456  //密碼字串
        }
        virtual_ipaddress {  //指定漂移地址(VIP),可以有多個
            172.16.16.172
        }
    }

web服務器池配置:

vim  /etc/keepalived/keepalived.conf
    --snip--
    virtual_server  172.16.16.172  80  {  //虛擬服務器地址(VIP)、端口
        delay_loop  15  //健康檢查的間隔時間(秒)
        lb_algo  rr  //輪詢(rr)調度算法
        lb_kind  DR  //直接路由(DR)羣集工作模式
        !persistence  60  //連接保持時間(秒),若啓用請去掉!號
        protocol  TCP  //應用服務採用的是TCP協議
        real_server  172.16.16.177  80 {  //第一個web節點的地址、端口
            weight  1  //節點的權重
            TCP_CHECK {  //健康檢查方式
                connect_port  80  //檢查的目標端口
                connect_timeout  3  //連接超時(秒)
                nb_get_retry  3  //重試次數
                delay_before_retry  4  //重試間隔(秒)
            }
        }
        real_server  172.16.16.178  80 {  //第二個web節點的地址、端口
            weight  1  //節點的權重
            TCP_CHECK {  //健康檢查方式
                connect_port  80  //檢查的目標端口
                connect_timeout  3  //連接超時(秒)
                nb_get_retry  3  //重試次數
                delay_before_retry  4  //重試間隔(秒)
            }
        }
        real_server  172.16.16.179  80 {  //第三個web節點的地址、端口
            weight  1  //節點的權重
            TCP_CHECK {  //健康檢查方式
                connect_port  80  //檢查的目標端口
                connect_timeout  3  //連接超時(秒)
                nb_get_retry  3  //重試次數
                delay_before_retry  4  //重試間隔(秒)
            }
        }
    }
#重啓keepalived服務
service  keepalived  restart

配置從調度器

全局配置、熱備配置:
爲主、從調度器實現熱備功能,漂移地址使用LVS羣集的VIP地址

#加載ip_vs模塊
modprobe  ip_vs
#重複上個環境的安裝
--snip--
vim  /etc/sysctl.conf
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.eth0.send_redirects = 0
sysctl  -p
vim  /etc/keepalived/keepalived.conf
    global_defs {
        router_id  LVS_HA_R2  //從調度器名稱
    }
    vrrp_instance  VI_1 {
        state  BACKUP  //從調度器的熱備狀態
        interface  eth0
        virtual_router_id  1  
        priority  99  //從調度器的優先級
        advert_int  1
        authentication {  //主、從熱備認證信息
            auth_type  PASS  //認證類型
            auth_pass  123456  //密碼字串
        }
        virtual_ipaddress {  //指定漂移地址(VIP),可以有多個
            172.16.16.172
        }
    }

web服務器池配置:

vim  /etc/keepalived/keepalived.conf
    --snip--
    virtual_server  172.16.16.172  80  {  //虛擬服務器地址(VIP)、端口
        delay_loop  15  //健康檢查的間隔時間(秒)
        lb_algo  rr  //輪詢(rr)調度算法
        lb_kind  DR  //直接路由(DR)羣集工作模式
        !persistence  60  //連接保持時間(秒),若啓用請去掉!號
        protocol  TCP  //應用服務採用的是TCP協議
        real_server  172.16.16.177  80 {  //第一個web節點的地址、端口
            weight  1  //節點的權重
            TCP_CHECK {  //健康檢查方式
                connect_port  80  //檢查的目標端口
                connect_timeout  3  //連接超時(秒)
                nb_get_retry  3  //重試次數
                delay_before_retry  4  //重試間隔(秒)
            }
        }
        real_server  172.16.16.178  80 {  //第二個web節點的地址、端口
            weight  1  //節點的權重
            TCP_CHECK {  //健康檢查方式
                connect_port  80  //檢查的目標端口
                connect_timeout  3  //連接超時(秒)
                nb_get_retry  3  //重試次數
                delay_before_retry  4  //重試間隔(秒)
            }
        }
        real_server  172.16.16.179  80 {  //第三個web節點的地址、端口
            weight  1  //節點的權重
            TCP_CHECK {  //健康檢查方式
                connect_port  80  //檢查的目標端口
                connect_timeout  3  //連接超時(秒)
                nb_get_retry  3  //重試次數
                delay_before_retry  4  //重試間隔(秒)
            }
        }
    }
#重啓keepalived服務
service  keepalived  restart
#查看雙機熱備運行情況
ipvsadm  -ln

配置web節點服務器

#設置迴環地址爲VIP地址
vim  /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=172.16.16.172
    NETMASK=255.255.255.255
ifup  lo:0
#修改內核參數
vim  /etc/sysctl.conf
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
#添加路由規則
route  add  -host  172.16.16.172  dev  lo:0
service  httpd  restart

測試LVS+Keepalived高可用羣集

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章