第二十八課 Linux集群架構(一)
目錄
一、 集群介紹
二、 keepalived介紹
三、 用keepalived配置高可用集群
四、 負載均衡集群介紹
五、 LVS介紹
六、 LVS調度算法
七、 LVS NAT模式搭建
一、 集群介紹
集群聽起來好像是一個很高大上的技術,其實不是的,集群其實就是一堆計算機的集合,給用戶提供同一個服務的一組計算機,就稱之為集群,對於用戶而言好像就是一台計算機提供的服務,集群主要分為三大類。
LB 負載均衡集群
負載均衡集群主要是提高服務的響應能力的,比如說某服務器的並發響應能力是100個,這個時候經常有人反映說連不上服務器,這個時候解決方案一般有兩種:一、升級硬件,升級硬件顯然不是很好的解決方案,假如說升級硬件之后過了一段時間由於業務量的加大,服務器又負載不起了怎么辦呢, 二、將現有空閑低配的設備組合起來做成一個具有高並發的負載均衡集群,多台計算機同時分攤負載用戶的請求,這樣一來服務器的壓力也就沒有那么大了,這一類的集群具有很好的可伸縮性,可靠性,和成本低廉等好處。
負載均衡集群,需要有一台服務器作為分發器,它負責把用戶的請求分發給后端的服務器處理,在這個集群里,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少為2
HA 高可用性集群
高可用性集群主要是提供7*24小時不間斷服務的,不能說因為一台或幾台服務器的down機而導致無法提供服務的,如果某台down機了,會自動的切換到其他計算機上面工作,從而達到高可用的效果。
高可用集群通常為兩台服務器,一台工作,另外一台作為冗余,當提供服務的機器宕機,冗余將接替繼續提供服務。
HP 高性能集群
高性能集群主要是用於需要大量CPU運算的場景中,比如說天氣預報,國外3D大片的特效制作,等等一系列需要做大量運算的應用。
LB 負載均衡集群又分為硬件級與軟件級的
硬件類的價格比較貴,如:F5, Netscaler等
軟件級的比較常見的有如下幾種:
1.LVS;
2.Haproxy
3.Nignx
HA 高可用集群的解決方案常見的有以下幾種
heartbeat
corosync+openais RHCS
ultramokey
keepalived
HP 高性能集群的解決方案常見的有:bowerful
二、 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協議的。
三、 用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
四、 負載均衡集群介紹
負載均衡建立在現有網絡結構之上,它提供了一種廉價、有效、透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
主流的負載均衡開源軟件有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層的更加靈活,能實現更多的個性化需求
五、 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,所以它會認為是它自己
六、 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)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
七、 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!!!