RHEL5/Cluster(NAT部分)

RHEL5中的Cluster组件是基于章文嵩先生创立的LVS(Linux Virtual Server) 制作而成,

关于lvs的工作原理请参照《Linux 服务器集群系统》

Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

Cluster(NAT部分)实验

clip_image002

用到5台机器,做一个nat类型的httpd负载均衡集群.网络拓扑为
             ________
            |        |
            | client |
            |________|
           192.168.1.28          eth0 192.168.1.5
                |                eth1 10.0.0.1
                |                 _____________
     VIP(eth0:1)=192.168.1.50    |             |
     NIP(eth1:1)=10.0.0.254      |    router   |
            _ _ _ _ _            |_____________|
           |          |               |
             director  ---------------+
           |_ _ _ _ _ |               |
                |                eth0 192.168.1.6
                |                eth1 10.0.0.2
                |                 ______________
        -----------------        |              |
       |                 |       | router backup|
       |                 |       |______________|
  eth0 10.0.0.100   eth0 10.0.0.200
  gw   10.0.0.254   gw   10.0.0.254
______________    ______________
|              |  |              |
| realserver1  |  | realserver2  |
|______________|  |______________|
[client]
    os
        windwows xp
[router]
    os
        rhel5
    hostname
        vs
    software
        ipvsadm piranha httpd php
[router backup]
    os
        rhel5
    hostname
        vs_bk
    software
        ipvsadm piranha httpd php
[real server 1]
    os
        rhel5
    hostname
        rs1
    software
        httpd
[real server B]
    os
        rhel5
    hostname
        rs2
    software
        httpd
[director]
为router或者router backup中的一台虚拟出来
配置如下
[router]
#打开路由转发功能
/etc/sysctl.conf
>
net.ipv4.ip_forward = 1
#设置piranha密码
piranha-passwd
#开启服务
service piranha-gui start
#访问配置页面
http://192.168.1.5:3636/
#配置以后的文件
[root@vs ~]# cat /etc/sysconfig/ha/lvs.cf
#序号
serial_no = 41
#公网ip地址
primary = 192.168.1.5
#内部ip地址
primary_private = 10.0.0.1
#服务名称
service = lvs
#是否有备份
backup_active = 1
#备份机器的ip地址
backup = 192.168.1.6
#备份机器的内网ip地址
backup_private = 10.0.0.2
#是否开启心跳
heartbeat = 1
#心跳的udp端口
heartbeat_port = 539
#心跳间隔(秒)
keepalive = 6
#如果主 LVS 节点在deadtime(秒)后没有答复,那么备份 LVS 路由器节点就会发起失效转移。
deadtime = 18
#lvs的类型
network = nat
#浮动ip地址以及对应设备
nat_router = 10.0.0.254 eth1:1
#浮动ip掩码
nat_nmask = 255.255.255.0
#debug信息级别
debug_level = NONE
#是否开启realserver的监视功能,和后面的scheduler(调度算法)以及load_monitor相关
monitor_links = 0
#虚拟服务的名称
virtual HTTP {
     #是否激活
     active = 1
     #虚拟服务所绑定的ip(vip)以及设备名
     address = 192.168.1.50 eth0:1
     #vip相对应的掩码
     vip_nmask = 255.255.255.0
     #虚拟服务的端口
     port = 80
     #给realserver发送的验证字符串
     send = "GET / HTTP/1.0\r\n\r\n"
     #服务器正常运行时应该返回的文本答复,用来判断realserver是否工作正常
     expect = "HTTP"
     #expect中是否使用正则表达式
     use_regex = 0
     #LVS 路由器能够使用 rup 或 ruptime 来监视各个真正服务器的载量。如果你从拉下菜单中选择了 rup,每个真正服务器就必须运行 rstatd 服务。如果选择了 ruptime,每个真正服务器就必须运行 rwhod 服务。
     load_monitor = none
     #调度算式,有循环调度/循环调度/最少连接/加权最少连接法(默认)/基于地区的最少连接调度/带有复制调度的基于地区的最少连接调度/目标散列调度/源散列调度
     scheduler = wlc
     #虚拟服务使用的协议类型
     protocol = tcp
     #realserver失效后从lvs路由条目中移除realserver所必须经过的时间(秒)
     timeout = 6
     #移除以后的realserver重新加入lvs路由条目所必须经过的时间(秒)
     reentry = 15
     #当选择了 Quiesce server 单选按钮时,无论何时某个新的真正服务器节点联机,最少连接表都会被重设为零,因此活跃 LVS 路由器就会选路发送所有请求,如同所有真正服务器都被重新加入群集一样。这个选项防止了新服务器在进入群集时对大量连接应接不暇。
     quiesce_server = 0
     #realserver服务器名称空间配置
     server rs1.yubo.org {
         #realserver的ip地址
         address = 10.0.0.100
         #是否激活
         active = 1
         #一个表明和集合内其它主机相比而言的主机能力的整数值。这个值可以是任意的,但是请把它当作和群集中其它真正服务器的比例对待
         weight = 1
     }
     server rs2.yubo.org {
         address = 10.0.0.200
         active = 1
         weight = 1
     }
}
#重启服务
service pulse restart
[router backup]
#打开路由转发功能
/etc/sysctl.conf
>
net.ipv4.ip_forward = 1
#设置piranha密码
piranha-passwd
#开启服务
service piranha-gui start
#访问配置页面
http://192.168.1.6:3636/
#配置以后的文件
[root@vs_bk ~]# cat /etc/sysconfig/ha/lvs.cf
serial_no = 39
primary = 192.168.1.6
primary_private = 10.0.0.2
service = lvs
backup_active = 1
backup = 192.168.1.5
backup_private = 10.0.0.1
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = nat
nat_router = 10.0.0.254 eth1:1
nat_nmask = 255.255.0.0
debug_level = NONE
monitor_links = 0
virtual HTTP {
     active = 1
     address = 192.168.1.50 eth0:1
     vip_nmask = 255.255.255.0
     port = 80
     send = "GET / HTTP/1.0\r\n\r\n"
     expect = "HTTP"
     use_regex = 0
     load_monitor = none
     scheduler = wlc
     protocol = tcp
     timeout = 6
     reentry = 15
     quiesce_server = 0
     server rs1.yubo.org {
         address = 10.0.0.100
         active = 1
         weight = 1
     }
     server rs2.yubo.org {
         address = 10.0.0.200
         active = 1
         weight = 1
     }
}
#重启服务
service pulse restart
之后开启rs1,rs2的httpd服务,为了使得便于观察
[root@rs1 ~]# echo "rs1.yubo.org" > /var/www/html/index.html
[root@rs2 ~]# echo "rs2.yubo.org" > /var/www/html/index.html
client频繁访问http://192.168.1.50时,会发现显示内容在"rs2.yubo.org"和"rs1.yubo.org"之间切换
[注意]
route 和 route backup 互为备份,没有主次之分(注意每个配置文件的backup和backup_private)
route backup 是route的备份
route 是route backup的备份
192.168.1.50和10.0.0.254这2个虚拟ip地址同一时刻只出现在1个router上,当前router当机以后,这2个ip地址会被另一台备份机器接管