利用 LVS + KeepAlived 架構,建構 Load Balancer
LVS 官方文檔:http://www.linuxvirtualserver.org/zh/lvs1.html
LVS 叢集技術:http://zh.linuxvirtualserver.org/node/95
keepalived 官網:http://www.keepalived.org/index.html
環境準備
項 | 内容 |
---|---|
Virtual IP (VIP) | 172.16.0.245 |
Load Balancer | 172.16.0.238 |
Real Server1 | 172.16.0.244 |
Real Server2 | 172.16.0.246 |
系統必要配置
systemctl stop firewalld
systemctl disable firewalld
yum install -y net-tools
yum install -y vim bash-completion
- 關閉叢集内每台節點的防火牆,禁用 SELinux
- 安裝 net-tools 軟體包
- 安裝 vim 及 bash-completion 軟體包(可選)
叢集軟體部署
LVS 由兩部分組成,IPVS 子產品及IPVS 管理工具
lsmod | grep ip_vs
yum install -y ipvsadm
ipvsadm 具體使用說明可通過 ipvsadm --help 指令檢視
yum install -y keepalived
修改 virtual_ipaddress 部分,将 eth0 修改成你具體的網卡接口
vrrp_instance VI_1 {
...
interface eth0
...
virtual_ipaddress {
172.16.0.245 dev eth0
}
}
配置 virtual_server 及 real_server 部分:
virtual_server 172.16.0.245 80 {
delay_loop 6
lb_algo rr // 算法采用 (Round Robin, rr) 輪循算法進行 load balance
lb_kind DR // NAT, DR, TUNNEL 模式中的 DR (直接路由) 模式
nat_mask 255.255.255.0
# persistence_timeout 50 // 注釋掉該行,意思是保持單台 real_server 的長連接配接時間
protocol TCP
real_server 172.16.0.244 80 {
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.0.246 80 {
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl restart keepalived
systemctl enable keepalived
ipvsadm -l -n
初始狀态
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.0.245:80 rr
-> 172.16.0.244:80 Route 1 0 0
-> 172.16.0.246:80 Route 1 0 0
此時說明 lvs 已經配置好了,提供 172.16.0.245 VIP 通路,後端兩台伺服器 172.16.0.244 及 172.16.0.246 提供實際服務,使用的是 rr 輪循算法進行請求配置設定。
- LVS 已經被編譯進核心,應用時自動加載,不需要手動加載
- 在 Load Balancer 機器上安裝 ipvs 管理工具 ipvsadm
- 在 Load Balancer 機器上安裝 keepalived 軟體
- 配置
檔案/etc/keepalived/keepalived.conf
- 啟動 keepalived 服務
- 檢查 lvs 狀态
配置 Real Server
根據文檔,兩台 real server 需要進行核心參數調整,達到 ARP hidden,以下操作需要在每台 real server 上執行
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
核心參數生效
sysctl -p
修改
/etc/sysconfig/network-scripts/ifcfg-lo
配置檔案,添加 VIP 資訊:
IPADDR0=172.16.0.245
NETMASK0=255.255.255.255
重新開機網絡
systemctl restart network
- 修改
文檔,添加如下内容:/etc/sysctl.conf
- 将 lo 回環口配成 VIP
用戶端測試
在網絡内其他機器執行:
curl http://172.16.0.245
轉載于:https://my.oschina.net/91devel/blog/2878273