(三)设置为DR模式:
1 配置Director
(1)启用ip_forward
[root@stu1 ~]# vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
改为
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
检查
[root@stu1 etc]# sysctl -p
net.ipv4.ip_forward = 1
(2)设置ipvs
# 6.1.1.1是vip;:80是通过端口定义了服务类型;RIP1:192.168.0.2,RIP2:192.168.0.3
[root@stu1 ~]#ipvsadm -A -t 6.1.1.1:80 -s rr
[root@stu1 ~]#ipvsadm -a -t 6.1.1.1:80 -r 192.168.0.2 -g
#RIP1
[root@stu1 ~]#ipvsadm -a -t 6.1.1.1:80 -r 192.168.0.3 -g
#RIP2
#通过指定RIP,LVS就知道realserver的MAC地址了
[root@stu1 ~]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:
#保存在这个文件 [ OK ]
(3) 设置VIP (Virtul IP)
[root@stu1 etc]# ifconfig eth0:1 6.1.1.1
(4) 停止httpd服务
[root@stu1 httpd]# service httpd stop
#作为Director要必须关掉此服务,因为Director的vip也是6.1.1.1,所以在浏览器里要是输入http://61.1.1.1,则会显示Director的页面。
2 配置RealServer
(1)登录
[root@stu1 ~]#ssh 192.168.0.2
(2)配置ip_forward (同上)
(3)网关指向(DGW内网IP)
[root@stu2 ~]#route -n #查看路由
[root@stu2 ~]#route del default
[root@stu2 ~]#route add default gw 192.168.0.254 #这里是DR模式,所以指向DGW
[root@stu2 ~]#service httpd start
(4)设置回环地址
[root@stu2 ~]#ifconfig lo:1 6.1.1.1 netmask 255.255.255.255
#6.1.1.1为VIP
#上面是临时生效,若想永久生效则修改 netconfig -d lo:1
(5)解决ARP的问题,用以下方法的一种
a. 在DGW上绑定Director的MAC地址
[root@stu254 ~]#arp -s VIP MAC (Director的mac)
注意:配置了arp后,就不用广播来获取MAC地址了,但当启用backup时就不要此种方法了,因为backup的MAC地址DGW并不知道,还认为VIP是对应以前Director的MAC地址。
b. 在realserver上更改内核参数,让回环设备不响应ARP请求
[root@stu2 ~]#vim /etc/sysctl.conf
#增加以下
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 1
net.ipv4.conf.lo.arp_filter = 1
c. 在realserver上配置arptables 最为稳妥,优先选用此方法
[root@stu2 ~]#arptables -A IN -d VIP -j DROP
[root@stu2 ~]#service arptables_jf save
Saving current rules to /etc/sysconfig/arptables: [ OK ]
[root@stu2 ~]#chkconfig arptables_jf on
注意:如果没有arptables就要安装arptables_jf
[root@stu2 ~]#rpm -qa arptables
[root@stu2 ~]#yum install arptables_jf
(6)更改web页面(此步骤不是必须的,只是因为在测试环境便于区分)
[root@stu2 ~]#elinks 192.168.0.2
#在浏览器中查看自己的网页,为了区别大家的网页可以更改index.html的内容
echo "##########################.125" > /var/www/html/index.html
(7)同样方法更改其他realserver
3 测试
在client机器上添加vip:6.1.1.2作为CIP进行测试;也可以不添加vip,直接用私网IP访问。??
[root@stu1 ~]#ifconfig eth0:1 6.1.1.1.2
[root@stu1 ~]#elinks 6.1.1.1 #以rr算法访问DIP (Director_IP),浏览器里会轮回显示realserver的web页面
(四)设置为Tunnel隧道模式:
RealServer如果不在同一个子网,则需要隧道。需要先配置隧道,这里我们先不进行配置。
三 ipvs参数
1 ipvsadm -L 可以查看IP Virtual是否生效
DR模式转发类型为Route
[root@stu1 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 6.1.1.1:http rr
-> stu2.uplooking.com:http Route 1 0 0
-> stu3.uplooking.com:http Route 1 0 0
NAT模式转发类型为NAT
[root@stu11 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 6.1.1.1:http rr
-> stu2.uplooking.com:http Masq 1 0 0
-> stu3.uplooking.com:http Masq 1 0 0
]
2 -A:表示添加一个vitrul server
3 -t:表示tcp
-u ; 表示udp
4 -m:启用NAT地址转换
5 -a:表示add一个IP地址
6 -r:指定real server的地址
7 -d:删除一个real server
8 -D:删除服务
9 -C:Clear [root@stu1 ~]# ipvsadm -C
10-p:指定秒数,如:-p 30,PC1通过Director访问过realserver(RIP2)则PC1在指 定30秒内再次访问realserver仍将访问RIP2。
11 -S: 等同于service ipvsadm save
12 -f:防火墙标记,给服务添加tag。如:ftp服务用20 21端口,21端口用来验证,20端口用来传送数据。当在realserver(RIP1)FTP:21验证后转到realserver(RIP2)进行数据传送时,又会要求验证,所以要作标记。??
iptables -t mangel -A PREROUTING -p tcp �Cdport 20 -j MARK �Cset-mark 33
iptables -t mangel -A PREROUTING -p tcp �Cdport 21 -j MARK �Cset-mark 33
如果一个服务用不同的端口,那么给多端口的服务打同一个防火墙标记
13 -s:指定用哪个调度算法
14 [root@stu1 ~]# man ipvsadm
四 ipvs调度算法
1 rr : 连接的时候,利用round robin, 第一个人访问第一台机器,第二个人访问第二台机器。
2 wrr:加权轮循, 权重是一个比值,不是一个绝对值。
3 Lc :最小连接算法
4 wlc: 加权最小连接算法,连接到当前最小的连接数的机器上,适合于新闻网站,要是总有会话就不适合了。
5 lblc: 局部最小连接算法。优先把连接放在第一次连接的机器上。如:PC1通过Director访问过realserver(RIP2)则PC1在指 定30秒内再次访问realserver仍将访问RIP2。
6 Dh :给予目标地址的Hash表,
7 sh :给予源地址的Hash表,
8 sed:最小延迟,类似一个ping值,谁的相应速度快,就连接谁
9 nq : 无须等待。在sed的基础上,谁没有连接,空闲着就连接谁
常用算法:
wlc:
如PC1访问realserver(RIP1),第一次访问时要输入用户名密码进行验证,验证通过后客户端会收到一个cookie,再次访问该网站,被Director分配到到realserver(RIP2),此时PC1就不再需要验证,直接可以利用其存储的cookie通过验证进行连接。多用于论坛。
Lblc :
如PC1访问银行网站,为了用户安全的保障,PC1每次连接时都需要验证,不保存cookies。 多用于银行。
ipvsadm -A -f 33 -s rr lblc
#lblc调度算法,PC1连接realserver1,过些时间PC1再次访问,则director会让他优先选择他以前连接过的realserver1;PC2请求连接时,Director会分配realserver2给它。
五 Troubleshooting
1 在realserver上监听查看是否有人访问
[root@stu2 ~]# tcpdump port 80
如果没有请求包,说明客户端没有访问我。
2查看网关DGW的arp
如果DGW不能Ping通Director的vip,则
[root@stu254 ~]#arp -n
查看vip 对应的MAC地址是否为Director的MAC,如果是,说明DGW与Director通讯正常,那么问题就在realserver上了;如果不是,说明DGW与Director无法通讯,问题可能出现在DGW、Dirctor了,也可能出现在realserver上。为了排除DGW先进行MAC帮定
arp -s 帮定MA,再ping测试
3 在主服务器上用arptables -L排除realserver
[root@stu1 ~]# arptables -L
Chain IN (policy ACCEPT)
target source-ip destination-ip source-hw destination-hw hlen op hrd pro
DROP anywhere 61.1.1.89 anywhere anywhere any any any any
4 在主服务器上停止iptables
[root@stu1 ~]#service iptables stop
六 其它相关
以上是每个realserver只负责一项服务,用rr调度运算时会轮循的分配给所有realserver。如果当每个realserver负责多个服务时,利用rr调度运算进行负载均横时就失效了。举例如下:
访问6.1.1.1:25 SMTP服务
访问6.1.1.1:110 POP3服务
访问6.1.1.1:80 WEB服务
以端口区分数据包,区分服务
30台机器,每台机器有SMTP、POP3、WEB服务,如果添加如下virtul server
那么有人第一次访问SMTP时,会连接第一个机器;第一次访问POP3时,也会连接第一个机器;第一次访问web时,也会连接第一个机器,这是Director没有起到负载均横的作用。
如果设置port为0,不管实际服务用哪个端口,默认全都为同一个服务 则只要有请求就round robin不依照服务来连接。
操作如下:
ipvsadm -A -t 6.1.1.1:0 -s lblc 不管用哪个端口,默认全都用为同一个服务。