简述:利用(LVS+Piranha)基于完整开源软件的架构可以提供一个简单的负载均衡及高可用的服务架构。LVS 集群采用 IP 负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率(在DR模式下),将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
生产环境中使用效果图:
环境:CentOS 5.5 x64
1 2 3 4 5 lb01: 192.168 .0 .111 lb02: 192.168 .0 .112 VIP: 192.168 .0 .115 web01: 192.168 .0 .114 web02: 192.168 .0 .115
安装piranha:
1 2 3 4 5 6 7 yum -y install piranha ipvsadm #通过piranha-passwd设置Piranha的管理员密码 piranha-passwd #启动piranha的WEB管理界面(可选) /etc/init.d/piranha-gui start
通过浏览器访问http://192.168.0.111:3636,单击"Login",使用用户名piranha及刚刚设定的密码进行登录
注:在此界面下可以图形化配置,也可不启用此WEB界面,直接编辑配置文件来配置
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 vi /etc/sysconfig/ha/lvs.cf serial_no = 41 #primary_private = 10.0 .0 .1 service = lvs backup_active = 1 backup = 192.168 .0 .112 #backup_private = 10.0 .0 .2 heartbeat = 1 heartbeat_port = 539 keepalive = 6 deadtime = 18 network = direct debug_level = NONE monitor_links = 1 syncdaemon = 1 virtual web_vip {active = 1 address = 192.168 .0 .115 eth0:1 vip_nmask = 255.255 .255 .255 sorry_server = 127.0 .0 .1 port = 80 pmask = 255.255 .255 .255 use_regex = 0 load_monitor = none scheduler = rr protocol = tcp timeout = 6 reentry = 15 quiesce_server = 0 server web01 { address = 192.168 .0 .113 active = 1 port = 80 weight = 1 } server web02 { address = 192.168 .0 .114 active = 1 port = 80 weight = 1 } }
#开启路由转发功能
1 2 sed -i '' s#net .ipv4 .ip_forward = 0 #net .ipv4 .ip_forward = 1 #'' /etc/sysctl.conf sysctl -p
以上步骤在lb01,lb02上操作,lvs.cf 直接用scp 即可,无需改动,主备一致。
#启动piranha
登录WEB01、WEB02
WEB环境部署略
RealServer VIP启动脚本:
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 vi /root/scripts/lvs_sh VIP =192 .168 .0 .115 /etc/rc.d/init.d/functions case "$1" in start) echo "start LVS of REALServer" for ((i=0 ; i< `echo ${do interface ="lo:`echo ${VIP[$i]}|awk -F . ''{print $4}''`" /sbin/ifconfig $interface ${VIP [$i]} broadcast ${VIP [$i]} netmask 255 .255 .255 .255 up done echo "1" >/proc /sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc /sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc /sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc /sys/net/ipv4/conf/all/arp_announce ;; stop) /sbin/ifconfig lo:110 down echo "close LVS Directorserver" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
1 chmod 700 /root/scripts/lvs_sh
#启动VIP
1 /root/scripts/lvs.sh start
在lb01上查看:
1 2 3 4 5 6 7 [root@lb01 ~]# 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 .0 .115 :80 rr -> 192.168 .0 .114 :80 Route 1 0 0 -> 192.168 .0 .113 :80 Route 1 2 0
到此Piranha负载均衡部署完毕,做测试即可!
PS:以上只是一个简单的部署,目的是为了与大家分享此负载均衡方法与思路!!!
附录:lvs.cf配置详解
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 ----------------------------------------------- serial_no = 41 #序号 primary = 192.168 .0 .112 #主LVS的公网IP #primary_private = 10.0 .0 .1 #内部ip地址,用于心跳检测 service = elain_lvs #服务名称,可以自己定义 backup_active = 1 #是否有备份 backup = 192.168 .1 .211 #备份LVS的公网IP #backup_private = 10.0 .0 .2 heartbeat = 1 #是否开启心跳 heartbeat_port = 649 #心跳的UDP端口 keepalive = 6 #心跳间隔(秒) deadtime = 18 #如果主 LVS 节点在deadtime(秒)后没有答复,那么备份 LVS 路由器节点就会发起失效转移。 network = direct #LVS类型(direct,tunnel,nat),此处用direct类型 debug_level = NONE #debug信息级别 monitor_links = 1 #是否开启realserver的监视功能,和后面的scheduler(调度算法)以及load_monitor相关 syncdaemon = 1 virtual web_vip { #虚拟服务的名称,可自定义. 可定义多个virtual lvs服务 active = 1 #是否激活 address = 192.168 .0 .115 eth0:1 #虚拟服务所绑定的ip(vip)以及设备名 sorry_server = 127.0 .0 .1 #当rs全部失效时访问本机 vip_nmask = 255.255 .255 .255 #vip相对应的掩码 port = 80 #虚拟服务的端口 persistent = 30 #使用持久稳固的服务时间 pmask = 255.255 .255 .255 #如果使用持久会话,设置子网掩码 use_regex = 0 #expect中是否使用正则表达式 load_monitor = none #LVS 路由器能够使用 rup 或 ruptime 来监视各个真正服务器的载量。 scheduler = rr #LVS调度算法 protocol = tcp #虚拟服务使用的协议类型 timeout = 6 #realserver失效后从lvs路由条目中移除realserver所必须经过的时间(秒) reentry = 15 #移除以后的realserver重新加入lvs路由条目所必须经过的时间(秒) quiesce_server = 0 server web01 { #realsever服务名称,可自定义,在这里我使用主机名 address = 192.168 .0 .113 #realserver的ip地址 active = 1 #是否激活 port = 80 #rs端口 weight = 1 #权重 } server web02 { address = 192.168 .0 .114 active = 1 port = 80 weight = 1 } }