# LVS的DR模型实验手册编写及本地搭建实现实验环境
# LVS调度算法
调度算法:
四种静态:
rr:轮循
wrr:
dh:
sh:
动态调度方法:偷窥可做到
lc: 最少连接
wlc: 加权最少连接
sed: 最短期望延迟
nq: never queue
LBLC: 基于本地的最少连接
DH:
LBLCR: 基于本地的带复制功能的最少连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 隐藏VIP方法
隐藏VIP方法:对外隐藏,对内可见 :
kernel parameter:目标mac地址为全F,交换机触发广播
先修改arp协议配置
/proc/sys/net/ipv4/conf/*IF*/
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求
到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
最后将VIP配置在lo->回环接口上 lo是虚拟网卡可以配置多个IP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ipvsadm详解
LVS已经被Linux作者加入到内核模块ipvs中了,而ipvsadm是个外壳程序,底层调用ipvs模块
详解:
入包规则
ipvs内核模块 yum install ipvsadm -y 管理集群服务添加:-A -t|u|f service-address [-s scheduler] -A:入包规则 -t: TCP协议的集群 -u: UDP协议的集群 service-address: IP:PORT -s: 跟踪 -f: FWM: 防火墙标记 service-address: Mark Number 修改:-E 删除:-D -t|u|f service-address 示例: # ipvsadm -A -t 192.168.9.100:80 -s rr
1
2
3
4
5
6
7
8
9
10
11
12
13
14出包规则
管理集群服务中的RS 添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight] -a:出包规则 -t|u|f service-address:事先定义好的某集群服务 -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射; [-g|i|m]: LVS类型 -g: DR -i: TUN -m: NAT [-w weight]: 定义服务器权重 修改:-e 删除:-d -t|u|f service-address -r server-address # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g 查看 -L|l -n: 数字格式显示主机地址和端口 --stats:统计数据 --rate: 速率 --timeout: 显示tcp、tcpfin和udp的会话超时时长 -:c 显示当前的ipvs连接状况 删除所有集群服务 -C:清空ipvs规则 保存规则 -S # ipvsadm -S > /path/to/somefile 载入此前的规则: -R # ipvsadm -R < /path/form/somefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# DR模型实验拓补图
# 主机规划
用户名/密码 | 主机名称 | 备注 | 主机规划(内) | 安装软件 |
---|---|---|---|---|
root/root123 | lvs-master01 | LVS服务器 | 192.168.0.11 192.168.0.100(虚拟IP) | ipvsadm |
root/root123 | nginx01 | Nginx服务器1 | 192.168.0.12 192.168.0.100(lo回环接口) | nginx |
root/root123 | nginx02 | Nginx服务器2 | 192.168.0.13 192.168.0.100(lo回环接口) | nginx |
# 实验步骤
# lvs-master01上创建虚拟网卡子接口ens33:8
ifconfig ens33:8 192.168.0.100/24
# nginx01、nginx02上
# 1)修改内核给arp协议做手术:
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# 2)设置隐藏的VIP:
ifconfig lo:3 192.168.0.100 netmask 255.255.255.255
# RS中的服务:
# nginx01、nginx02上
yum install -y yum-utils
# 进入目录
cd /etc/yum.repos.d/
# 编辑文件
vim nginx.repo
# 输入以下信息
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 默认情况下,使用稳定nginx包的存储库。如果要使用主线nginx包,请运行以下命令:
sudo yum-config-manager --enable nginx-mainline
# 安装Nginx
# 通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。
yum search nginx
# 安装nginx
yum install -y nginx
# 安装完后,rpm -qa | grep nginx 查看
rpm -qa | grep nginx
# 查看Nginx版本
yum list nginx
# 启动Nginx
systemctl start nginx
# 加入开机启动
systemctl enable nginx
# 查看Nginx的状态
systemctl status nginx
vim /usr/share/nginx/html/index.html
from 192.168.0.1x
# LVS服务配置
# lvs-master01
yum install -y ipvsadm
# 配置入包规则 相当于配置虚拟IP及端口
ipvsadm -A -t 192.168.0.100:80 -s rr
# 配置出包规则 相当于映射虚拟IP及端口到后端RS的IP
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.12 -g -w 1
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.13 -g -w 1
ipvsadm -ln
# 验证:
浏览器访问 192.168.0.100 看到负载 疯狂F5
lvs-master01:
netstat -natp 结论看不到socket连接
nginx01、nginx02:
netstat -natp 结论看到很多的socket连接
lvs-master01:
ipvsadm -lnc 查看偷窥记录本
TCP 00:57 FIN_WAIT 192.168.0.1:51587 192.168.0.100:80 192.168.0.12:80
FIN_WAIT: 连接过,偷窥了所有的包
SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题 只接受到第一次的SYN包没有记录到第三次的确认ACK包
nginx01:
ifconfig lo:3 down 就能出现SYN_RECV这个状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77