LVS+Keepalived+Apache 實現負載均衡高可用

虛擬機(CentOS 7.4)

準備了4臺虛擬機,用於測試

LVS+Keepalived+Apache 實現負載均衡高可用

虛擬機環境:所有虛擬機關閉防火牆,關閉selinux

LVS+Keepalived+Apache 實現負載均衡高可用

一、軟件安裝

1)、分別在192.168.3.2 (master)和 192.168.3.6 (backup)上安裝keepalived

Keepalived安裝

開機自啟,啟動服務

[root@master ~]# yum install keepalived -y
[root@master ~]# systemctl enable keepalived
[root@master ~]# systemctl restart keepalived

2)、分別在192.168.3.2(master) 和 192.168.3.6 (backup)上安裝ipvsadm 工具,用於查看lvs轉發及代理情況。

ipvsadm安裝

[root@backup ~]# yum install ipvsadm -y

3)、分別在192.168.3.3(web1) 和 192.168.3.4(web2)安裝apache 網頁服務器

開機自啟,啟動服務

[root@web1 ~]# yum install httpd -y
[root@web1 ~]# systemctl enable http
[root@web1 ~]# systemctl restart httpd

4)、分別在192.168.3.3(web1) 和 192.168.3.4(web2)中,寫入一個不同的測試頁面

[root@web1 ~]# echo "192.168.3.3 (web1)" > /var/www/html/index.html
[root@web2 ~]# echo "192.168.3.4 (web2)" > /var/www/html/index.html

測試下頁面:

LVS+Keepalived+Apache 實現負載均衡高可用

二、配置網絡環境

1)、分別在192.168.3.3(web1) 和 192.168.3.4(web2)配置虛擬 vip 地址,以及

這裡的子網掩碼必須是32,網絡地址與IP地址一樣,廣播地址與IP地址也一樣。

[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 ~]# cp ifcfg-lo ifcfg-lo:0
[root@web1 ~]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.3.200
NETMASK=255.255.255.255

NETWORK=192.168.3.200
BROADCAST=192.168.3.200
ONBOOT=yes
NAME=lo:0

2)、分別在192.168.3.3(web1) 和 192.168.3.4(web2)上配置ARP抑制

[root@web1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@web1 ~]# sysctl -p ##重新載入sysctl配置文件

arp_ignore和arp_announce參數都和ARP協議相關,主要用於控制系統返回arp響應和發送arp請求時的動作。

arp_ignore :(回應ARP,作用是控制系統在收到外部的arp請求時,是否要返回arp響應。

0 :響應任何網口上收到的對任何本機IP地址的ARP查詢請求(默認)

1:只響應目的IP地址為接收網卡上的本地地址的arp請求

2:只響應目標IP是接收網口的IP的ARP查詢請求,且發送者IP必須與該網口屬於同一網段

4--7: 保留未使用

8: 不回應所有ARP查詢

arp_announce (宣告,作用是控制系統在對外發送arp請求時,如何選擇arp請求數據包的源IP地址。

0:允許使用任意網卡上的IP地址作為arp請求的源IP

1:儘量避免使用不屬於該發送網卡子網的本地地址作為發送arp請求的源IP地址。

2:忽略IP數據包的源IP地址,選擇該發送網卡上最合適的本地地址作為arp請求的源IP地址。

3)、分別在192.168.3.3(web1) 和 192.168.3.4(web2) 重啟網絡服務

查看vip 虛擬地址

[root@web1 ~]# systemctl restart network
[root@web1 ~]# ip address show lo
1: lo: <loopback> 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
inet 192.168.3.200/32 brd 192.168.3.200 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
/<loopback>

三、配置keepalived

1)、在 192.168.3.2 (master) 上,配置master

[root@master ~]# vim /etc/keepalived/keepalived.conf 
global_defs {
notification_email {
[email protected] #設置報警收件人郵箱
}
notification_email_from [email protected] #設置發件人

smtp_server 192.168.200.1 #定義郵件服務器地址
smtp_connect_timeout 30
router_id Lvs1 #設置路由ID號,需要修改!
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #設置主服務器為MASTER
interface eth0 #定義網絡接口
virtual_router_id 51 #主輔VRID號必須一致
priority 100 #服務器優先級
advert_int 1
authentication {
auth_type PASS
auth_pass feixiangkeji
#主輔服務器密碼必須一致,建議不要使用默認密碼
}
virtual_ipaddress {
192.168.3.200 #配置VIP地址
}
}
virtual_server 192.168.3.200 80 { #設置ipvsadm的VIP規則
delay_loop 6 #檢查的間隔時間,每隔6秒檢查一次
lb_algo wrr #設置LVS調度算法為WRR,加權輪詢
lb_kind DR #設置LVS模式為直連路由模式
persistence_timeout 50 #客戶端在時間內始終訪問相同服務器
protocol TCP #設置虛擬IP的協議為TCP,相當於ipvsadm -A -t
real_server 192.168.3.3 80 {
weight 1 #設置權重為1
TCP_CHECK { #對後臺web服務器做健康檢查
connect_timeout 3 #超時時間是3秒
nb_get_retry 3 #如果不成功,連續檢測3次,不行就剔除

delay_before_retry 3 #重新加入集群,連續檢測3次
}
}
real_server 192.168.3.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

2)、在 192.168.3.6 (backup) 上,配置backup

[root@backup ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id Lvs2 #修改路由ID號
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #修改從服務器為BACKUP
interface eth0
virtual_router_id 51
priority 50 #修改服務器優先級
advert_int 1
authentication {
auth_type PASS
auth_pass feixiangkeji
}
virtual_ipaddress {
192.168.3.200
}
}
virtual_server 192.168.3.200 80 {

delay_loop 6
lb_algo wrr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 192.168.3.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.3.4 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

3)、分別在 192.168.3.2 (master) 和 192.168.3.6 (backup) 上

重啟keepalived 服務,清空iptables 規則

[root@master ~]# systemctl restart keepalived
[root@master ~]# iptables -F

查看LVS規則

[root@master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.3.200:80 wrr
-> 192.168.3.3:80 Route 1 0 0
-> 192.168.3.4:80 Route 1 0 0

查看VIP 虛擬地址配置

[root@master ~]# ip address show eth0
4: eth0: <broadcast> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:18:b6:13 brd ff:ff:ff:ff:ff:ff

inet 192.168.3.2/24 brd 192.168.3.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.3.200/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::e8a8:75c2:19e:4d04/64 scope link noprefixroute
valid_lft forever preferred_lft forever
/<broadcast>

四、客戶端測試

1)、firefox http://192.168.3.200

刷新,查看訪問的頁面是否會輪詢到不同的後端真實服務器。

LVS+Keepalived+Apache 實現負載均衡高可用

2)、測試keepalive 的高可用

關閉192.168.3.2 (master)的keepalived 服務

[root@master ~]# systemctl stop keepalived

查看192.168.3.6 (backup) 上 ,是否存在vip (192.168.3.200)地址

[root@backup ~]# ip address show eth0
4: eth0: <broadcast> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:aa:9c:5a brd ff:ff:ff:ff:ff:ff
inet 192.168.3.6/24 brd 192.168.3.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.3.200/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a424:f2de:ac3b:aa86/64 scope link noprefixroute
valid_lft forever preferred_lft forever
/<broadcast>

使用ipvsadm 命令 查看192.168.3.6 (backup) 上 ,lvs 集群信息

[root@backup ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.3.200:80 wrr
-> 192.168.3.3:80 Route 1 0 1
-> 192.168.3.4:80 Route 1 0 0

由此可見,lvs 調度器已經成功的漂到了192.168.3.6 (backup) 上

客戶端再次訪問 vip 地址

LVS+Keepalived+Apache 實現負載均衡高可用


分享到:


相關文章: