虛擬機(CentOS 7.4)
準備了4臺虛擬機,用於測試
虛擬機環境:所有虛擬機關閉防火牆,關閉selinux
一、軟件安裝
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
測試下頁面:
二、配置網絡環境
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
刷新,查看訪問的頁面是否會輪詢到不同的後端真實服務器。
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 地址
閱讀更多 運維小弟 的文章