1. 程式人生 > 其它 >LVS+Keepalived叢集

LVS+Keepalived叢集

Keepalived工具介紹

  • 專為LVS和HA設計的一款健康檢查工具
  • 支援故障自動切換(Failover)
  • 支援節點健康狀態檢查(Health Checking)
    • 判斷LVS負載排程器、節點伺服器的可用性,當master主機出現故障及時切換到backup節點保證業務正常,當master故障主機恢復後將其重新加入群集並且業務重新切換回master節點。
  • 官方網站:http://www.keepalived.org/

Keepalived實現原理剖析

Keepalived採用VRRP熱備份協議實現Linux伺服器的多機熱備功能

VRRP (虛擬路由冗餘協議)是針對路由器的一種備份解決方案

  • 由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務
  • 每個熱備組內同時只有一臺主路由器提供服務,其他路由器處於冗餘狀態
  • 若當前線上的路由器失效,則其他路由器會根據設定的優先順序自動接替虛擬IP地址,繼續提供服務
雙機熱備的故障切換是由虛擬P地址的漂移來實現,適用於各種應用伺服器

Keepalived體系主要模組及其作用:

keepalived體系架構中主要有三個模組,分別是core, check和vrrp.
  • core模組:為keepalived的核心,負責主程序的啟動、維護及全域性配置檔案的載入和解析。
  • vrrp模組:是來實現VRRP協議的。
  • check模組:負責健康檢查,常見的方式有埠檢查及URL檢查。

--------LVS+Keepalived 高可用群集--------

主DR 伺服器: 192.168.80.10
備DR 伺服器: 192.168.80.11
Web 伺服器1: 192.168.80.20
Web 伺服器2: 192.168.80.21
NFS 伺服器: 192.168.80.30
客戶端:192.168.80.200
vip:192.168.80.100

1、配置負載排程器(主、備相同;192.168.80.10;192.168.80.11)

systemctl stop firewalld.service
setenforce 0
 
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs

  

(1)配置keeplived(主、備DR 伺服器上都要設定)

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs {                       #定義全域性引數
--10行--修改,郵件服務指向本地
    smtp_server 127.0.0.1
--12行--修改,指定伺服器(路由器)的名稱,主備伺服器名稱須不同,主為LVS_01,備為LVS_02
    router_id LVS_01
}
 
vrrp_instance VI_1 {                #定義VRRP熱備例項引數
--20行--修改,指定熱備狀態,主為MASTER,備為BACKUP
    state MASTER
--21行--修改,指定承載vip地址的物理介面
    interface ens33
--22行--修改,指定虛擬路由器的ID號,每個熱備組保持一致
    virtual_router_id 10
--23行--修改,指定優先順序,數值越大優先順序越高,主為100,備為99
    priority 100
    advert_int 1                    #通告間隔秒數(心跳頻率)
    authentication {                #定義認證資訊,每個熱備組保持一致
        auth_type PASS              #認證型別
--27行--修改,指定驗證密碼,主備伺服器保持一致
        auth_pass abc123
    }
    virtual_ipaddress {             #指定群集vip地址
        192.168.80.100
    }
}
--36行--修改,指定虛擬伺服器地址(VIP)、埠,定義虛擬伺服器和Web伺服器池引數
virtual_server 192.168.80.100 80 {
    delay_loop 6                    #健康檢查的間隔時間(秒)
    lb_algo rr                      #指定排程演算法,輪詢(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 50          #連線保持時間(秒)
    protocol TCP                    #應用服務採用的是 TCP協議
--43行--修改,指定第一個Web節點的地址、埠
    real_server 192.168.80.10 80 {
        weight 1                    #節點的權重
--45行--刪除,新增以下健康檢查方式       
        TCP_CHECK {
            connect_port 80         #新增檢查的目標埠
            connect_timeout 3       #新增連線超時(秒)
            nb_get_retry 3          #新增重試次數
            delay_before_retry 4    #新增重試間隔
        }
    }
 
    real_server 192.168.80.11 80 {     #新增第二個 Web節點的地址、埠
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
##刪除後面多餘的配置##
}
 
 
systemctl start keepalived
ip addr show dev ens33              #檢視虛擬網絡卡vip

  

(2)配置分發策略(#keepalived配置好後,可以不用再配ipvsadm 分發策略)

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
 
ipvsadm -C
ipvsadm -A -t 192.168.80.100:80 -s rr
ipvsadm -a -t 192.168.80.100:80 -r 192.168.80.20:80 -g
ipvsadm -a -t 192.168.80.100:80 -r 192.168.80.21:80 -g
ipvsadm
 
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm
 
#如果沒有vip的分發策略。則重啟keepalived 服務

  

(3)調整核心 proc 響應引數,關閉linux核心的重定向引數響應

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
sysctl -p

  

2、部署共享儲存(NFS伺服器:192.168.80.30)

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
 
yum install nfs-utils rpcbind -y
systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service
 
mkdir /opt/accp /opt/benet
chmod 777 /opt/accp /opt/benet
 
vim /etc/exports
/usr/share *(ro,sync)
/opt/accp 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)
 
--釋出共享---
exportfs -rv

  

3、配置節點伺服器(192.168.80.20;192.168.80.21)

systemctl stop firewalld
setenforce 0
 
yum -y install httpd
systemctl start httpd
 
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.80.100
NETMASK=255.255.255.255
 
service network restart 

systemctl restart network ifup lo:0 ifconfig lo:0 route add -host 192.168.80.100 dev lo:0 vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 sysctl -p --192.168.80.20--- mount.nfs 192.168.80.30:/opt/accp /var/www/html --192.168.80.21--- mount.nfs 192.168.80.30:/opt/benet /var/www/html

  

4、測試驗證

在客戶端訪問 http://192.168.80.100/ ,預設閘道器指向 192.168.80.100

再在主伺服器關閉 keepalived 服務後在測試,systemctl stop keepalived