# 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

# 隐藏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

# 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模型实验拓补图

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