LVS搭配Keepalived

weixin_49226813發表於2020-11-05

為什麼實用Keepalived

企業應用中,單臺伺服器承擔應用存在單點故障的危險單點故障一旦發生,企業服務將發生中
斷,造成極大的危害

Keepalived工具介紹

專為LVS和HA設計的一款健康檢查工具
支援故障自動切換(Failover)
支援節點健康狀態檢查(Health Checking)官方網站: http://www.keepalived.orgl
在這裡插入圖片描述

Keepalived實現原理剖析

VRRP(虛路由冗餘協議)是針對路由器的一種備份解決方案
1、由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務
2、每個熱備組內同時只有一臺主路由器提供服務,其他路由器處於冗餘狀態
3、若當前線上的路由器失效,則其他路由器會根據設定的優先順序自動接替虛擬IP地址,繼續提供服務
在這裡插入圖片描述

Keepalived案例講解

1、雙機熱備的故障切換是由虛擬IP地址的漂移來實現,適用於各種應用伺服器
2、實現基於Web服務的雙機熱備
漂移地址:192.168.10.72
主、備伺服器:192.168.10.73、192.168.10.74
提供的應用服務: Web
在這裡插入圖片描述

Keepalived安裝與啟動

1、在LVS群集環境中應用時,也需用到ipvsadm管理工具
2、YUM安裝Keepalived
3、啟用Keepalived服務

配置Keepalived master伺服器
Keepalived配置目錄位於letc/keepalived/
keepalived.conf提是主配置檔案
global_ defs {.}區段指定全域性引數
vrrp_instance '賣例名稱{…}區段指定VRRP熱備引數
註釋文字以”!”符號開頭
目錄samples,提供了許多配置樣例作為參考

搭建LVS搭配Keepalived服務

配置LVS-DR模式
1、實驗環境準備
主LVS1伺服器 主機名:lvs-1 20.0.0.10
nfs伺服器 主機名:nfs 20.0.0.20
web伺服器1 主機名:web1 20.0.0.30
web伺服器2 主機名:web2 20.0.0.40
備LVS2伺服器 主機名:lvs-2 20.0.0.50
2、配置nfs伺服器
安裝nfs服務

[root@nfs ~]# yum -y install nfs-utils rpcbind

建立web共享目錄

[root@nfs ~]# mkdir /opt/web1 /opt/web2

設定web網頁

[root@nfs ~]# echo "<h1>This is web1<h1>" > /opt/web1/index.html
[root@nfs ~]# echo "<h1>This is web2<h1>" > /opt/web2/index.html

設定nfs共享目錄許可權

[root@nfs ~]# vim /etc/exports
增加以下內容:
/opt/web1  20.0.0.30(ro)		
/opt/web2  20.0.0.40(ro)

開啟nfs伺服器和rpcbind並設定開機自啟動

[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs

[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl enable rpcbind

檢視訪問許可權

[root@nfs ~]# showmount -e
Export list for nfs:
/opt/web2 20.0.0.40
/opt/web1 20.0.0.30

3、設定web1
安裝httpd伺服器

[root@web1 ~]# yum -y install httpd

掛載nfs共享目錄

[root@web1 ~]# mount 20.0.0.20:/opt/web1 /var/www/html/

開啟httpd服務

[root@web1 ~]# systemctl start httpd.service

設定配置DR的指令碼

[root@web1 ~]# vim web1.sh
#!/bin/bash
#web1
ifconfig lo:0 20.0.0.100 broadcast 20.0.0.100 netmask 255.255.255.255 up
route add -host 20.0.0.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

執行web1.sh

[root@web1 ~]# sh web1.sh
檢視ip地址
[root@web1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 20.0.0.30  netmask 255.255.255.0  broadcast 20.0.0.255

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 20.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)

4、設定web2
安裝httpd伺服器

[root@web1 ~]# yum -y install httpd

掛載nfs共享目錄

[root@web1 ~]# mount 20.0.0.20:/opt/web2 /var/www/html/

開啟httpd服務

[root@web1 ~]# systemctl start httpd.service

設定配置DR的指令碼

[root@web1 ~]# vim web2.sh
#!/bin/bash
#web1
ifconfig lo:0 20.0.0.100 broadcast 20.0.0.100 netmask 255.255.255.255 up
route add -host 20.0.0.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

執行web1.sh

[root@web1 ~]# sh web2.sh
檢視ip地址
[root@web1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 20.0.0.40  netmask 255.255.255.0  broadcast 20.0.0.255

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 20.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)

5、設定主LVS-1
載入ip_vs模組

[root@lvs-1 ~]# modprobe ip_vs

安裝管理軟體ipvsadm

[root@lvs -1~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm

安裝依賴工具

[root@lvs-1 ~]# yum -y install gcc gcc-c++ make popt-devel openssl-devel kernel-devel

匯入keepalived資料包
keepalived-2.0.13.tar.gz
解壓資料包

[root@lvs-1 opt]# tar zxvf keepalived-2.0.13.tar.gz

進入keepalived-2.0.13/

[root@lvs-1 opt]# cd keepalived-2.0.13/

編譯安裝 keepalived

[root@lvs-1 keepalived-2.0.13]# ./configure --prefix=/
[root@lvs-1 keepalived-2.0.13]# make && make install

設定啟動選項

[root@lvs-1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/
啟動keepalived服務
[root@lvs-1 keepalived-2.0.13]# systemctl start keepalived.service
[root@lvs-1 keepalived-2.0.13]# systemctl enable keepalived.service

編輯keepalived配置檔案

[root@lvs-1 keepalived-2.0.13]# vim /etc/keepalived/keepalived.conf
全部刪除新增下面的
! Configuration File for keepalived
global_defs {
      router_id LVS_01              #本伺服器的名稱
}
vrrp_instance VI_1 {                #定義VRRP熱備例項
      state MASTER                  #熱備狀態,MASTER表示主伺服器,BACKUP表示從伺服器
      interface ens33               #承載VIP地址的物理介面
      virtual_router_id 51          #虛擬路由器的ID號,每個熱備組保持一致
      priority 110                  #優先順序,數值越大優先順序越高
      advert_int 1                  #通告間隔秒數(心跳頻率)
      authentication {              #熱備認證資訊,每個熱備組保持一致
            auth_type PASS          #認證型別
            auth_pass 6666          #密碼字串
      }
      virtual_ipaddress {           #指定飄逸地址(VIP),可以有多個
            20.0.0.100
      }
}
virtual_server 20.0.0.100 80 {  #虛擬伺服器地址(VIP)、埠
            delay_loop 6              #健康檢查的間隔時間(秒)
            lb_algo rr                #輪詢(rr)排程演算法
            lb_kind DR                #直接路由(DR)群集工作模式
            persistence_timeout 6     #連線保持時間(秒)
            protocol TCP              #應用伺服器採用的是TCP協議
real_server 20.0.0.30 80 {       #第一個web伺服器節點的地址、埠
            weight 1                  #節點的權重
            TCP_CHECK {               #健康檢查方式
            connect_port 80           #檢查的目標埠
            connect_timeout 3         #連線超時(秒)
            nb_get_retry 3            #重試次數
            delay_before_retry 3      #重試間隔
            }
}
real_server 20.0.0.40 80 {
            weight 1
            TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            }
    }
}

重啟keepalived伺服器

[root@lvs-1 keepalived-2.0.13]# systemctl restart keepalived.service

6、設定備LVS-2
載入ip_vs模組

[root@lvs-2 ~]# modprobe ip_vs

安裝管理軟體ipvsadm

[root@lvs -2~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm

安裝依賴工具

[root@lvs-2 ~]# yum -y install gcc gcc-c++ make popt-devel openssl-devel kernel-devel

匯入keepalived資料包
keepalived-2.0.13.tar.gz
解壓資料包

[root@lvs-2 opt]# tar zxvf keepalived-2.0.13.tar.gz

進入keepalived-2.0.13/

[root@lvs-2 opt]# cd keepalived-2.0.13/

編譯安裝 keepalived

[root@lvs-2 keepalived-2.0.13]# ./configure --prefix=/
[root@lvs-2 keepalived-2.0.13]# make && make install
設定啟動選項
[root@lvs-2 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/
啟動keepalived服務
[root@lvs-2 keepalived-2.0.13]# systemctl start keepalived.service
[root@lvs-2 keepalived-2.0.13]# systemctl enable keepalived.service

編輯keepalived配置檔案

[root@lvs-2 keepalived-2.0.13]# vim /etc/keepalived/keepalived.conf
全部刪除新增下面的
! Configuration File for keepalived
global_defs {
      router_id LVS_02              #本伺服器的名稱
}
vrrp_instance VI_1 {                #定義VRRP熱備例項
      state MASTER                  #熱備狀態,MASTER表示主伺服器,BACKUP表示從伺服器
      interface ens33               #承載VIP地址的物理介面
      virtual_router_id 51          #虛擬路由器的ID號,每個熱備組保持一致
      priority 105                  #優先順序,數值越大優先順序越高
      advert_int 1                  #通告間隔秒數(心跳頻率)
      authentication {              #熱備認證資訊,每個熱備組保持一致
            auth_type PASS          #認證型別
            auth_pass 6666          #密碼字串
      }
      virtual_ipaddress {           #指定飄逸地址(VIP),可以有多個
            20.0.0.100
      }
}
virtual_server 20.0.0.100 80 {  #虛擬伺服器地址(VIP)、埠
            delay_loop 6              #健康檢查的間隔時間(秒)
            lb_algo rr                #輪詢(rr)排程演算法
            lb_kind DR                #直接路由(DR)群集工作模式
            protocol TCP              #應用伺服器採用的是TCP協議
real_server 20.0.0.30 80 {       #第一個web伺服器節點的地址、埠
            weight 1                  #節點的權重
            TCP_CHECK {               #健康檢查方式
            connect_port 80           #檢查的目標埠
            connect_timeout 3         #連線超時(秒)
            nb_get_retry 3            #重試次數
            delay_before_retry 3      #重試間隔
            }
}
real_server 20.0.0.40 80 {
            weight 1
            TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            }
    }
}
重啟keepalived伺服器
[root@lvs-1 keepalived-2.0.13]# systemctl restart keepalived.service

客戶機測試
在這裡插入圖片描述

關閉戶主LVS-1
[root@lvs-1 ~]# systemctl stop keepalived.service
再去訪問
在這裡插入圖片描述

相關文章