1. LVS
1.1 LVS 原理
1.1.1 LVS 集群中的 IP 負載均衡技術
詳情參考:LVS 集群中的 IP 負載均衡技術 @章文嵩博士
1.1.2 LVS 集群的負載調(diào)度
查看 ipvsadm 版本:
# ipvsadm --version
ipvsadm v1.28 2015/02/09 (compiled with popt and IPVS v1.2.1)
2. Keepalived
2.1 Keepalived 架構(gòu)
2.2 Keepalived 安裝及配置
2.2.1 查詢本機網(wǎng)絡接口
查詢本機 IP
地址命令:ip addr list
呕屎、ip addr show
颁湖、ip a
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
link/ether 02:a2:63:89:23:50 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.62/24 brd 10.0.0.255 scope global dynamic eth0
valid_lft 3505sec preferred_lft 3505sec
inet6 fe80::a2:63ff:fe89:2350/64 scope link
valid_lft forever preferred_lft forever
# 配置并啟動網(wǎng)絡接口
# 配置虛擬IP
# 將網(wǎng)絡接口 eth0:1 的 IP 地址設置為:172.27.0.10,子網(wǎng)掩碼設置為:255.255.255.255,
# up:啟動網(wǎng)絡接口
# down:關閉網(wǎng)絡接口
ifconfig eth0:1 172.27.0.10 broadcast 172.27.0.10 netmask 255.255.255.255 up
# 關閉網(wǎng)絡接口
ifconfig eth0:1 172.27.0.10 broadcast 172.27.0.10 netmask 255.255.255.255 down
2.2.2 修改系統(tǒng)配置文件
2.2.2.1 編輯系統(tǒng)配置文件:vim /etc/sysctl.conf
前端 LVS 配置:
# Uncomment the next line to enable packet forwarding for IPv4
# 開啟 IPv4 數(shù)據(jù)包轉(zhuǎn)發(fā)功能
net.ipv4.ip_forward=1
# 允許綁定非本機的IP
net.ipv4.ip_nonlocal_bind=1
參考:
后端 Server 配置:
# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
2.2.2.2 使配置文件生效
每次系統(tǒng)啟動時趾徽,初始化腳本 /etc/rc.d/rc.sysinit 會讀取 /etc/sysctl.conf 文件的內(nèi)容啥供,所以修改此文件后每次系統(tǒng)重啟時都會開啟 IP 轉(zhuǎn)發(fā)功能忘伞。但是只修改 sysctl 文件不會馬上生效,如果需要使修改馬上生效可以執(zhí)行下面的命令:
# 使配置文件馬上生效
$ sudo sysctl -p
net.ipv4.ip_forward = 1
2.2.2.3 驗證配置是否生效
# 查看 ip_forward 文件內(nèi)容微峰,默認值 0 表示禁止 IP 轉(zhuǎn)發(fā)舷丹,1 表示開啟 IP 轉(zhuǎn)發(fā)功能。
$ cat /proc/sys/net/ipv4/ip_forward
1
$ cat /proc/sys/net/ipv4/ip_nonlocal_bind
1
2.2.3 下載安裝 Keepalived
# 1. 更新 apt 軟件包
apt-get update && apt-get upgrade
# 2. 安裝相關軟件包
apt-get install -y libssl-dev openssl libpopt-dev
apt install jq
apt install awscli
# 3. 下載安裝 Keepalived
apt-get install keepalived
# 4. 查看 Keepalived 安裝版本
keepalived --version
Keepalived v1.3.9 (10/21,2017)
...
2.3 Keepalived 配置文件詳解
??????
Keepalived 配置文件官方文檔:http://www.keepalived.org/manpage.html
- keepalived 的配置文件路徑為:/etc/keepalived/keepalived.conf
- Keepalived 的配置文件都是以塊(block)的形式組織的蜓肆,每個塊的內(nèi)容都包含在 {} 中颜凯,以 “#” 和 “!” 開頭的行都是注釋。
- 根據(jù) Keepalived 配置文件所實現(xiàn)的功能症杏,可以將配置分為三類:
- 全局配置(Global Configuration)装获;
- VRRPD 配置;
- VRRP 同步組配置厉颤;
- VRRP 實例配置穴豫;
- LVS 配置;
# Define the script used to check if haproxy is still working
# 檢查 haproxy 是否正常運行的腳本
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
2.3.1 Keepalived 的全局配置
全局配置就是對整個 Keepalived 都生效的配置。
# Configuration File for keepalived
# ------ 全局配置 ------
# 報警郵件通知設置
# 全局配置以 “global_defs” 作為標識符
global_defs {
notification_email {
your@emailaddress.com # 報警郵件地址精肃,可以設置多個秤涩,每行一個。
# 開啟郵件報警需要開啟本機的 Sendmail 服務司抱。
}
notification_email_from loadb01@domain.ext # 報警郵件發(fā)送的地址筐眷。
smtp_server 127.0.0.1 # 郵件的 SMTP 服務器地址。
smtp_connect_timeout 15 # 連接 SMTP 服務器的超時時間习柠。
router_id lVS_DEVER # 運行 Keepalived 服務器的一個標識符匀谣,
# 是發(fā)郵件時顯示在郵件主題中的信息。
}
?
2.3.2 Keepalived 的 VRRPD 配置
VRRPD 配置是 Keepalived 所有配置的核心资溃,主要用來實現(xiàn) Keepalived 的高可用功能武翎。
從結(jié)構(gòu)上來看,VRRPD 配置可以分為 VRRP 同步組配置 和 VRRP 實例配置溶锭。
2.3.2.1 VRRP 同步組配置
同步組是相對于多個 VRRP 實例而言的宝恶,在多個 VRRP 實例的環(huán)境中,每個 VRRP 實例所對應的網(wǎng)絡環(huán)境會有所不同趴捅,假設一個實例處于網(wǎng)段A垫毙,另一個實例處于網(wǎng)段B,而如果 VRPD 只配置了A網(wǎng)段的檢測拱绑,那么當B網(wǎng)段主機出現(xiàn)故障時综芥, VRRPD 會認為自身仍處于正常狀態(tài),進而不會進行主備節(jié)點的切換欺栗,這樣問題就出現(xiàn)了毫痕。同步組就是用來解決這個問題的征峦,將所有 VRRP 實例都加入到同步組中迟几,這樣任何一個實例出現(xiàn)問題,都會導致 Keepalived進行主備切換栏笆。
vrrp_sync_group G1 {
# G1 同步組包含 VI_1类腮、VI_2、VI_5 三個 VRRP 實例
group {
# name of the vrrp_instance (see below)
# Set of VRRP_Instance string
VI_1
VI_2
VI_5
}
# to MASTER transition
# 指定當 Keepalived 進入 Master 狀態(tài)時要執(zhí)行的腳本蛉加,
# 這個腳本可以是一個狀態(tài)報警腳本蚜枢,也可以是一個服務管理腳本。
# Keepalived 允許腳本傳入?yún)?shù)针饥,因此靈活性很強厂抽。
notify_master "usr/local/bin/vrrp.mast arg1 arg2"
# to BACKUP transition
# 指定當 Keepalived 進入 Backup 狀態(tài)時要執(zhí)行的腳本,
# 這個腳本可以是一個狀態(tài)報警腳本丁眼,也可以是一個服務管理腳本筷凤。
notify_backup "usr/local/bin/vrrp.back arg1 arg2"
# FAULT transition
# 指定當 Keepalived 進入 Fault 狀態(tài)時要執(zhí)行的腳本
notify_fault "usr/local/bin/vrrp.fault arg1 arg2"
# executed when stopping vrrp
# 指定 Keepalived 程序終止時需要執(zhí)行的腳本。
notify_stop "usr/local/bin/vrrp.stop arg1 arg2"
}
vrrp_sync_group G2 {
# G2 同步組包含 VI_3、VI_4 三個 VRRP 實例
group {
VI_3
VI_4
}
}
2.3.2.2 VRRP 實例配置
VRRP 實例配置——配置 Keepalived 的高可用功能藐守。
VRRP 實例段主要用來配置節(jié)點角色(主或從)挪丢、實例綁定的網(wǎng)絡接口、節(jié)點間驗證機制卢厂、集群服務 IP 等乾蓬。
從調(diào)度器的配置與主調(diào)度器基本相同,也包括全局參數(shù)慎恒、熱備參數(shù)任内、服務器池配置,只需要調(diào)整 router_id融柬、state族奢、prority 參數(shù)即可,其余內(nèi)容完全相同丹鸿,配置完成以后重啟keepalived服務越走。
# ------ 虛擬服務器配置 ------
# vrrp 實例配置
# VRRP 配置以 “vrrp_instance” 作為標識符
vrrp_instance VI_1 {
state MASTER # 指定 Keepalived 的角色。
# MASTER 表示此主機是主服務器靠欢,Backup 表示此主機是備用服務器廊敌。
# 因此,在另一臺服務器上設置該值為 BACKUP门怪。
interface eth0 # 指定 HA 監(jiān)測網(wǎng)絡的接口骡澈。
virtual_router_id 51 # 虛擬路由ID(0-255),在一個VRRP實例中主備服務器ID必須一樣
priority 101 # 定義節(jié)點優(yōu)先級掷空。set this to 100 on the other machine
advert_int 1 # 用于設定 MASTER 與 BACKUP 主機之間同步檢查的時間間隔肋殴,單位是秒。
mcast_src_ip <IPADDR> # 發(fā)送多播包的地址坦弟。
garp_master_delay 10
smtp_alert # Activate email notifications
# 設置一些額外的網(wǎng)絡監(jiān)控接口
track_interface {
eth0
eth1
}
# 設定節(jié)點間通信驗證類型和密碼
authentication {
auth_type PSAA # 驗證類型护锤,有 PASS 和 AH 兩種模式。
auth_pass myPassw0rd # Set this to some secret phrase
}
# The virtual ip address shared between the two loadbalancers
# 虛擬 IP 地址
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.0.200
192.168.200.17 dev eth1
192.168.200.18 dev eth2
}
# Use the script above to check if we should fail over
track_script {
chk_haproxy
}
nopreempt # 設置高可用集群中的不搶占功能酿傍。
# nopreempt 表示主節(jié)點故障恢復后不再切回到主節(jié)點烙懦,讓服務一直在備用節(jié)點下工作,直到備用節(jié)點出現(xiàn)故障才會進行切換赤炒。
preemtp_delay 300 # 設置搶占延時時間氯析,單位是秒。
}
2.3.3 Keepalived 的 LVS 配置
由于 Keepalived 屬于 LVS 的擴展項目莺褒,因此掩缓,Keepalived 可以與 LVS無縫整合,輕松搭建一套高性能的負載均衡集群系統(tǒng)遵岩。
LVS 段的內(nèi)容有兩部分組成:
- real_server 段你辣;
- 健康檢測段;
# 虛擬服務器配置
# LVS 段的配置以“virtual_server”作為開始標識。
virtual_server 192.168.80.200 80 { # 設置虛擬 IP 地址和服務端口
delay_loop 6 # 設置健康檢查的時間間隔绢记,單位是秒
lb_kind DR # 設置 LVS IP負載均衡模式扁达,有NAT、TUN蠢熄、DR三個模式
lb_algo rr # 設置 LVS 負載調(diào)度算法跪解,rr
persistence_timeout 50 # 會話保持時間,單位是秒签孔。
persistence_granularity <NETMASK> # 子網(wǎng)掩碼叉讥。表示持久連接的粒度。默認是255.255.255.255
protocol TCP # 指定轉(zhuǎn)發(fā)協(xié)議類型饥追。有 TCP 和 UDP 兩種選項图仓。
ha_suspend # 節(jié)點狀態(tài)從 Master 到 Backup 切換時,暫不啟用 real server 節(jié)點的健康檢查但绕。
virtualhost <string> # 健康檢查時救崔,指定 Web 服務器的虛擬主機地址。
sorry_server <IPADDR> <PORT> # 當所有 real server 失效后捏顺,指定的 Web 服務器的虛擬主機地址六孵。
# -------- real_server 段配置 --------
real_server 192.168.80.102 80 { # 指定 real server1 的IP地址
weight 3 # 配置節(jié)點權(quán)值,數(shù)字越大權(quán)重越高
inhibit_on_faliure # 在檢測到 real_server 節(jié)點失效后幅骄,把它的 “Weight” 值設置為0劫窒,而不是從 IPVS 中刪除。
notify_up <STRING> | <QUOTED-STRING> # 在檢測到 real_server 節(jié)點服務處于 UP 狀態(tài)后執(zhí)行的腳本
notify_down <STRING> | <QUOTED-STRING> # 在檢測到 real_server 節(jié)點服務處于 DOWN 狀態(tài)后執(zhí)行的腳本
# -------- 健康檢測段配置 -------
TCP_CHECK { # 配置為 TCP_CHECK 檢測方式
connect_port 80 # 健康檢查的端口
connect_timeout 10 # 無響應超時時間拆座。單位是秒主巍。
retry 3 # 重試次數(shù)
delay_before_retry 3 # 重試間隔
}
}
real_server 192.168.80.103 80 { # 指定 real server2 的IP地址
weight 3 # 配置節(jié)點權(quán)值,數(shù)字越大權(quán)重越高
TCP_CHECK {
connect_port 80
connect_timeout 10
retry 3
delay_before_retry 3
}
}
}
2.4 啟動與停止服務
# 方式一
/etc/init.d/keepalived status # 查看狀態(tài)
/etc/init.d/keepalived stop # 停止
/etc/init.d/keepalived start # 啟動
# 方式二
sudo service keepalived status
sudo service keepalived start
sudo service keepalived stop
sudo service keepalived restart
2.5 測試
2.5.1 查看服務進程狀態(tài):ip
必須要有三個keepalived的進程挪凑,這三個分別是keepalived父進程孕索,vrrp子進程、check子進程岖赋;兩個子進程都被系統(tǒng)watchlog看管檬果,兩個子進程各自負責復雜自己的事
2.5.2 其次ip addr
查看虛擬 ip 是否創(chuàng)建成功,ping 虛擬 ip 是否相通唐断。
2.5.3 查看集群中服務器ip信息:ipvsadm -ln
2.5.4 查看 Keepalived 日志:cat /var/log/syslog | grep Keepalived
# 查看 ipvsadm 版本
$ ipvsadm --version
ipvsadm v1.28 2015/02/09 (compiled with popt and IPVS v1.2.1)
# 查看集群中服務器ip信息
# -l、-list:列出虛擬服務器表
# -n:IP 地址和端口號將以數(shù)字格式打印杭抠,而不是作為主機名和服務分別打印脸甘,這是默認設置。
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.100:80 lc persistent 60
-> 10.0.0.102:80 Route 3 0 0
-> 10.0.0.202:80 Route 3 0 0
# -c:連接輸出偏灿。使用此選項的 list 命令將列出當前的 IPVS 連接
ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 00:48 NONE 111.187.40.59:0 10.0.0.138:80 10.0.0.214:80
TCP 00:59 SYN_RECV 111.187.40.59:5196 10.0.0.138:80 10.0.0.214:80
TCP 00:59 SYN_RECV 111.187.40.59:5197 10.0.0.138:80 10.0.0.214:80
TCP 00:59 SYN_RECV 111.187.40.59:5198 10.0.0.138:80 10.0.0.214:80
# 查看
arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.0.202 ether 02:fb:fd:00:12:ae C eth0
10.0.0.1 ether 02:06:a0:5b:39:d2 C eth0
10.0.0.2 ether 02:06:a0:5b:39:d2 C eth0
10.0.0.102 ether 02:2b:7d:01:b6:68 C eth0
10.0.0.199 ether 02:63:16:9e:f2:08 C eth0
10.0.0.100 (incomplete) eth0
2.5.5 驗證 VIP 漂移
systemctl stop keepalived.service
2.5.6 測試抓取數(shù)據(jù)包
tcpdump -i eth0 -p -n -vv port 80
AWS 下的部署實例
參考
- AWS 部署 keepalived實戰(zhàn)
- 如何在AWS中正確使用Keepalived
- Assign a floating (secondary) IP address in AWS VPC
- Leveraging Multiple IP Addresses for Virtual IP Address Fail-over in 6 Simple Steps
在私有環(huán)境中部署keepalived本身并沒有好說的丹诀,但是aws中存在諸多限制,其中三個需要明確指出的:
-
VRRP協(xié)議的組播被禁止,也就是說keepalived需要調(diào)整心跳的通知方式铆遭,修改/etc/keepalived/keepalived.conf配置文件中的通知為單播模式硝桩,一般配 web 服務器上數(shù)量較少,所以也不會損失太多網(wǎng)絡帶寬枚荣。
unicast_src_ip 172.*.*.1 # 本機IP unicast_peer { 172.*.*.124 # 備用節(jié)點 IP }
配置了VIP(floating ip)以后碗脊,AWS的VPC并不知道,嘗試下arp也學習不到該vip的mac地址橄妆,所以必須要通過配置ENI(Elastic Network Interface彈性網(wǎng)絡接口)使得該VIP可達衙伶。
然而當你關了Master以后,ENI的網(wǎng)絡配置并不會自動切換漂移IP害碾,為了故障切換矢劲,我利用切換VIP的通知機制,通過調(diào)用添加和移除private-ip-addresses的方式達到漂移IP的效果慌随。下面詳細介紹芬沉。
還要新建一個 IAM 賬戶,以允許運行 AWS CLI 命令阁猜,并在服務器上進行注冊花嘶。
aws configure
綁定輔助私有IP ??????
亞馬遜云雖然不允許廣播 ARP,但可以用命令行指定網(wǎng)卡(ENI)的 Secondary-private-ip-address蹦漠。這個命令的具體形式如下:
AWS CLI Command Reference:assign-private-ip-addresses
# 將一個或多個輔助私有 IP 地址分配給指定的網(wǎng)絡接口椭员。
# ENI:網(wǎng)卡實例 ID
# VIP:虛擬 IP 地址
aws ec2 assign-private-ip-addresses \
--network-interface-id $ENI \
--private-ip-addresses $VIP \
--allow-reassignment
# 示例:指定一個IP地址(10.0.0.100)作為網(wǎng)卡的私有IP地址
aws ec2 assign-private-ip-addresses --network-interface-id eni-0a8a8f03710ecbb9e --private-ip-addresses 10.0.0.100 --allow-reassignment
aws ec2 assign-private-ip-addresses --network-interface-id eni-0eff36fde0c99958e --private-ip-addresses 10.0.0.100 --allow-reassignment
keepalived 配置:
notify_master "/home/keepalived/scripts/mysql_be_master.sh 172.*.*.201 eni-*"
彈性IP配置的腳本文件
add_eip.sh
作用:分離彈性 ip,并將彈性 ip 綁定到自身網(wǎng)口上
授權(quán):chmod -R 711 /etc/keepalived/scripts
#/bin/bash
EIP=13.*.*.201 # 彈性 ip 地址(公網(wǎng) ip)
INSTANCE_ID=i-0b2d************* #此服務器(EC2)的實例的 id
aws ec2 disassociate-address --public-ip $EIP
aws ec2 associate-address --public-ip $EIP --instance-id $INSTANCE_ID
del_eip.sh
授權(quán) chmod +x ./add_eip.sh chmod -R 711 add_eip.sh
#/bin/bash
EIP=13.*.*.201 #彈性 ip 地址(公網(wǎng) ip)
INSTANCE_ID=i-0b2d************* #備服務器(EC2)的實例的 id
aws ec2 disassociate-address --public-ip $EIP
aws ec2 associate-address --public-ip $EIP --instance-id $INSTANCE_ID
# 取消關聯(lián)需要傳關聯(lián) ID笛园,而不是分配 ID隘击。
aws ec2 disassociate-address --association-id $ASSOCIATION_ID
aws ec2 disassociate-address --association-id eipassoc-09fe640e36c9d53b1
把外網(wǎng) EIP 作為 VIP,先釋放研铆,再關聯(lián)給一個網(wǎng)卡的輔助私有IP地址:
aws ec2 disassociate-address --public-ip $EIP
aws ec2 associate-address \
--allocation-id eipalloc-09ce336dc7a1e8da7 \ # 分配 ID
--network-interface-id eni-0a8a8f03710ecbb9e \
--private-ip-address 10.0.0.100 \
--allow-reassociation
# 關聯(lián)彈性公網(wǎng) IP 到 網(wǎng)卡
aws ec2 associate-address --allocation-id eipalloc-09ce336dc7a1e8da7 --network-interface-id eni-0a8a8f03710ecbb9e --private-ip-address 10.0.0.100 --allow-reassociation
# 根據(jù)實例 ID 找到網(wǎng)卡 ID
aws ec2 describe-instances \
--instance-ids i-0260f608cf698958c | \
jq -r \
'.Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId'
# 實例
aws ec2 describe-instances --instance-ids i-0260f608cf698958c | jq -r '.Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId'
eni-0a8a8f03710ecbb9e
配置文件
EC2_01
# Keepalived的全局配置
global_defs {
router_id LVS_Master
# 通知腳本設置
script_user root
enable_script_security
}
# VRRP的實例Group_LVS_1配置
vrrp_instance Group_LVS_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
track_interface {
eth0
}
# AWS 上 VRRP 協(xié)議的組播被禁止埋同,因此這里配置心跳通知為單播模式
unicast_src_ip 10.0.0.36
unicast_peer {
10.0.0.56
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100
}
# 切換虛擬 IP 的腳本文件
notify_master "/etc/keepalived/scripts/assign_private_ip.sh 18.223.129.244 10.0.0.100 i-0260f608cf698958c"
notify_backup "/etc/keepalived/scripts/unassign_private_ip.sh 18.223.129.244 10.0.0.100 i-0260f608cf698958c"
}
# Virtual Server 的配置 for Real Service
virtual_server 10.0.0.100 80 {
delay_loop 5
lb_algo lc
lb_kind DR
persistence_timeout 60
protocol TCP
# Real Server 1 的配置
real_server 10.0.0.80 80 {
weight 3
inhibit_on_failure
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
# Real Server 2 的配置
real_server 10.0.0.194 80 {
weight 3
inhibit_on_failure
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
EC2_02
# Keepalived的全局配置
global_defs {
router_id LVS_Master
# 通知腳本設置
script_user root
enable_script_security
}
# VRRP的實例Group_LVS_1配置
vrrp_instance Group_LVS_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
track_interface {
eth0
}
# AWS 上 VRRP 協(xié)議的組播被禁止,因此這里配置心跳通知為單播模式
unicast_src_ip 10.0.0.56
unicast_peer {
10.0.0.36
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100
}
# 切換虛擬 IP 的腳本文件
notify_master "/etc/keepalived/scripts/assign_private_ip.sh 18.223.129.244 10.0.0.100 i-0f74aba2dc5e49679"
notify_backup "/etc/keepalived/scripts/unassign_private_ip.sh 18.223.129.244 10.0.0.100 i-0f74aba2dc5e49679"
}
# Virtual Server 的配置 for Real Service
virtual_server 10.0.0.100 80 {
delay_loop 5
lb_algo lc
lb_kind DR
persistence_timeout 60
protocol TCP
# Real Server 1 的配置
real_server 10.0.0.80 80 {
weight 3
inhibit_on_failure
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
# Real Server 2 的配置
real_server 10.0.0.194 80 {
weight 3
inhibit_on_failure
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
Server 服務器腳本
#!/bin/bash
# 配置realserver的lo和運用noarp
# chmod 755 /usr/local/sbin/server
# 執(zhí)行server棵红,啟動realserver的LVS服務凶赁,/etc/init.d/lvsrs start
VIP=10.0.0.100
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
#end
/etc/init.d/lvsrs start
#!/bin/bash
# 配置realserver的lo和noarp
# chmod 755 /etc/init.d/lvsrs
# 執(zhí)行server,啟動realserver的LVS服務逆甜,/etc/init.d/lvsrs start
VIP=10.0.0.100
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
參考
1. LVS
- LVS 項目中文文檔@章文嵩 ??????
- LVS 中文站點
- 簡書:LVS 原理介紹
- cnblogs:使用 LVS 實現(xiàn)負載均衡原理及安裝配置詳解
- LVS 原理詳解及部署之二:LVS 原理詳解(3 種工作方式 8 種調(diào)度算法)
- LVS 集群:兩種 VS/DR 模式
- LVS 集群:ipvsadm 使用及 VS/NAT 實現(xiàn)
- InfoQ:LVS 在大規(guī)模網(wǎng)絡環(huán)境中的應用
2. Keepalived
- keepalived 官網(wǎng)
- GitHub: Keepalived
- 簡書:Keepalived in AWS
- 51CTO:aws ec2 keepalived 的高可用構(gòu)建
- CSDN:AWS 部署 keepalived 實戰(zhàn)
- 在 AWS 上部署 keepalived
3. 第三方博客虱肄、文章
- 【大型網(wǎng)站技術實踐】初級篇:借助LVS+Keepalived實現(xiàn)負載均衡
- 簡書:lvs+keepalived群集配置
- LVS+Keepalived實現(xiàn)高可用群集
- LVS Keepalived雙機高可用負載均衡搭建
- Ubuntu安裝keepalived
- Setting up keepalived on Ubuntu (load balancing using HAProxy on Ubuntu part 2)
- LVS負載均衡在Ubuntu環(huán)境下部署詳解
- Nginx/LVS/HAProxy 負載均衡軟件的優(yōu)缺點詳解(轉(zhuǎn)自云棲社區(qū))
- 深入理解負載均衡【Tip:里面有一張負載均衡雙機熱備GIF圖可以看看】
- 雙機熱備架構(gòu)圖:https://ask.qcloudimg.com/http-save/yehe-1305760/28jixn9vop.gif
- 阿里云文檔:ECS 做負載均衡需要用戶做額外的配置嗎?
- 阿里云文檔:Linux 實例常用內(nèi)核網(wǎng)絡參數(shù)介紹與常見問題處理
- 阿里云文檔:ping 丟包或不通時鏈路測試說明