基于lvs的piranha负载均衡高可用集群

一.Piranha方案基本简绍.

1.Piranha方案优点:

配置简洁高效:

配置一个lvs.conf配置文件即可搞定(keepalived方案.)

WEB配置界面

WEB配置对于那些不懂LVS配置的人员来说非常简单,你简单几步就可以配置好一个完美的负载均衡及高可用性方案.

完整的功能:

主备LVS (Load Balancer)HeartbeatHA (pulse,send_arp)

LoadBalancerReal Server间进程服务的Heartbeat (nanny)

IPVS功能 (lvsd)

IPVS的管理 (ipvsadm)

2.Piranha方案原理结构描述:

Piranha方案是基于LVS基础上设计的一套负载均衡高可用解决方案.

LVS运行在一对有相似配置的计算机上:

一个作为活动LVS Router(Active LVS Router)一个作为备份LVS Router(Backup LVS Router)

活动LVS Router服务有两个角色:

均衡负载到真实服务器上。

检查真实服务器提供的服务是否正常。

备份LVS Router用来监控活动的LVS Router,以备活动的LVS Router失败时由备份LVS Router接管。

Pulse:Pulse进程运行在活动LVS Router和备份LVS Router上。在备份LVS Router上,pulse发送一个心跳(heartbeat)到活动LVS Router的公网接口上以检查活动LVS Router是否正常。在活动LVS Router上,pulse启动lvs进程并响应来自于备份LVS Router的心跳。

lvsd:lvs进程调用ipvsadm工具去配置和维护IPVS路由表,并为每一个在真实服务器上的虚拟服务启动一个nanny进程。

nanny:每一个nanny进程去检查真实服务器上的虚拟服务状态,并将故障情况通知lvs进程。假如一个故障被发现,lvs进程通知ipvsadm在IPVS路由表中将此节点删除

send_arp:如果备份LVS Router未收到来自于活动LVS Router的响应,它将调用send_arp将虚拟IP地址再分配到备份LVS Router的公网接口上。并在公网接口和局域网接口上分别发送一个命令去关掉活动LVS Router上的lvs进程。同时启动自己的lvs进程来调度客户端请求。

配置如下:

ipvsadm的配置详见:http://cuanlf.blog.51cto.com/8241982/1416957

[root@server38 ha]# yum install piranha -y
[root@server38 ha]# yum install piranha -y
[root@server38 ha]# piranha-passwd
[root@server38 ha]# /etc/init.d/piranha-gui start
http://192.168.2.138:3636

在web网页中,用piranha工具配置LVS的配置文件lvs.cf中操作如下:

  1. Primary server public IP:输入你公网的IP,此实验的公网IP为192.168.2.138

    Primary server private IP:输入私网IP,可以不输入

     Use network type:此实验选用直连方式

     点击accept就ok


2.Redundant server public IP:备份的IP,此实验为192.168.2.135

Heartbeat interval (seconds):心跳间隔

Assume dead after (seconds):多长时间确定死亡转移

Heartbeat runs on port:heartbeat运行的端口



3.添加服务



4.添加real server:192.168.2.116

                        192.168.2.160

直接点击ACCEPT





5.激活



[root@server38 ha]# scp lvs.cf 192.168.2.135:/etc/sysconfig/ha/

[root@server16 ~]# yum install arptables_jf
[root@server16 ~]# arptables -A IN -d 192.168.2.252 -j DROP
[root@server16 ~]# arptables -A OUT -s 192.168.2.252 -j mangle --mangle-ip-s 192.168.0.116
[root@server16 ~]# /etc/init.d/arptables_jf save
[root@server16 ~]# ifconfig eth0:1 192.168.2.252 netmask 255.255.255.255 up
[root@server16 ~]# echo server16.example.com >/var/www/html/index.html
[root@server16 ~]# /etc/init.d/httpd start

[root@server60 ~]#  yum install arptables_jf -y
[root@server60 ~]# arptables -A IN -d 192.168.2.252 -j DROP
[root@server60 ~]# arptables -A OUT -s 192.168.2.252 -j mangle --mangle-ip-s 192.168.0.160
[root@server60 ~]# /etc/init.d/arptables_jf save
[root@server60 ~]# ifconfig  eth0:1 192.168.2.252 netmask 255.255.255.255 up(此处的子网掩码表示不对外开放)
[root@server60 ~]# echo server60.example.com >/var/www/html/index.html
[root@server60 ~]# /etc/init.d/httpd start

[root@server38 ha]# /etc/init.d/pulse start
[root@server35 ha]# /etc/init.d/pulse start

[root@server38 ha]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.252:http rr
  -> 192.168.2.116:http           Route   1      0          3         
  -> 192.168.2.160:http           Route   1      0          3  
 http://192.168.2.252刷新看到页面变化则正确


测试:先后当掉运行在real server上的http服务,以及主Load Balancer的pulse,观察有什么变化?