Keepalived LVS 雙機高可用負載均衡架構

實驗環境:
主機 IP
LVS-1 1.1.1.101
LVS-2 1.1.1.102
Nginx-1 1.1.1.103
Nginx-1 1.1.1.104
VIP 1.1.1.100
在這裏插入圖片描述

Keepalived - LVS 實驗步驟:
1) 配置 Web 服務
可參考Nginx 安裝

Web-1 安裝、配置、啓動

useradd -M -s /sbin/nologin nginx

cd /usr/src/nginx-1.6.0/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

echo 'This is a Web1-Master ' > /usr/local/nginx/html/index.html

nginx

curl 1.1.1.103
This is a Web1-Master
Web-1 設置路由規則
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
Web-1 設置VIP
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=1.1.1.100
NETMASK=255.255.255.255
…………
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=one
重啓 網卡
[root@localhost network-scripts]# systemctl restart netw ork
添加路由
[root@localhost network-scripts]# route add -host 1.1.1.100 dev lo:0
Web-2 安裝、配置、啓動
useradd -M -s /sbin/nologin nginx

cd /usr/src/nginx-1.6.0/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

echo 'This is a Web2-Backup ' > /usr/local/nginx/html/index.html

nginx

curl 1.1.1.104
This is a Web2-Backup
Web-2 設置路由規則
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
Web-2 設置VIP
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=1.1.1.100
NETMASK=255.255.255.255
…………
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=one
重啓網卡
[root@localhost network-scripts]# systemctl restart netw ork

添加路由

[root@localhost network-scripts]# route add -host 1.1.1.100 dev lo:0
2) 配置 LVS
安裝 IPvsadmin 工具
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# yum -y install ipvsadm
開啓路由轉發
[root@localhost ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
LVS-1 創建集羣
[root@localhost ~]# ipvsadm -A -t 1.1.1.100:80 -s rr
LVS-1 添加節點
[root@localhost ~]# ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.103:80 -g -w 1
[root@localhost ~]# ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.104:80 -g -w 1
LVS-1 保存集羣
[root@localhost ~]# ipvsadm -S
-A -t 1.1.1.100:http -s rr
-a -t 1.1.1.100:http -r 1.1.1.103:http -g -w 1
-a -t 1.1.1.100:http -r 1.1.1.104:http -g -w 1
LVS-1 查看集羣
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 1.1.1.100:http rr
-> 1.1.1.103:http Route 1 0 0
-> 1.1.1.104:http Route 1 0 0
LVS-1 測試
[root@localhost ~]# curl 1.1.1.100
This is a Web1-Master
[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup
LVS-2 創建集羣
[root@localhost ~]# ipvsadm -A -t 1.1.1.100:80 -s rr
LVS-2 添加節點
[root@localhost ~]# ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.103:80 -g -w 1
[root@localhost ~]# ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.104:80 -g -w 1
LVS-2 保存集羣
[root@localhost ~]# ipvsadm -S
-A -t 1.1.1.100:http -s rr
-a -t 1.1.1.100:http -r 1.1.1.103:http -g -w 1
-a -t 1.1.1.100:http -r 1.1.1.104:http -g -w 1
LVS-2 查看集羣
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 1.1.1.100:http rr
-> 1.1.1.103:http Route 1 0 0
-> 1.1.1.104:http Route 1 0 0

LVS-2 測試
[root@localhost ~]# curl 1.1.1.100
This is a Web1-Master
[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup

3) 配置 Keepalived

安裝 Keepalived
[root@localhost ~]# tar -zxf keepalived-1.2.13.tar.gz -C /usr/src/
[root@localhost ~]# yum -y install popt-devel kernel-devel openssl-devel
[root@localhost ~]# cd /usr/src/keepalived-1.2.13/
[root@localhost keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernel && make && make install

配置 Keepalived-Master
[root@localhost ~]# vim /etc/keepalived/keepalived.conf

global_defs { # 全局配置
notification_email { # 管理員郵箱
[email protected] # 郵箱地址
[email protected] …………br/>[email protected]
}
notification_email_from [email protected] # 郵件的發送者,可自定義
smtp_server 192.168.200.1 # 郵件服務器 IP地址
smtp_connect_timeout 30 # 郵件服務超時時間
router_id LVS_DEVEL # 節點標識
}

vrrp_instance VI_1 { # VRRP 協議族 ,VI_1 爲name(可自定義)
state MASTER # 節點狀態, master 與 backup
interface ens33 # Keepalived使用的網卡
virtual_router_id 51 # server_id , 主與從 id 要一致
priority 100 # 1-255 優先級
advert_int 1 # 發送 VRRP 通告時間 1s
authentication { # 密碼認證
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虛擬IP地址(漂移地址)
1.1.1.100 # 指定自己的虛擬IP地址
}
}

virtual_server 1.1.1.100 80 { # 對後端進行健康檢查
delay_loop 6 # 健康檢查間隔的時間
lb_algo rr # 調度算法
lb_kind DR # LVS 所使用的 工作模式
nat_mask 255.255.255.0 # 子網掩碼
persistence_timeout 0 # 會話保持時間,也就是說在一定的時間內,會指定一臺服務器進行訪問,不會有輪訓的效果,爲了試驗,該爲零
protocol TCP # LVS 使用的協議

real_server 1.1.1.104 80 { # 真實節點信息
weight 1 # 權重
connect_port 80 # 連接端口
connect_timeout 3 # 超時時間
nb_get_retry 3 # 與節點連接次數
delay_before_retry 3 # 每個連接次數的間隔時間
}

real_server 1.1.1.105 80 { # 真實節點信息
weight 1 # 權重
connect_port 80 # 連接端口
connect_timeout 3 # 超時時間
nb_get_retry 3 # 與節點連接次數
delay_before_retry 3 # 每個連接次數的間隔時間
}
}
啓動服務
[root@localhost ~]# service keepalived start
Reloading systemd: [ 確定 ]
Starting keepalived (via systemctl): [ 確定 ]
配置 Keepalived-Backup
[root@localhost ~]# vim /etc/keepalived/keepalived.conf

global_defs { # 全局配置
notification_email { # 管理員郵箱
[email protected] # 郵箱地址
[email protected] …………br/>[email protected]
}
notification_email_from [email protected] # 郵件的發送者,可自定義
smtp_server 192.168.200.1 # 郵件服務器 IP地址
smtp_connect_timeout 30 # 郵件服務超時時間
router_id LVS_DEVEL # 節點標識
}

vrrp_instance VI_1 { # VRRP 協議族 ,VI_1 爲name(可自定義)
state MASTER # 節點狀態, master 與 backup
interface ens33 # Keepalived使用的網卡
virtual_router_id 51 # server_id , 主與從 id 要一致
priority 100 # 1-255 優先級
advert_int 1 # 發送 VRRP 通告時間 1s
authentication { # 密碼認證
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虛擬IP地址(漂移地址)
1.1.1.100 # 指定自己的虛擬IP地址
}
}

virtual_server 1.1.1.100 80 { # 對後端進行健康檢查
delay_loop 6 # 健康檢查間隔的時間
lb_algo rr # 調度算法
lb_kind DR # LVS 所使用的 工作模式
nat_mask 255.255.255.0 # 子網掩碼
persistence_timeout 0 # 會話保持時間,也就是說在一定的時間內,會指定一臺服務器進行訪問,不會有輪訓的效果,爲了試驗,該爲零
protocol TCP # LVS 使用的協議

real_server 1.1.1.104 80 { # 真實節點信息
weight 1 # 權重
connect_port 80 # 連接端口
connect_timeout 3 # 超時時間
nb_get_retry 3 # 與節點連接次數
delay_before_retry 3 # 每個連接次數的間隔時間
}

real_server 1.1.1.105 80 { # 真實節點信息
weight 1 # 權重 #
connect_port 80 # 連接端口
connect_timeout 3 # 超時時間
nb_get_retry 3 # 與節點連接次數
delay_before_retry 3 # 每個連接次數的間隔時間
}
}
啓動服務
[root@localhost ~]# service keepalived start
Reloading systemd: [ 確定 ]
Starting keepalived (via systemctl): [ 確定 ]
測試
[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup
[root@localhost ~]# curl 1.1.1.100
This is a Web1-Master
[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup
[root@localhost ~]# curl 1.1.1.100
This is a Web1-Master
[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup
[ 確定 ]
Starting keepalived (via systemctl): [ 確定 ]

  • 測試

[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup 
[root@localhost ~]# curl 1.1.1.100
This is a Web1-Master 
[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup 
[root@localhost ~]# curl 1.1.1.100
This is a Web1-Master 
[root@localhost ~]# curl 1.1.1.100
This is a Web2-Backup 

ps:這裏的lvs其實才是對外直接提供服務的應用,這裏的兩個lvs之所以能切換是因爲兩臺lvs機器對外包樓的是虛擬ip(vip),在切換的時候,keepalived會把備機的vip綁定好,主機上的vip也會被解綁定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章