一、前言
本次所有的实验均在虚拟机的环境中进行,实验的目的是搭建lvs-nat模式的负载均衡集群。本文不涉及lvs原理,只模拟了lvs-nat模式的负载均衡集群。
原理请参考:
http://www.linuxvirtualserver.org/zh/index
《LVS手册_可伸缩网络服务的设计与实现_1.0》
二、拓扑图
工具:ipvsadm
环境准备:
客户端:192.168.91.128
负载均衡服务器:VIP:192.168.91.3 DIP:10.0.0.254
真实服务器RS1:IP:10.0.0.111 gw:10.0.0.254
真实服务器RS2:IP:10.0.0.5 gw:10.0.0.254
三、实验操作
1.客户端操作
1
2
3
|
[root@localhost ~] # ip a l | grep "ens33" #查看ip
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.91.128 /24 brd 192.168.91.255 scope global dynamic ens33
|
2.RS1服务端操作
1
2
3
4
5
6
7
8
9
10
11
|
[root@rs1 ~] # ip a l | grep "ens33" #查看ip
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.0.0.111 /24 brd 10.0.0.255 scope global ens33
[root@rs1 ~] # setenforce 0 #关闭selinux
[root@rs1 ~] # iptables -F #为了实验方便,清空防火墙规则
yum install httpd #安装httpd
[root@rs1 ~] # cat /var/www/html/index.html #查看测试web内容
<h1>web server RS1< /h1 >
[root@rs1 ~] # systemctl start httpd #启动httpd
[root@rs1 ~] # ss -tln | grep 80
LISTEN 0 128 :::80 :::* |
3.RS2服务端操作
操作大抵和上面一致
1
2
3
4
5
6
7
8
9
10
11
|
[root@rs2 ~] # ip a l | grep "ens33"
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.0.0.5 /24 brd 10.0.0.255 scope global ens33
[root@rs2 ~] # setenforce 0
[root@rs2 ~] # iptables -F
yum install httpd
[root@rs2 ~] # cat /var/www/html/index.html
<h1>web server RS2< /h1 >
[root@rs2 ~] # systemctl start httpd
[root@rs2 ~] # ss -tln | grep 80
LISTEN 0 128 :::80 :::* |
4.负载均衡服务端操作
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
|
[root@localhost ~] # ip a l | egrep "ens33|ens37" #查看ip
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.91.3 /24 brd 192.168.91.255 scope global dynamic ens33
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.0.0.254 /8 brd 10.255.255.255 scope global ens37
yum install ipvsadm #安装lvs管理工具ipvsadm
[root@localhost ~] # rpm -ql ipvsadm #查看ipvsadm程序环境
/etc/sysconfig/ipvsadm-config #配置文件
/usr/lib/systemd/system/ipvsadm .service
/usr/sbin/ipvsadm #核心工具
/usr/sbin/ipvsadm-restore #读入配置文件
/usr/sbin/ipvsadm-save #保存ipvsadm规则
/usr/share/doc/ipvsadm-1 .27
/usr/share/doc/ipvsadm-1 .27 /README
/usr/share/man/man8/ipvsadm-restore .8.gz
/usr/share/man/man8/ipvsadm-save .8.gz
/usr/share/man/man8/ipvsadm .8.gz
[root@localhost ~] # systemctl enable ipvsadm #设置开机自启动
[root@localhost ~] # systemctl start ipvsadm #启动服务
echo 1 > /proc/sys/net/ipv4/ip_forward #开启核心转发
[root@localhost ~] # cat /proc/sys/net/ipv4/ip_forward
1 setenforce 0 #关闭selinux
iptabels -F #为了实验方便,清空防火墙规则
ipvsadm -A -t 192.168.91.3:80 -s rr #设置lvs调度器的算法为轮询
ipvsadm -a -t 192.168.91.3:80 -r 10.0.0.111:80 -m #添加RS1服务器,-m选项即指定nat模式
ipvsadm -a -t 192.168.91.3:80 -r 10.0.0.0.5:80 -m #添加RS2服务器
ipvsadm-save |
5.客户端测试
根据脚本的结果分析可知,客户端轮询访问两个真实服务器(RS1、RS2),由此证明成功地实现了轮询调度算法的负载均衡模式。
1
2
3
4
5
6
7
8
9
10
11
|
[root@localhost ~] # for i in {1..10};do curl http://192.168.91.3;done
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
|
6.修改调度算法为wrr(加权轮询)
负载均衡服务器端操作
1
2
3
4
5
6
7
8
9
|
[root@localhost ~] # ipvsadm -E -t 192.168.91.3:80 -s wrr #修改调度算法为wrr
[root@localhost ~] # ipvsadm -e -t 192.168.91.3:80 -r 10.0.0.111:80 -m -w 2 #修改RS1的权重为2
[root@localhost ~] # 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.91.3:80 wrr -> 10.0.0.5:80 Masq 1 0 11
-> 10.0.0.111:80 Masq 2 0 14
|
客户端操作
根据脚本的结果分析可知,客户端先访问一次RS2,接着再访问两次RS1,如此循环访问。由此证明成功地实现了加权轮询调度算法的负载均衡模式。
1
2
3
4
5
6
7
8
9
10
11
12
|
测试 [root@localhost ~] # for i in {1..10};do curl 192.168.91.3;done
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS2< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS1< /h1 >
<h1>web server RS2< /h1 >
|
四、实验需要注意的问题
1.根据真实环境,VIP为公网地址,RIP应该为私有地址,这样的目的是将服务器隐藏起来。所以在虚拟机实验时最好将VIP设置为桥接的模式,RID设置为仅主机模式。
2.RID的网关必须指向负载均衡器的DIP,并且RID与DIP在同一网段内。
3.负载均衡器一定要开启核心转发功能
4.设置好相应的防火墙规则(或者直接关闭),并且关闭selinux。
本文转自 PowerMichael 51CTO博客,原文链接:http://blog.51cto.com/huwho/1941684,如需转载请自行联系原作者