lvs群集
1. lvs介绍
集群简单来说就是多台主机做同一件事,在付出较低成本的情况下获得性能、可靠性、灵活性方面的相对较高的收益
2. l4:四层交换,四层路由:
根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法)
3. lvs类型
- lvs-nat模式
- dr,默认模式
- lvs-tun隧道模式
4. 算法
-
lvs scheduler:lvs调度器
-
静态方法
仅根据算法本身进行调度
-
动态方法
根据算法及各RS的当前负载状态进行调度
-
-
ipvs的集群服务
支持TCP(port),UDP,AH,EST,AH_EST,SCTP等协议
5. 部署nat模式
主机名 | IP地址 | 服务器 |
---|---|---|
lvs | 192.168.10.101 192.168.211.132 | 调度器 |
rs1 | 192.168.10.102 | 服务器1 |
rs2 | 192.168.10.103 | 服务器2 |
在lvs上添加nat模式网卡,配置IP地址
[root@lvs ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:39:99:51 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe39:9951/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:39:99:5b brd ff:ff:ff:ff:ff:ff
inet 192.168.211.132/24 brd 192.168.211.255 scope global dynamic noprefixroute ens192
valid_lft 1748sec preferred_lft 1748sec
inet6 fe80::4422:d156:b340:e10f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@lvs ~]#
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp ifcfg-ens160 ifcfg-ens192
[root@lvs network-scripts]# ls
ifcfg-ens160 ifcfg-ens192
[root@lvs network-scripts]# vim ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=static
NAME=ens192
DEVICE=ens192
ONBOOT=yes
IPADDR=192.168.211.132
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@lvs network-scripts]# ifdown ens192;ifup ens192
[root@lvs ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
配置rs1IP地址
[root@rs1 ~]# cd /etc/sysconfig/network-scripts/
[root@rs1 network-scripts]# vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
ONBOOT=yes
DEVICE=ens160
IPADDR=192.168.10.102
NETMASK=255.255.255.0
GATEWAY=192.168.10.101
DNS1=114.114.114.114
[root@rs1 network-scripts]# ifdown ens160;ifup ens160
[root@rs1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:96:20:36 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.102/24 brd 192.168.10.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe96:2036/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@rs1 ~]# dnf -y install httpd
[root@rs2 ~]# systemctl start httpd
[root@rs1 ~]# cd /var/www/html/
[root@rs1 html]# echo 'test-1.example.com' > index.html
配置rs2IP地址
[root@rs2 ~]# cd /etc/sysconfig/network-scripts/
[root@rs2 network-scripts]# vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.10.103
NETMASK=255.255.255.0
GATEWAY=192.168.10.101
DNS1=114.114.114.114
[root@rs2 network-scripts]# ifdown ens160;ifup ens160
[root@rs2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:31:cf:cc brd ff:ff:ff:ff:ff:ff
inet 192.168.10.103/24 brd 192.168.10.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe31:cfcc/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@rs2 ~]# dnf -y install httpd
[root@rs2 ~]# systemctl start httpd
[root@rs2 ~]# cd /var/www/html/
[root@rs2 html]# echo 'test-2.exampe.com' > index.html
[root@lvs ~]# dnf -y install ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.211.132:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.211.132:80 -r 192.168.10.102 -m
[root@lvs ~]# ipvsadm -a -t 192.168.211.132:80 -r 192.168.10.103 -m
6. 配置dr模式
恢复快照后
[root@lvs ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.101
NETMASK=255.255.255.0
IPADDR1=192.168.211.140
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=114.114.114.114
[root@lvs ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:92:a3:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.101/24 brd 192.168.80.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.211.140/24 brd 192.168.80.255 scope global secondary noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe92:a346/64 scope link
[root@rs1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.10.102
PREFIX=24
GATEWAY=192.168.10.2
DNS1=114.114.114.114
[root@rs1 ~]# dnf -y install httpd net-tools
[root@rs1 ~]# echo 'rs1.example.com' > /var/www/html/index.html
[root@rs1 ~]# systemctl enable --now httpd
[root@rs1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@rs1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@rs1 ~]# ifconfig lo:0 192.168.10.250/32 broadcast 192.168.10.250 up
[root@rs1 ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.102 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe96:2036 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:96:20:36 txqueuelen 1000 (Ethernet)
RX packets 706 bytes 56193 (54.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 598 bytes 97751 (95.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.10.250 netmask 0.0.0.0
loop txqueuelen 1000 (Local Loopback)
[root@rs1 ~]# route add -host 192.168.10.250 dev lo:0
[root@rs1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens160
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.10.250 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@rs2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.10.103
PREFIX=24
GATEWAY=192.168.10.2
DNS1=114.114.114.114
[root@rs2 ~]# dnf -y install httpd net-tools
[root@rs2 ~]# echo 'rs2.example.com' > /var/www/html/index.html
[root@rs2 ~]# systemctl enable --now httpd
[root@rs2 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@rs2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@rs2 ~]# ifconfig lo:0 192.168.10.250/32 broadcast 192.168.10.250 up
[root@rs2 ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.103 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe31:cfcc prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:31:cf:cc txqueuelen 1000 (Ethernet)
RX packets 714 bytes 58051 (56.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 572 bytes 96349 (94.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.10.250 netmask 0.0.0.0
loop txqueuelen 1000 (Local Loopback)
[root@rs2 ~]# route add -host 192.168.10.250 dev lo:0
[root@rs2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens160
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.10.250 0.0.0.0 255.255.255.255 UH 0 0 0 lo
# 配置dip
[root@lvs ~]# dnf -y install net-tools ipvsadm
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# ls
ifcfg-ens160
[root@lvs network-scripts]# vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.10.101
PREFIX=24
GATEWAY=192.168.10.2
DNS1=114.114.114.114
[root@lvs network-scripts]# ifdown ens160;ifup ens160
# 配置vip
[root@lvs network-scripts]# ifconfig ens160:0 192.168.10.250/32 broadcast 192.168.10.250 up
[root@lvs network-scripts]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.101 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe39:9951 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:39:99:51 txqueuelen 1000 (Ethernet)
RX packets 12037 bytes 15009559 (14.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6478 bytes 438552 (428.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.250 netmask 0.0.0.0 broadcast 192.168.10.250
ether 00:0c:29:39:99:51 txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 16 bytes 1360 (1.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1360 (1.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@lvs ~]# route add -host 192.168.10.250 dev ens160:0
[root@lvs ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens160
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.10.250 0.0.0.0 255.255.255.255 UH 0 0 0 ens160
[root@lvs ~]# ipvsadm -A -t 192.168.10.250:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.102 -g
[root@lvs ~]# ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.103 -g
[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 192.168.10.250:80 wrr
-> 192.168.10.102:80 Route 1 0 0
-> 192.168.10.103:80 Route 1 0 0
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.10.250:80 -s wrr
-a -t 192.168.10.250:80 -r 192.168.10.102:80 -g -w 1
-a -t 192.168.10.250:80 -r 192.168.10.103:80 -g -w 1