利用红帽 Piranha 方案实现 WEB 负载均衡
准备环境:iptables和selinux均是关闭的。
desktop12.example.com
desktop41.example.com
(这2台和之前的一样是高可用的HA,假设这2台是真机,也可以是虚拟机,只要你的电脑内存足够大)
desktop58.example.com
desktop67.example.com(这2台是负载均衡的real server,这2台是虚拟机)
高可用的2台主机将读物请求发送给real server,之前我们利用hearbeat的时候需要配制好多文件,而红帽的这个套件你只需要在图形中添加,然后会自动在/etc/sysconfig/ha/ 下有一个lvs.cf的文件,你在图形上的操作将会被记录到此文件中。
Piranha 方案原理结构描述:Piranha 方案是基于 LVS 基础上设计的一套负载均衡高可用解决方案.
LVS 运行在一对有相似配置的计算机上: 一个作为活动 LVS Router(Active LVS Router), 一个作为备份 LVS Router(Backup LVS Router)。 活动 LVS Router 服务有两个角色: (1)均衡负载到真实服务器上。 (2)检查真实服务器提供的服务是否正常。 备份 LVS Router 用来监控活动的 LVS Router,以备活动的 LVS Router 失败时由备份 LVS Router 接管。(两个LVS Router活动的和备份的都是高可用HA)
Pulse: Pulse 进程运行在活动 LVS Router 和备份 LVS Router 上。 在备份 LVS Router 上,pulse 发送一个心跳(heartbeat)到活动 LVS Router 的公网接口上以检查活动 LVS Router 是否正常。 在活动 LVS Router 上,pulse 启动 lvs 进程并响应来自于备份 LVS Router 的心跳。(pulse是安装在HA2个高可用上的。eg:本实验中针对的是:desktop12.example.com和desktop41。example.com)
lvsd: lvs 进程调用 ipvsadm 工具去配置和维护 IPVS 路由表,并为每一个在真实服务器
上的虚拟服务启动一个 nanny 进程。 (自动给你去维护,不用你自己去添加ipvs的路由信息等)
nanny:每一个 nanny 进程去检查真实服务器上的虚拟服务状态,并将故障情况通知 lvs进程。假如一个故障被发现,lvs 进程通知 ipvsadm 在 IPVS 路由表中将此节点删除。(nanny监控的是的realserver即real server:desktop58.example.com和desktop67.example.com)

步骤:(1)desktop12.example.com(设为主HA)
desktop41.example.com(HA)
yum install piranha -y(安装了这个包之后你会发现提供了/etc/init.d/piranha-gui 和/etc/init.d/pusle ,而且也要安装 yum install ipvsadm -y)
安装了包之后会增加一个piranha这个用户:piranha-passwd是用来修改用户piranha的密码。在你登录的时候使用的。
/etc/init.d/piranha-gui restart之后
netstat -antlp | grep :3636开启了。。
(2)访问:http://desktop12.example.com:3636
login
username:pirnaha

password: redhat(你刚才设置的!)
(3)进入图形界面:
点击GLOBAL SETTINGS:
Primary server public IP: 192.168.0.12 (主LVS的公网IP)
Primary server private IP:(内部IP用于心跳检测)
(May be blank)
Use network type: NAT Direct Routing Tunneling(不选择)(LVS类型)
(Current type is: direct )
点击:ACCEPT
(以上配制的是主的HA高可用)

点击REDUNDANCY->Enable:(配置备用的HA高可用)
Redundant server public IP: 192.168.0.41(备份LVS公网)
Heartbeat interval (seconds): 2(自己设置心跳间隔(秒)时间)
Assume dead after (seconds): 10(多长时间确立死亡转移服务)
Heartbeat runs on port: 50001(该端口不可以被占用,指的是hearbeat运行服务端口)
Monitor NIC links for failures:选择
Syncdaemon: (同步)选择

点击:ACCEPT(保存设置)

点击VIRTUAL SERVERS:进入点击ADD->EDIT
Name:web (LVS服务名可以自己定义)
Application port:80 (虚拟服务端口)
Protocol: tcp (虚拟服务协议)
Virtual IP Address:192.168.0.1(虚拟IP)
Virtual IP Network Mask:255.255.255.255(子网掩码)
Sorry Server: (可不写)
Firewall Mark: (可不写)
Device: br0:0(IP绑定的设备接口。与你选择的HA高可用的服务器有关,如果你选择的是真机做HA高可用,那么这里填写br0:0,要是你选择的是虚拟机做HA的话,那么这里写成:eth0:0)
Re-entry Time: 15(移动RS后,重新加入的时间)
Service timeout: 6(RS失效多久后从路由中删除)
Quiesce server: No
Load monitoring tool: none(监视各服务器负载的工具,要是你选择的是rup和ruptime,那么你需要在你的real server中安装你选择的命令。)
Scheduling: LVS调度算法选择八种调度算法中的一种(Round robin
Persistence: (使用持久稳固链接的时间)
Persistence Network Mask: Unused
点击:ACCEPT
之后不退出,接着点击REAL SERVER:ADD-->EDIT
Name: desktop67.example.com
Address: 192.168.0.67
Port: 80
Weight: 1

Name: desktop58.example.com
Address: 192.168.0.58
Port: 80
Weight: 1
点击ACCEPT
最后你要点击Virtual Servers 服务up起来。否则会报错(Starting pulse: pulse: no active lvs services defined in /etc/sysconfig/ha/lvs.cf)。点击VIRTUAL SERVICES-->((DE)ACTIVATE)
接着点击EDIT-->REAL SERVER 选中你刚才添加的2个real server分别-->((DE)ACTIVATE)
注意你的上述修改都在:
cat /etc/sysconfig/ha/lvs.cf可以看到
(4)为了保持2个HA高可用服务器的设置相同:
scp /etc/sysconfig/ha/lvs.cf desktop41.example.com:/etc/sysconfig/ha/
(5)在desktop12.example.com上:
/etc/init.d/pulse start(注意这里的hearbeat是要关闭的)
tail -f /var/log/message可以看到lvs启动。
status
ipvsadm -l可以看到策略。
同样在desktop41.example.com上:
/etc/init.d/pulse start(注意这里的hearbeat也是要关闭的)
tail -f /var/log/message
可以看到lvs启动,state=BACKUP(备用)
(6)在desktop58.example.com
desktop67.example.com设置sysctl -p是否有 net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth0.arp_ignore = 1

分别在2台real server上: ifconfig eth0:0 192.168.0.1 netmask 255.255.255.255
route add -host 192.168.0.1 dev eth0:0
/etc/init.d/httpd restart

(7)测试:
http://192.168.0.1
如果正常的话应该是desktop58.example.com和desktop67.example.com轮询出现,倘若出现只停留在你的一个页面,不管你如何刷都不行,原因是因为缓存的问题,在desktop12.example.com你需要先把主的HA/etc/init.d/pusle stop ,在备用的高可用的服务器上:/etc/init.d/pusle start(此时会正常访问,在desktop41上你可以通过:ipvsadm -l 查看调度列表,当你在将desktop12重启的时候不会自动转向主HA的,除非你将desktop41关闭,才会自动转向desktop12,arp -a/arp -e是用来查看缓存的)

同样的你可以添加vsftpd服务作为期中的一个,添加的过程如上述添加httpd服务一样的,同样的你可以产成如下代码:

 
  
  1. serial_no = 70 
  2. primary = 192.168.0.71 
  3. service = lvs 
  4. backup_active = 1 
  5. backup = 192.168.0.72 
  6. heartbeat = 1 
  7. heartbeat_port = 50001 
  8. keepalive = 2 
  9. deadtime = 10 
  10. network = direct 
  11. debug_level = NONE 
  12. monitor_links = 1 
  13. syncdaemon = 1 
  14. virtual web { 
  15.      active = 1 
  16.      address = 192.168.0.2 eth0:0 
  17.      vip_nmask = 255.255.255.255 
  18.      port = 80 
  19.      send = "GET / HTTP/1.0\r\n\r\n" 
  20.      expect = "HTTP" 
  21.      use_regex = 0 
  22.      load_monitor = none 
  23.      scheduler = rr 
  24.      protocol = tcp 
  25.      timeout = 6 
  26.      reentry = 15 
  27.      quiesce_server = 0 
  28.      server desktop73.example.com { 
  29.          address = 192.168.0.73 
  30.          active = 1 
  31.          port = 80 
  32.          weight = 1 
  33.      } 
  34.      server desktop74.example.com { 
  35.          address = 192.168.0.74 
  36.          active = 1 
  37.          port = 80 
  38.          weight = 1 
  39.      } 
  40. virtual ftp { 
  41.      active = 1 
  42.      address = 192.168.0.4 eth0:1 
  43.      vip_nmask = 255.255.255.255 
  44.      port = 21 
  45.      load_monitor = none 
  46.      scheduler = rr 
  47.      protocol = tcp 
  48.      timeout = 6 
  49.      reentry = 15 
  50.      quiesce_server = 0 
  51.      server desktop73.example.com { 
  52.          address = 192.168.0.73 
  53.          active = 1 
  54.          port = 21 
  55.          weight = 1 
  56.      } 
  57.      server desktop74.example.com { 
  58.          address = 192.168.0.74 
  59.          active = 1 
  60.          port = 21 
  61.          weight = 1 
  62.      }