網絡拓撲
VS服務器,一個接口,兩個IP
DIP要求和RS在同一個網段中
VIP是公有地址
在生產中,VIP是公網地址
在網絡環境中,VIP的子網掩碼任意,只有一它臺主機在獨立的網段中,所以子網掩碼任意
路由器上有兩個接口,一個和VIP在一個網段,通過這個地址連接到VIP上,一個和私網的地址進行通訊的
RS的地址和DIP和是私網地址,不需要互聯網可以訪問
實現了在同一個物理絡但邏輯上是兩個不同的網段
只有路由器是兩塊網卡,其他都是一塊網卡
主機:5臺
??
路由器router
hostname router
exec bash
?
設置網絡
ens33
IPADDR=172.18.0.200
PREFIX=16
DNS1=223.5.5.5
DNS2=223.6.6.6
ens34
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.111.101
PREFIX=24
GATEWAY=192.168.111.1
ens34:1 定義網卡別名
[root@router /etc/sysconfig/network-scripts]# cp ifcfg-ens34 ./ifcfg-ens34:1
[root@router /etc/sysconfig/network-scripts]# vim ifcfg-ens34:1
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
DEVICE=ens34:1
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=8
[root@router ~]# systemctl restart network
CentOS6需要關閉NetworkManagre服務
客戶端
hostname client
[root@localhost ~]# exec bash
配置網絡
nmcli connection modify ens33 ipv4.addresses 172.18.0.123/16 ipv4.gateway 172.18.0.200 ipv4.method manual
nmcli connection up ens33
[root@client ~]# route -n
Kernel IP routing table
Destination ????Gateway ????????Genmask ????????Flags Metric Ref ???Use Iface
0.0.0.0 ????????172.18.0.200 ???0.0.0.0 ????????UG ???100 ???0 ???????0 ens33
172.18.0.0 ?????0.0.0.0 ????????255.255.0.0 ????U ????100 ???0 ???????0 ens33
測試網絡連通性
[root@client ~]# ping 10.0.0.200
PING 10.0.0.200 (10.0.0.200) 56(84) bytes of data.
64 bytes from 10.0.0.200: icmp_seq=1 ttl=64 time=1.08 ms
[root@client ~]# ping 192.168.111.101
PING 192.168.111.101 (192.168.111.101) 56(84) bytes of data.
64 bytes from 192.168.111.101: icmp_seq=1 ttl=64 time=0.609 ms
[root@client ~]# ping 172.18.0.200
PING 172.18.0.200 (172.18.0.200) 56(84) bytes of data.
64 bytes from 172.18.0.200: icmp_seq=1 ttl=64 time=0.356 ms
網絡配置完成!
RS1,RS2
RS1
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.111.102
PREFIX=24
GATEWAY=192.168.111.101
RS2
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.111.103
PREFIX=24
GATEWAY=192.168.111.101
ifconfig ens33 down
route -n
[root@RS1 ~]# route -n
Kernel IP routing table
Destination ????Gateway ????????Genmask ????????Flags Metric Ref ???Use Iface
0.0.0.0 ????????192.168.111.101 0.0.0.0 ????????UG ???100 ???0 ???????0 ens34
192.168.111.0 ??0.0.0.0 ????????255.255.255.0 ??U ????100 ???0 ???????0 ens34
[root@RS2 ~]# route -n
Kernel IP routing table
Destination ????Gateway ????????Genmask ????????Flags Metric Ref ???Use Iface
0.0.0.0 ????????192.168.111.101 0.0.0.0 ????????UG ???100 ???0 ???????0 ens34
192.168.111.0 ??0.0.0.0 ????????255.255.255.0 ??U ????100 ???0 ???????0 ens34
彼此可以ping通
[root@RS1 ~]# ping 172.18.0.123
PING 172.18.0.123 (172.18.0.123) 56(84) bytes of data.
64 bytes from 172.18.0.123: icmp_seq=1 ttl=63?time=2.25 ms
[root@RS2 ~]# ping 172.18.0.123
PING 172.18.0.123 (172.18.0.123) 56(84) bytes of data.
64 bytes from 172.18.0.123: icmp_seq=1 ttl=63?time=2.04 ms
注意:route機器需要啟用路由功能
[root@router ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
生效
[root@router ~]# sysctl -p
配置VS
LVS機器
hostname LVS
exec bash
網絡配置
[root@LVS ~]# v34
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.111.100
PREFIX=24
GATEWAY=192.168.111.1(實驗時,網關指向路由器的網關),這里指向的是本機IP地址的網關,實驗過程中也是可以的,但還是建議把這個網關指向路由器的私有地址的接口上
66:00分鐘的時候提到網關的問題:網關先配上
VS服務器可以不配置網關,請求包到達VS后,不通過VS返回
注意:配上網關,先配上,配的網關是路由器的網關
LV
[root@LVS ~]# cat lvs_dr_vs.sh
#!/bin/bash
vip=’10.0.0.100′
iface=’ens34:1′
mask=’255.0.0.0’#子網掩碼是什么都可以
port=’80’
rs1=’192.168.111.102′
rs2=’192.168.111.103′
scheduler=’wrr’
type=’-g’
rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null
case $1 in
start)
ifconfig $iface $vip netmask $mask #broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
echo “The VS Server is Ready!”
;;
stop)
ipvsadm -C
ifconfig $iface down
echo “The VS Server is Canceled!”
;;
*)
echo “Usage: $(basename $0) start|stop”
exit 1
;;
esac
[root@LVS ~]#
[root@LVS ~]# bash lvs_dr_vs.sh start
?
[root@LVS ~]# ip a
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:49:43:34 brd ff:ff:ff:ff:ff:ff
?inet 192.168.111.100/24?brd 192.168.111.255 scope global ens34
valid_lft forever preferred_lft forever
inet 10.0.0.100/8?brd 10.255.255.255 scope global ens34:1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe49:4334/64 scope link
valid_lft forever preferred_lft forever
?
?
[root@LVS ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port ??????????Forward Weight ActiveConn InActConn
TCP ?10.0.0.100:80 wrr
-> 192.168.111.102:80 ??????????Route ??1 ?????0 ?????????0
-> 192.168.111.103:80 ??????????Route ??1 ?????0 ?????????0
RS配置
[root@RS1 ~]# cat lvs_dr_rs.sh
#!/bin/bash
vip=10.0.0.100
mask=’255.0.0.0’#子網掩碼是什么都可以
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo “The httpd Server is Ready!”
echo “`hostname`” > /var/www/html/index.html
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask #broadcast $vip up廣播可以不寫
#route add -host $vip dev $dev 路由可以不寫
echo “The RS Server is Ready!”
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo “The RS Server is Canceled!”
;;
*)
echo “Usage: $(basename $0) start|stop”
exit 1
;;
esac
[root@RS1 ~]#
[root@RS1 ~]# bash lvs_dr_rs.sh start
[root@RS2 ~]# bash lvs_dr_rs.sh start
確定VIP被綁定到lo上
[root@RS1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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 10.0.0.100/8?scope global lo:1
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
關閉防火墻、關閉selinux、關閉橋接網卡、開啟httpd服務
iptables -F && setenforce 0 && ifconfig ens33 down && systemctl start httpd
測試
[root@client ~]# for i in {1..100};do curl 10.0.0.100; sleep 0.1;done
RS1 Server
RS2 Server
RS1 Server
RS2 Server
?
?
腳本中的lo網卡的arp_announce和arp_ignore是不是可以不加?
修改腳本,注釋掉lo網卡所在的行,測試
?
????echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# ???echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
?
也就是說,加了all是不是可以不加lo
?
?
RS1和RS2
修改對應的選項后重新執行
?
bash lvs_dr_rs.sh start
?
是可以的!
?
all就是代表所有,lo是單獨的針對lo網卡,加上all 和 lo 相對于是雙保險
?
?
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91936