一.Piranha方案基本简绍.
1.Piranha方案优点:
配置简洁高效:
配置一个lvs.conf配置文件即可搞定(类keepalived方案.)
WEB配置界面:
WEB配置对于那些不懂LVS配置的人员来说非常简单,你简单几步就可以配置好一个完美的负载均衡及高可用性方案.
完整的功能:
主备LVS (Load Balancer)的Heartbeat和HA (pulse,send_arp)
LoadBalancer和Real 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中操作如下:
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,观察有什么变化?