Linux集羣架構(一)

第二十八課 Linux集羣架構(一)php

目錄linux

1、 集羣介紹
2、 keepalived介紹
3、 用keepalived配置高可用集羣
4、 負載均衡集羣介紹
5、 LVS介紹
6、 LVS調度算法
7、 LVS NAT模式搭建nginx


1、 集羣介紹

集羣聽起來好像是一個很高大上的技術,其實不是的,集羣其實就是一堆計算機的集合,給用戶提供同一個服務的一組計算機,就稱之爲集羣,對於用戶而言好像就是一臺計算機提供的服務,集羣主要分爲三大類。git

LB 負載均衡集羣算法

負載均衡集羣主要是提升服務的響應能力的,好比說某服務器的併發響應能力是100個,這個時候常常有人反映說連不上服務器,這個時候解決方案通常有兩種:1、升級硬件,升級硬件顯然不是很好的解決方案,假如說升級硬件以後過了一段時間因爲業務量的加大,服務器又負載不起了怎麼辦呢, 2、將現有空閒低配的設備組合起來作成一個具備高併發的負載均衡集羣,多臺計算機同時分攤負載用戶的請求,這樣一來服務器的壓力也就沒有那麼大了,這一類的集羣具備很好的可伸縮性,可靠性,和成本低廉等好處。apache

負載均衡集羣,須要有一臺服務器做爲分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少爲2vim

HA 高可用性集羣後端

高可用性集羣主要是提供7*24小時不間斷服務的,不能說由於一臺或幾臺服務器的down機而致使沒法提供服務的,若是某臺down機了,會自動的切換到其餘計算機上面工做,從而達到高可用的效果。瀏覽器

高可用集羣一般爲兩臺服務器,一臺工做,另一臺做爲冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務。bash

HP 高性能集羣

高性能集羣主要是用於須要大量CPU運算的場景中,好比說天氣預報,國外3D大片的特效製做,等等一系列須要作大量運算的應用。

LB 負載均衡集羣又分爲硬件級與軟件級的

硬件類的價格比較貴,如:F5, Netscaler等

軟件級的比較常見的有以下幾種:

1.LVS;

2.Haproxy

3.Nignx

HA 高可用集羣的解決方案常見的有如下幾種

heartbeat

corosync+openais RHCS

ultramokey

keepalived

HP 高性能集羣的解決方案常見的有:bowerful


2、 keepalived介紹

keepalived是實現高可用的一種輕量級的技術手段,主要用來防止單點故障(單點故障是指一旦某一點出現故障就會致使整個系統架構的不可用)的發生。

1.keepalived經過VRRP(Virtual Router Redundancy Protocl)來實現高可用。

2.在VRRP協議裏會將多臺功能相同的路由器組成一個小組,這個小組裏會有1個master角色和N(N>=1)個backup角色。

3.master會經過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認爲master宕機了。此時就須要根據各個backup的優先級來決定誰成爲新的mater。

4.Keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。


3、 用keepalived配置高可用集羣

環境

CentOS Linux release 7.4.1708 (Core)

內核版本:4.3.10.0-693.el7.x86_64

nginx/1.14.0

server1: 10.0.1.51 主機名:nginx-master

server2: 10.0.1.52 主機名:nginx-slave

nginx+keepalived高可用安裝過程

1.在nginx-master和nginx-slave上安裝keepalived軟件包

[root@localhost ~]# yum -y install keepalived
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.cn99.com

...中間略...
Installed:
  keepalived.x86_64 0:1.3.5-6.el7
Dependency Installed:
  net-snmp-agent-libs.x86_64 1:5.7.2-33.el7_5.2                    net-snmp-libs.x86_64 1:5.7.2-33.el7_5.2
Complete!

2.在nginx-master和nginx-slave上安裝好nginx(以前已經安裝過,因此兩臺測試機都有nginx),此處略過。

[root@nginx-master ~]# netstat -nltup | grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      963/nginx: master p

[root@nginx-slave ~]# netstat -nltup | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      972/nginx: master p

3.編輯nginx-master上keepalived的配置文件

[root@nginx-master ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.ori
[root@nginx-master ~]# vim /etc/keepalived/keepalived.conf
//內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf
global_defs {
   notification_email {
     kennminn@139.com
   }
   notification_email_from root
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
//nginx狀態檢查腳本,需編寫
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}

vrrp_instance VI_1 {
    state MASTER
    interface ens32
//與slave上的值需一致
    virtual_router_id 51
//優先級
    priority 100
    advert_int 1
    authentication {
//驗證方式
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
//虛擬ip
        10.0.1.50
    }

    track_script {
        chk_nginx
    }

}

4.新建監控腳本

[root@nginx-master ~]# vim /usr/local/sbin/check_ng.sh
//內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
#!/bin/bash
#時間變量,用於記錄日誌
d=$(date --date today +%Y%m%d_%H:%M:%S)
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量,
#若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

//授予腳本755權限
[root@nginx-master ~]# chmod 755 /usr/local/sbin/check_ng.sh
[root@nginx-master ~]# ls -l /usr/local/sbin/check_ng.sh 
-rwxr-xr-x 1 root root 568 Jul 20 13:52 /usr/local/sbin/check_ng.sh

5.啓動nginx-master上的keepalived

[root@nginx-master ~]# systemctl start keepalived.service 
[root@nginx-master ~]# ps aux | grep keepalived
root       1600  0.0  0.1 118608  1384 ?        Ss   13:55   0:00 /usr/sbin/keepalived -D
root       1601  0.0  0.3 127468  3308 ?        S    13:55   0:00 /usr/sbin/keepalived -D
root       1602  0.0  0.2 127408  2832 ?        S    13:55   0:00 /usr/sbin/keepalived -D
root       1728  0.0  0.0 112660   980 pts/0    S+   13:56   0:00 grep --color=auto keepalived

6.編輯nginx-slave上的配置文件

[root@nginx-slave ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.ori
[root@nginx-slave ~]# vim /etc/keepalived/keepalived.conf
//內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf
global_defs {

   notification_email {
     kennminn@139.com
   }
   notification_email_from root
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}

vrrp_instance VI_1 {
//修改成BACKUP
    state BACKUP
    interface ens32
    virtual_router_id 51
//修改優先級
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        10.0.1.50
    }

    track_script {
        chk_nginx
    }

}

7.新建監控腳本

[root@nginx-slave ~]# vim /usr/local/sbin/check_ng.sh
//內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
#!/bin/bash
#時間變量,用於記錄日誌
d=$(date --date today +%Y%m%d_%H:%M:%S)
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量,
#若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

//授予腳本755權限
[root@nginx-master ~]#ls -l /usr/local/sbin/check_ng.sh
-rwxr-xr-x 1 root root 568 Jul 20 14:09 /usr/local/sbin/check_ng.sh

8.啓動nginx-slave上的keepalived

[root@nginx-slave ~]# systemctl start keepalived.service 
[root@nginx-slave ~]# ps aux | grep keepalived
root       1891  0.0  0.1 118608  1388 ?        Ss   14:13   0:00 /usr/sbin/keepalived -D
root       1892  0.0  0.3 127468  3308 ?        S    14:13   0:00 /usr/sbin/keepalived -D
root       1893  0.1  0.2 127408  2828 ?        S    14:13   0:00 /usr/sbin/keepalived -D
root       1926  0.0  0.0 112660   980 pts/0    S+   14:13   0:00 grep --color=auto keepalived

9.測試

//環境
[root@nginx-master ~]# curl -x127.0.0.1:80 localhost
I am nginx-master!!!
[root@nginx-slave ~]# curl -x127.0.0.1:80 localhost
I am nginx-slave!!!

遠程瀏覽器

測試1.關閉master上的nginx服務

> ^C
[root@nginx-master ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  OK  ]
[root@nginx-master ~]# ps aux | grep nginx
nginx      1210  0.0  0.4 227116  4720 ?        S    11:37   0:00 php-fpm: pool www
nginx      1211  0.0  0.4 227116  4720 ?        S    11:37   0:00 php-fpm: pool www
nginx      1212  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1213  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1214  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1215  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1216  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1217  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1218  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1219  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1220  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1221  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1222  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1223  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1224  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1225  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1226  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1227  0.0  0.4 227116  4724 ?        S    11:37   0:00 php-fpm: pool www
nginx      1228  0.0  0.4 227116  4728 ?        S    11:37   0:00 php-fpm: pool www
nginx      1229  0.0  0.4 227116  4728 ?        S    11:37   0:00 php-fpm: pool www
root       5641  0.0  0.1  45884  1144 ?        Ss   14:26   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx      5642  0.0  0.3  48372  3792 ?        S    14:26   0:00 nginx: worker process
nginx      5643  0.0  0.3  48372  3792 ?        S    14:26   0:00 nginx: worker process
root       5679  0.0  0.0 112660   976 pts/0    S+   14:26   0:00 grep --color=auto nginx
[root@nginx-master ~]# netstat -nltup | grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5641/nginx: master  

//由於監控腳本有寫自動重啓的指令,因此手工重啓後監控腳本又自動把nginx服務開啓了。

測試2.在master上增長iptabls規則

//開啓防火牆,添加規則,主備上都須要作
[root@nginx-master ~]# systemctl status firewalld.service
[root@nginx-master ~]firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens32 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
[root@nginx-master ~]firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens32 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
[root@nginx-master ~]firewall-cmd --zone=public --add-port=80/tcp --permanent
[root@nginx-master ~]firewall-cmd --reload

此時keepalived是正常的,虛ip能夠在主、從上進行漂移。

//刪除master上的容許規則,添加拒絕規則
[root@nginx-master ~]# firewall-cmd --direct --permanent --remove-rule ipv4 filter OUTPUT 0 --out-interface ens32 --destination 224.0.0.18 --protocol vrrp -j ACCEPT   
success
[root@nginx-master ~]# firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens32 --destination 224.0.0.18 --protocol vrrp -j DROP
success

[root@nginx-master ~]# firewall-cmd --direct --permanent --remove-rule ipv4 filter INPUT 0 --in-interface ens32 --destination 224.0.0.18 --protocol vrrp -j ACCEPT     
success
[root@nginx-master ~]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens32 --destination 224.0.0.18 --protocol vrrp -j DROP
success
[root@nginx-master ~]# firewall-cmd --reload

遠程瀏覽器訪問

測試3 關閉master上的keepalived服務

[root@nginx-master ~]# systemctl stop keepalived.service

遠程瀏覽器此時訪問的頁面爲

測試4 從新啓用master上的keepalived服務

[root@nginx-master ~]# systemctl start keepalived.service

切換過程存在延時

//遠程機器上長ping虛ip:10.0.1.50
來自 10.0.1.50 的回覆: 字節=32 時間<1ms TTL=64
來自 10.0.1.50 的回覆: 字節=32 時間<1ms TTL=64
來自 10.0.1.50 的回覆: 字節=32 時間=5ms TTL=64
來自 10.0.1.50 的回覆: 字節=32 時間<1ms TTL=64
請求超時。
來自 10.0.1.50 的回覆: 字節=32 時間<1ms TTL=64
來自 10.0.1.50 的回覆: 字節=32 時間<1ms TTL=64
來自 10.0.1.50 的回覆: 字節=32 時間<1ms TTL=64


4、 負載均衡集羣介紹

負載均衡創建在現有網絡結構之上,它提供了一種廉價、有效、透明的方法擴展網絡設備和服務器的帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。

主流的負載均衡開源軟件有LVS、keepalived、haproxy、nginx等

其中LVS屬於4層(OSI7層模型),nginx屬於7層,haproxy既能夠認爲是4層,也能夠當作7層使用,keepalived的負載均衡功能其實就是lvs。

lvs這種4層的負載均衡是能夠分發除80外的其餘端口通訊的,好比MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種

相比較來講,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求


5、 LVS介紹

LVS是由國人章文嵩開發的一款4層負載均衡開源軟件

流行度不亞於apache的httpd,基於TCP/IP作的路由和轉發,穩定性和效率很高

LVS最新版本基於Linux內核2.6,有好多年不更新了

LVS有三種常見的模式:NAT、DR、IP Tunnel

LVS架構中有一個核心角色叫作分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)

lvs三種模式

1.LVS NAT模式

  • 這種模式藉助iptables的nat表來實現,

  • 用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去,

  • rs須要設定網關爲分發器的內網ip。

  • 用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸,在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源

2.LVS IP Tunnel模式

  • 這種模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip

  • 客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上

  • rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身

3.LVS DR模式

  • 這種模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip

  • 和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址

  • rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身


6、 LVS調度算法

針對不一樣的網絡服務需求和服務器配置,IPVS調度器實現了以下八種負載調度算法:

輪叫(Round Robin)
調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。

加權輪叫(Weighted Round Robin)
調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

最少連接(Least Connections)
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。

加權最少連接(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

基於局部性的最少連接(Locality-Based Least Connections)
"基於局部性的最少連接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務 器,將請求發送到該服務器。

帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)
"帶複製的基於局部性最少連接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的 程度。

目標地址散列(Destination Hashing)
"目標地址散列"調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

源地址散列(Source Hashing)
"源地址散列"調度算法根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。


7、 LVS NAT模式搭建

實驗環境

三臺虛擬機

分發器,也叫調度器(簡寫爲dir)

lvs-lb
內網:192.168.2.100(僅主機),外網:192.168.1.30
lvs-rs1
內網:192.168.2.110(僅主機)
lvs-rs2
內網:192.168.2.120(僅主機)

1.在三臺虛擬機上停用firewalld,啓用iptables

//停用firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
//若是未安裝iptables,用yum安裝一下
yum -y install iptables-services
systemctl start  iptables-services
//清空、保存規則
iptables -F;
service iptables save

2.在分發器上安裝ipvsdam

[root@localhost ~]# yum install -y ipvsdam

3.在分發器上編寫腳本,放置在/usr/local/sbin, 賦予執行權限後執行

#! /bin/bash
# director 服務器上開啓路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意區分網卡名字
echo 0 > /proc/sys/net/ipv4/conf/ens32/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens34/send_redirects
# director 設置nat防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.126.0/24 -o ens32 -j MASQUERADE
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.1.30:80
$IPVSADM -a -t 192.168.1.30:80 -r 192.168.126.110:80 -m -w 1
$IPVSADM -a -t 192.168.1.30:80 -r 192.168.126.120:80 -m -w 1

4.啓動ipvsadm.service服務

//啓動ipvsadm.service 報錯
[root@localhost ~]# systemctl start ipvsadm.service 
Job for ipvsadm.service failed because the control process exited with error code. See "systemctl status ipvsadm.service" and "journalctl -xe" for details.
[root@localhost ~]# systemctl status ipvsadm.service
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2018-07-22 23:35:17 CST; 17s ago
  Process: 15928 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=1/FAILURE)
 Main PID: 15928 (code=exited, status=1/FAILURE)
//查看日誌,發現是沒有/etc/sysconfig/ipvsadm
chrony/                 lastlog                 secure                  vmware-vmsvc.log        
[root@localhost ~]# tail /var/log/messages 
Jul 22 23:29:24 localhost kernel: IPVS: ipvs loaded.
Jul 22 23:29:24 localhost kernel: IPVS: [wlc] scheduler registered.
Jul 22 23:30:01 localhost systemd: Started Session 11 of user root.
Jul 22 23:30:01 localhost systemd: Starting Session 11 of user root.
Jul 22 23:35:17 localhost systemd: Starting Initialise the Linux Virtual Server...
Jul 22 23:35:17 localhost bash: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory
Jul 22 23:35:17 localhost systemd: ipvsadm.service: main process exited, code=exited, status=1/FAILURE
Jul 22 23:35:17 localhost systemd: Failed to start Initialise the Linux Virtual Server.
Jul 22 23:35:17 localhost systemd: Unit ipvsadm.service entered failed state.
Jul 22 23:35:17 localhost systemd: ipvsadm.service failed.
//解決
[root@localhost ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm.service

5.測試

//當前策略
~                                                                                                                             
[root@localhost ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http wlc
  -> 192.168.126.110:http         Masq    1      1          0         
  -> 192.168.126.120:http         Masq    1      2          0         
  
//從另一臺主機192.168.1.5上測試
I am lvs-rs2!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs2!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs1!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs2!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs1!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs2!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs1!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs2!!!
[root@lnmp-server ~]# curl 192.168.1.30
I am lvs-rs1!!!
相關文章
相關標籤/搜索