一、 簡介
(1)、LVS簡介
LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 用現在的觀點來看就是個4層(傳輸層tcp/udp)的負責均衡器。 它是一個由章文嵩博士發起的自由軟件項目,現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。
LVS目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
官方地址:http://www.linuxvirtualserver.org
http://www.linuxvirtualserver.org/zh/
(2)、Keepalived簡介
Keepalived是一個用C語言編寫的路由軟件。該項目的主要目標是爲Linux系統和基於Linux的基礎架構提供簡單而強大的負載均衡和高可用性設施。
二、 實驗環境
(1) 該測試爲LVS(DR模式)+Keepalived+Web(Nginx)HA/LB架構
(2) 測試服務器如下:
序號 | IP | 名稱 | 安裝軟件 |
---|---|---|---|
1 | 192.168.100.51 | LVS(主) Centos 7.3 | Keepalived ipvsadm |
2 | 192.168.100.52 | LVS(備) Centos 7.3 | Keepalived ipvsadm |
3 | 192.168.100.53 | Web(主) Centos 7.3 | Nginx |
4 | 192.168.100.54 | Web(備) Centos 7.3 | Nginx |
5 | 192.168.100.50 | VIP | |
6 | 192.168.100.127 | 測試PC(Windows 10) |
備註:測試已關閉防火牆及selinux
三、 實驗
(1) 安裝ipvsadm、keepalived(以下操作在LVS(主)、LVS(備)上操作):
# yum install –y ipvsadm keepalived
# vi /etc/keepalived/keepalived.conf #修改配置文件
(2) 配置LVS(以下操作在LVS(主)、LVS(備)上操作):
[root@t1 ~]# vi /etc/sysctl.conf
#打開轉發
net.ipv4.ip_forward =0 -> net.ipv4.ip_forward=1
#讓配置生效
[root@t1 ~]# sysctl –p
(3) 配置keepalived以下操作在LVS(主)、LVS(備)上操作):
[root@t1 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.100.49 #因未配置smtp,這裏沒配置
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict #若ping不同vip,可以註釋改項
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #LVS(主)爲MASTER,LVS(備)爲BACKUP
interface ens33 #物理網卡名稱
virtual_router_id 51 #主備需一致
priority 150 # 優先級,主大於備
advert_int 1 #心跳頻率
authentication { #主備一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.50/32 dev ens33 #虛擬VIP
}
}
virtual_server 192.168.100.50 80 {
delay_loop 6 # 健康檢查間隔時間(秒)
lb_algo rr # 調度算法(rr,輪詢)
lb_kind DR # DR模式
persistence_timeout 50 #連接保持時間(秒)
protocol TCP
real_server 192.168.100.53 80 { #web1服務器ip 端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.54 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#配置完主從後啓動keepalived
[root@t1 ~]# systemctl start keepalived.service
#測試,在LVS主上可以看到vip
[root@t1 ~]# ip addr|grep ens33
[root@t1 ~]# ipvsadm –L
#若停止LVS(主),可以查看到自動漂移至LVS(從)
(4) 配置Web服務器(以下操作在Web(主)、Web(從)上操作):
#安裝nginx
[root@t3 ~]# yum install g++ gcc openssl openssl-devel pcre pcre-devel zlib-devel –y
[root@t3 ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[root@t3 ~]# tar zxvf nginx-1.14.2.tar.gz
[root@t3 ~]# cd nginx-1.14.2/
[root@t3 ~]# ./configure
[root@t3 ~]# make
[root@t3 ~]# make install
#爲方便測試,web(主)添加web1,web(備)添加web2
[root@t3 ~]# echo "hello,web1" > /usr/local/nginx/html/test.html
[root@t3 ~]# /usr/local/nginx/sbin/nginx
#配置web服務器,禁用Arp對虛擬IP的響應
[root@t3 ~]# vim /etc/sysctl.conf
net.ipv4.conf.ens33.arp_ignore=1
net.ipv4.conf.ens33.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
#配置web服務器,
[root@t3 ~]# ifconfig lo:0 192.168.100.50 netmask 255.255.255.255 broadcast 192.168.100.50 up
[root@t3 ~]# route add -host 192.168.100.50 dev lo:0
(5) 測試
1、在pc上,遊覽器訪問http://192.168.100.50/test.html
顯示,“hello,web1”;間隔50秒後(之前設置的連接時間)再次訪問顯示,“hello,web2”。
2、關閉web1上的nginx,訪問顯示,“hello,web2”
這裏就不貼圖了~
參考:
http://www.keepalived.org/index.html
http://www.linuxvirtualserver.org/zh/