溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

搭建:LVS+Keepalived高可用Web服務群集環(huán)境

發(fā)布時間:2020-07-08 16:24:42 來源:網(wǎng)絡 閱讀:1261 作者:warrent 欄目:建站服務器

該服務涉及到的技術較多,相關技術文檔的具體解釋可以參考以下鏈接:

Centos 7基于DR(直接路由)模式的負載均衡配置詳解;

Centos 7基于NAT(地址轉換)模式的負載均衡配置詳解;

LVS負載均衡群集詳解;

centos 7之keepalived雙機熱備理論+配置文件詳解;

上面的博文結合,可以搭建出keepalived+DR/NAT模式的高可用web群集,這篇博文以keepalived+DR的環(huán)境來搭建一個高可用的web服務群集。

該博文以配置為主,并且按照生產(chǎn)環(huán)境來配置,可照搬,環(huán)境如下:

搭建:LVS+Keepalived高可用Web服務群集環(huán)境
一、環(huán)境分析:

1、2個調度器和2個web節(jié)點使用同一個網(wǎng)段地址,可以直接和外網(wǎng)通信。為了共享存儲的

安全性,一般將web節(jié)點和存儲服務器規(guī)劃到內(nèi)網(wǎng)環(huán)境,所以web節(jié)點必須有兩個及以上

網(wǎng)卡的接口。

2、我這里資源有限,也為了配置方便,所以調度器和web節(jié)點分別只有兩個,在web訪問請

求量不大的情況下,足夠了,但是若訪問請求比較大,那么最少要分別配置三個調度器和

web節(jié)點,如果只有兩個web節(jié)點的話,訪問量又比較大,那么一旦有一個宕機了,那剩下

一個獨苗必定會因為扛不住激增的訪問請求,而被打死。

3、準備系統(tǒng)映像,以便安裝相關服務。

4、自行配置防火墻策略和除了VIP之外的IP地址(我這里直接關閉了防火墻)。

5、keepalived會自動調用IP_vs模塊,所以無需手動加載。

二、最終效果:

1、 客戶端多次訪問群集的VIP,得到的是同一個網(wǎng)頁。

2、主調度器宕機后,群集的VIP地址將會自動漂移到從(備份)調度器,此時,所有

的調度任務由從調度器進行分配。當主調度器恢復運行后,群集的VIP地址會自動轉移回

主調度器,主調度器繼續(xù)工作,從調度器轉回備份狀態(tài)。

3、web節(jié)點宕機后,會被keepalived健康檢查功能檢測到,從而自動在web節(jié)點池中去除

宕機的節(jié)點,待web節(jié)點恢復運行后,會被自動添加到web節(jié)點池中。

三、開始搭建:

1、配置主調度器(LVS1):

[root@LVS1 ~]# yum -y install keepalived ipvsadm                #安裝所需工具
[root@LVS1 ~]# vim /etc/sysctl.conf              #調整內(nèi)核參數(shù),寫入下面三行
            .....................
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@LVS1 ~]# sysctl -p                  #刷新一下
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@LVS1 ~]# cd /etc/keepalived/
[root@LVS1 keepalived]# cp keepalived.conf keepalived.conf.bak          #備份配置文件
[root@LVS1 keepalived]# vim keepalived.conf               #編輯keepalived配置文件

#以下標注的行是需要進行更改的,沒有標注的行,保持默認即可

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc            #收件人地址(沒需要的話可以不做修改)
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc       #發(fā)件人姓名、地址(可不做修改)
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL1     #本服務器的名稱改一下,在群集中所有調度器名稱里必須唯一。
}

vrrp_instance VI_1 {
    state MASTER             #設置為主調度器
    interface ens33            #承載VIP地址的物理網(wǎng)卡接口根據(jù)實際情況改一下
    virtual_router_id 51           
    priority 100                  
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        200.0.0.100                  #指定漂移IP地址(VIP),可以有多個。
    }
}

virtual_server 200.0.0.100 80 {                       #改為VIP地址及所需端口
    delay_loop 6
    lb_algo rr                             #根據(jù)需要改一下負載調度算法,rr表示輪詢。
    lb_kind DR                          #設置工作模式為DR(直接路由)模式。
   ! persistence_timeout 50      #為了一會測試看到效果,將連接保持這行前加“ !”將該行注釋掉。
    protocol TCP

real_server 200.0.0.4 80 {       #一個web節(jié)點的配置,real_server 200.0.0.4 80 {  ..... }是復制下面的。復制過來后,更改一下節(jié)點IP地址即可。
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 200.0.0.3 80 {             #一個web節(jié)點的配置,改動完成后,有幾個節(jié)點就復制幾份real_serve 200.0.0.3 80  {  ..... }到該行的上方,最好別往下面粘貼,以防大括號丟失。
        weight 1
        TCP_CHECK {
            connect_port 80                #添加該行,以配置連接端口
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 #以下還有很多配置項,我這里有98行,全部刪除即可,若不刪除時重啟服務可能報錯。 
 [root@LVS1 ~]# systemctl restart keepalived              #重啟服務
 [root@LVS1 ~]# systemctl enable keepalived              #設置開機自啟動

至此,主調度器配置完畢?。。?/strong>

2、配置從調度器(LVS2):

[root@LVS2 ~]# yum -y install ipvsadm keepalived           #安裝所需工具
[root@LVS2 ~]# scp root@200.0.0.1:/etc/sysctl.conf /etc/              
#將主調度器的/proc參數(shù)文件復制過來
root@200.0.0.1 s password:            #輸入主調度器的用戶密碼
sysctl.conf                                 100%  566   205.8KB/s   00:00    
[root@LVS2 ~]# sysctl -p               #刷新
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@LVS2 ~]# scp root@200.0.0.1:/etc/keepalived/keepalived.conf /etc/keepalived/   
#將主調度器的keepalived配置文件復制過來,稍微改動即可。
root@200.0.0.1 s password:                     #輸入主調度器的用戶密碼
keepalived.conf                             100% 1053     2.5MB/s   00:00    
[root@LVS2 ~]# vim /etc/keepalived/keepalived.conf             #編輯復制過來的配置文件
#若兩臺服務器都是ens33網(wǎng)卡的話,那么所需該的只有以下三項(其他項保持默認):
router_id LVS_DEVEL2        #將route_id改為不一樣的。route_id必須是唯一的。
state BACKUP              #狀態(tài)改為BACKUP,注意大小寫。
priority 90        #優(yōu)先級要比主調度器小,并且不可與其他備份調度器優(yōu)先級沖突。
[root@LVS2 ~]# systemctl restart keepalived           #啟動服務
[root@LVS2 ~]# systemctl enable keepalived          #設置開機自啟動

至此,從調度器也配置完成了,若需要部署多個從調度器,按照以上這個從(備份)調度器配置即可。

3、配置web1節(jié)點:

[root@Web1 ~]# cd /etc/sysconfig/network-scripts/
[root@Web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0           #復制一份回環(huán)地址的配置文件
[root@Web1 network-scripts]# vim ifcfg-lo:0           #編輯回環(huán)地址,以承載群集的VIP。
DEVICE=lo:0            #更改網(wǎng)卡名稱
IPADDR=200.0.0.100            #配置群集的VIP
NETMASK=255.255.255.255             #子網(wǎng)掩碼必須為4個255。
ONBOOT=yes
#保留上面四行配置項即可,多余的刪除。
[root@Web1 network-scripts]# ifup lo:0          #啟動回環(huán)接口
[root@Web1 ~]# ifconfig lo:0                    #查看VIP配置是否正確
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
[root@web1 ~]# route add -host 200.0.0.100 dev lo:0              #添加VIP本地訪問路由記錄
[root@web1 ~]# vim /etc/rc.local               #設置開機自動,添加這條路由記錄              
                ................................
/sbin/route add -host 200.0.0.100 dev lo:0
[root@web1 ~]# vim /etc/sysctl.conf                  #調整/proc響應參數(shù),寫入下面六行
                    ...................
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
[root@web1 ~]# sysctl -p                #刷新一下
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
[root@web1 ~]# yum -y install httpd             #安裝http服務
[root@Web1 ~]# echo 111111111111 > /var/www/html/index.html           #準備測試網(wǎng)頁文件
[root@Web1 ~]# systemctl start httpd             #啟動http服務
[root@Web1 ~]# systemctl enable httpd             #設置開機自啟動

至此,第一個web節(jié)點已經(jīng)配置完成。

4、配置web2節(jié)點:

[~]# scp root@200.0.0.3:/etc/sysconfig/network-scrts/ifcfg-lo:0  /etc/sysconfig/network-scripts/                    
#復制web1節(jié)點的lo:0配置文件
The authenticity of host '200.0.0.3 (200.0.0.3)' can't be established.
ECDSA key fingerprint is b8:ca:d6:89:a2:42:90:97:02:0a:54:c1:4c:1e:c2:77.
Are you sure you want to continue connecting (yes/no)? yes           #輸入yes
Warning: Permanently added '200.0.0.3' (ECDSA) to the list of known hosts.
root@200.0.0.3's password:           #輸入web1節(jié)點用戶的密碼
ifcfg-lo:0                                  100%   66     0.1KB/s   00:00    
[root@Web2 ~]# ifup lo:0                  #啟用lo:0
[root@Web2 ~]# ifconfig lo:0          #確認VIP無誤
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
[root@Web2 ~]# scp root@200.0.0.3:/etc/sysctl.conf /etc/       #復制內(nèi)核文件
root@200.0.0.3's password:                     #輸入web1節(jié)點用戶的密碼
sysctl.conf                                 100%  659     0.6KB/s   00:00   
[root@Web2 ~]# sysctl -p                     #刷新一下
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
[root@Web2 ~]# route add -host 200.0.0.100 dev lo:0            #添加VIP本地訪問路由記錄
[root@Web2 ~]# vim /etc/rc.local                  #設置開機自動,添加這條路由記錄
                ................................
/sbin/route add -host 200.0.0.100 dev lo:0
[root@web1 ~]# yum -y install httpd             #安裝http服務
[root@Web1 ~]# echo 22222222222 > /var/www/html/index.html           #準備測試網(wǎng)頁文件
[root@Web1 ~]# systemctl start httpd             #啟動http服務
[root@Web1 ~]# systemctl enable httpd             #設置開機自啟動

至此,web2也配置完成了,現(xiàn)在使用客戶端,以便測試群集是否生效:

5、客戶端訪問測試:

搭建:LVS+Keepalived高可用Web服務群集環(huán)境

搭建:LVS+Keepalived高可用Web服務群集環(huán)境

若訪問到的是同一頁面,在排除配置上錯誤的情況下,可以打開多個網(wǎng)頁,或者稍等一會再刷新,因為它可能有一個保持連接的時間,所以會存在延遲。

為了測試,所以才在每個web節(jié)點準備不同的網(wǎng)頁文件,以便測試是否有負載均衡的效果,現(xiàn)在效果已經(jīng)有了,所以要搭建共享存儲服務器,所有的web節(jié)點都從共享存儲服務器讀取網(wǎng)頁文件向client提供,以便向client提供相同的網(wǎng)頁文件。

下面是搭建了一個簡易的共享存儲服務器,若需要搭建高可用的存儲服務器,可以關注我的博客:warrent,我將在以后的博文寫出如何去搭建一個高可用的存儲服務器。

6、配置NFS共享存儲服務器:

[root@NFS /]# yum -y install nfs-utils rpcbind                   #安裝相關軟件包
[root@NFS /]# systemctl enable nfs               #設置為開機自啟動
[root@NFS /]# systemctl enable rpcbind          #設置為開機自啟動
[root@NFS /]# mkdir -p /opt/wwwroot               #準備共享目錄
[root@NFS /]# echo www.baidu.com > /opt/wwwroot/index.html              #新建網(wǎng)頁文件
[root@NFS /]# vim /etc/exports                         #設置共享目錄(該文件內(nèi)容默認為空)
/opt/wwwroot   192.168.1.0/24(rw,sync,no_root_squash)           #寫入該行
[root@NFS /]# systemctl restart rpcbind        #重啟相關服務,需注意服務啟動的先后順序
[root@NFS /]# systemctl restart nfs
[root@NFS /]# showmount -e               #查看本機共享的目錄
Export list for NFS:
/opt/wwwroot 192.168.2.0

7、所有web節(jié)點掛載共享存儲服務器:

1)Web1節(jié)點服務器配置:

[root@Web1 ~]# showmount -e 192.168.1.5            #查看存儲服務器共享的目錄
Export list for 192.168.1.5:
/opt/wwwroot 192.168.1.0/24 
[root@Web1 ~]# mount 192.168.1.5:/opt/wwwroot /var/www/html/         #掛載至網(wǎng)頁根目錄
[root@Web1 ~]# df -hT /var/www/html/                       #確認掛載成功
文件系統(tǒng)                 類型  容量  已用  可用 已用% 掛載點
192.168.1.5:/opt/wwwroot nfs4   39G  5.5G   33G   15% /var/www/html
[root@Web1 ~]# vim /etc/fstab               #設置自動掛載 
                   .........................
192.168.1.5:/opt/wwwroot  /var/www/html   nfs   defaults,_netdev 0 0
#寫入上面內(nèi)容

2)Web2節(jié)點服務器配置:

[root@Web2 ~]# showmount -e 192.168.1.5            #查看存儲服務器共享的目錄
Export list for 192.168.1.5:
/opt/wwwroot 192.168.1.0/24 
[root@Web2 ~]# mount 192.168.1.5:/opt/wwwroot /var/www/html/         #掛載至網(wǎng)頁根目錄
[root@Web2 ~]# df -hT /var/www/html/                       #確認掛載成功
文件系統(tǒng)                 類型  容量  已用  可用 已用% 掛載點
192.168.1.5:/opt/wwwroot nfs4   39G  5.5G   33G   15% /var/www/html
[root@Web2 ~]# vim /etc/fstab               #設置自動掛載 
                   .........................
192.168.1.5:/opt/wwwroot  /var/www/html   nfs   defaults,_netdev 0 0
#寫入上面內(nèi)容

8、客戶端再次訪問測試:

這次,客戶端無論怎么刷新,都將看到相同的網(wǎng)頁,如下:

搭建:LVS+Keepalived高可用Web服務群集環(huán)境

9、更改所有主/從調度器上的keepalived配置文件,以便適用于生產(chǎn)環(huán)境:

1)主調度器:

[root@LVS1 ~]# vim /etc/keepalived/keepalived.conf 
                    .................   #省略部分內(nèi)容
virtual_server 200.0.0.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50           #將之前添加的感嘆號“ !”刪除。
    protocol TCP
                   .................   #省略部分內(nèi)容
    }
        [root@LVS1 ~]# systemctl restart keepalived        #重啟服務,使更改生效

2)從調度器:

[root@LVS1 ~]# vim /etc/keepalived/keepalived.conf 
                    .................   #省略部分內(nèi)容
virtual_server 200.0.0.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50           #將之前添加的感嘆號“ !”刪除。
    protocol TCP
                   .................   #省略部分內(nèi)容
    }
        [root@LVS2 ~]# systemctl restart keepalived        #重啟服務,使更改生效

10、附上一些查看命令:

1)VIP在哪個調度器上,查詢該調度器承載VIP地址的物理接口,即可看到VIP地址(VIP地址在備份調度器上查不到的):

[root@LVS1 ~]# ip a show dev ens33              #查詢承載VIP地址的物理網(wǎng)卡ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> ate UP groupn 1000
    link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.1/24 brd 200.0.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 200.0.0.100/32 scope global ens33                   #VIP地址。
       valid_lft forever preferred_lft forever
    inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2)查詢有哪些web節(jié)點:

[root@LVS1 ~]# ipvsadm -ln                  #查詢web節(jié)點池及VIP
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
   RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.0.0.100:80 rr
  200.0.0.3:80                 Route   1      0          0         
  200.0.0.4:80                 Route   1      0          0      

3)模擬Web2節(jié)點和主調度器宕機,并在備份調度器上再次查詢VIP以及web節(jié)點:

[root@LVS2 ~]# ip a show dev ens33       #可以看到VIP地址已經(jīng)轉移到了備份調度器上
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> 
    link/ether 00:0c:29:9a:09:98 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.2/24 brd 200.0.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 200.0.0.100/32 scope global ens33                      #VIP地址。
       valid_lft forever preferred_lft forever
    inet6 fe80::3050:1a9b:5956:5297/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@LVS2 ~]# ipvsadm -ln                   #Web2節(jié)點宕機后,就查不到了。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.0.0.100:80 rr
  -> 200.0.0.3:80                 Route   1      0          0         

    #當主調度器或Web2節(jié)點恢復正常后,將會自動添加到群集中,并且正常運行。

4)查看調度器故障切換時的日志消息:

[root@LVS2 ~]# tail -30 /var/log/messages

齊活.....................

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI