扩展知识四
搭建负载均衡服务器中director的高可用(IPVS),此方法并不能对realserver进行健康状态检查,对于后端realserver故障,director并不知道,并继续进行转发请求造成问题。
前提条件:(多节点使用相同配置)
1、关闭路由器
2、关闭selinux
3、关闭开机启动ipvsadm服务
4、时间同步
5、ssh互信
6、DNS解析
7、事先定义好ipvsadm策略
具体步骤:
1、安装ipvsadm软件包
2、创建dr模型,并将realserver添加进去
[root@node2.dtedu.com ~]# ifconfig eth0:1 add 192.168.1.16 netmask 255.255.255.0
[root@node2.dtedu.com ~]# ipvsadm -A -t 192.168.1.16:80 -s rr
[root@node2.dtedu.com ~]# ipvsadm -a -t 192.168.1.16:80 -r 10.40.0.45 -g
[root@node2.dtedu.com ~]# ipvsadm -a -t 192.168.1.16:80 -r 10.40.0.44 -g
[root@node2.dtedu.com ~]# 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.1.16:80 rr
-> 10.40.0.44:80 Route 1 0 0
-> 10.40.0.45:80 Route 1 0 0
3、将配置文件同步到其他节点上
[root@node2.dtedu.com ~]# scp /etc/sysconfig/ipvsadm node3:/etc/sysconfig/ipvsadm
ipvsadm 100% 122 0.1KB/s 00:00
[root@node2.dtedu.com ~]#
4、关闭开机启动服务
[root@node2.dtedu.com ~]# chkconfig ipvsadm --list
ipvsadm 0:关闭1:关闭2:关闭3:关闭4:关闭5:关闭6:关闭
扩展知识五
针对realserver进行健康状态检查。
1、ping检查
2、http服务的curl检查
3、ldirectord,针对ipvs的监控工具,实际是一个heartbeat的模块,可以自动生成vip、健康检查
1、安装heartbeat-ldirectord-2.1.4.rpm包。yum安装以解决依赖关系
[root@node2.dtedu.com ~]# yum localinstall heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
查看安装文件明细。
[root@node2.dtedu.com ~]# rpm -ql heartbeat-ldirectord
/etc/ha.d/resource.d/ldirectord配置脚本
/etc/init.d/ldirectord服务启动脚本
/etc/logrotate.d/ldirectord日志文件
/usr/sbin/ldirectord执行命令
/usr/share/doc/heartbeat-ldirectord-2.1.4
/usr/share/doc/heartbeat-ldirectord-2.1.4/COPYING
/usr/share/doc/heartbeat-ldirectord-2.1.4/README
/usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf配置脚本模板
/usr/share/man/man8/ldirectord.8.gz帮助文档
2、配置文件介绍
# Global Directives
checktimeout=3设置检测超时时间
checkinterval=1设置检测时间间隔
#fallback=127.0.0.1:80
autoreload=yes设置自动重新加载修改后配置文件
#logfile="/var/log/ldirectord.log”指定日志文件位置(二选一)
#logfile=“local0"指定日志文件位置(二选一),此为系统日志文件/var/log/message
#emailalert="admin@x.y.z”指定邮件接收者
#emailalertfreq=3600
#emailalertstatus=all通知级别
quiescent=no静默模式工作,建议改成no
# Sample for an http virtual service
virtual=192.168.6.240:80虚拟服务,就是vip了
real=192.168.6.2:80 gate 2realserver服务器的ip地址,gate是dr模型,masq是nat模型,gate后面定义权重。
real=192.168.6.3:80 gate 4
real=192.168.6.6:80 gate
fallback=127.0.0.1:80 gate
service=http对checktype的检查说明,同negotiate配合使用,用来协商说明具体那种类型的服务,常见的有dns、ftp、http、imap、imaps、ldap、mysql、pop、redius、smtp等。
request=“index.html”用来定义realserver是否存在的健康检查网页
receive="Test Page”检查匹配内容
virtualhost=some.domain.com.au
scheduler=rr调度算法
#persistent=600持久链接时间
#netmask=255.255.255.255
protocol=tcpipvs使用的协议。
checktype=negotiate健康状态检查方式:negotiate(协商),connect(检查是否能够连接),external(调用自己写的脚本),checktimeout(超时时间检查),off,on,ping
checkport=80
request="index.html"
receive="Test Page"
virtualhost=www.x.y.z
搭建环境要求:ipvs的director实现高可用,并且当realserver不可用时,可以实现健康状态检查,并从ipvs表中关闭故障realserver,如果没有realserver可用的情况下,实现director可以发送网页故障之类的提示信息,并可以实现故障恢复后自动切换。
定义director1和director2的网卡
[root@node2.dtedu.com ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:9A:C8:A6
inet addr:10.40.0.225 Bcast:10.40.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe9a:c8a6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12255 errors:0 dropped:0 overruns:0 frame:0
TX packets:463 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:789505 (771.0 KiB) TX bytes:79766 (77.8 KiB)
Interrupt:19 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:0C:29:9A:C8:B0
inet addr:192.168.1.22 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe9a:c8b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1049 errors:0 dropped:0 overruns:0 frame:0
TX packets:1044 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:86326 (84.3 KiB) TX bytes:68831 (67.2 KiB)
Interrupt:19 Base address:0x2080
eth0 Link encap:Ethernet HWaddr 00:0C:29:FA:4C:6E
inet addr:10.40.0.226 Bcast:10.40.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10953 errors:0 dropped:0 overruns:0 frame:0
TX packets:487 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:694698 (678.4 KiB) TX bytes:24157 (23.5 KiB)
Interrupt:19 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:0C:29:FA:4C:78
inet addr:192.168.1.23 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1176 errors:0 dropped:0 overruns:0 frame:0
TX packets:413 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:72322 (70.6 KiB) TX bytes:18582 (18.1 KiB)
Interrupt:19 Base address:0x2080
安装ipvsadm软件包。
[root@node2.dtedu.com ~]# rpm -ql ipvsadm
/etc/rc.d/init.d/ipvsadm
/etc/sysconfig/ipvsadm-config
/sbin/ipvsadm
/sbin/ipvsadm-restore
/sbin/ipvsadm-save
/usr/share/doc/ipvsadm-1.26
/usr/share/doc/ipvsadm-1.26/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
创建director的httpd服务,并创建报错网页,复制一份到其他direcotr上,主机间的dns识别,ssh互信
[root@node2.dtedu.com ~]# vi /var/www/html/index.html
[root@node2.dtedu.com ~]# scp /var/www/html/index.html 10.40.0.226:/var/www/html/
[root@node3.dtedu.com ~]# ssh-copy-id 10.40.0.225
[root@node2.dtedu.com ~]# service httpd start
Starting httpd: [ OK ]
[root@node2.dtedu.com ~]# curl 10.40.0.225
<h1>东田教育网站维护中</h1>
配置ldirectord的配置文件,从/usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf复制到/etc/ha.d/目录下。
checktimeout=3
checkinterval=1
autoreload=yes
logfile="/var/log/ldirectord.log"
emailalert="gongbing_shenlan@163.com"
emailalertfreq=3600
emailalertstatus=all
quiescent=no
virtual=10.40.0.223:80
real=192.168.1.30:80 gate
real=192.168.1.31:80 gate
real=192.168.1.32:80 gate
fallback=127.0.0.1:80 gate
service=http
request=“.test.html"
receive="Test Page"
virtualhost=10.40.0.223
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
#request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z
crm界面配置截图:
配置realserver服务器:
[root@node1.dtedu.com~]$ifconfig eth0 192.168.1.30 netmask 255.255.255.0
[root@node1.dtedu.com~]$route add default gw 192.168.1.1
[root@node1.dtedu.com~]$echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1.dtedu.com~]$echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1.dtedu.com~]$echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node1.dtedu.com~]$echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node1.dtedu.com~]$ifconfig lo:0 10.40.0.223 broadcast 10.40.0.223 netmask 255.255.255.255
[root@node1.dtedu.com~]$route add -host 10.40.0.223 dev lo:0
[root@node1.dtedu.com~]$route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.40.0.223 * 255.255.255.255 UH 0 0 0 lo
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
[root@node1.dtedu.com~]$ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:8E:E0:1F
inet addr:192.168.1.30 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe8e:e01f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5918 errors:0 dropped:0 overruns:0 frame:0
TX packets:1827 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:432617 (422.4 KiB) TX bytes:305614 (298.4 KiB)
Interrupt:19 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
lo:0 Link encap:Local Loopback
inet addr:10.40.0.223 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
创建用于director服务器监控realserver服务器监控状况的页面文件,需要自己定义网页名称和内容,要和ldirecotrd.cf中的require,receive一致。
realserver端:
[root@node1.dtedu.com~]$vi /var/www/html/.test.html
director端:
virtual=10.40.0.223:80
real=192.168.1.30:80 gate
real=192.168.1.31:80 gate
real=192.168.1.32:80 gate
fallback=127.0.0.1:80 gate
service=http
request=".test.html"
receive="Test Page"
virtualhost=10.40.0.223
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
director端显示realserver连接情况,quiescent=0将故障realserver从ipvsadm列表中删除。
[root@node6.dtedu.com ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.40.0.223:80 rr
-> 192.168.1.30:80 Route 1 0 0
参考文献:
回顾:
高可用应用程序:
heartbeat
corosync
rhcs
keepalived
资源管理器:
heartbeat v1:haresources
信息和成员层:/etc/ha.d/ha.cf
资源管理器层:/etc/ha.d/haresources
heartbeat v2:crm
信息和成员层:/etc/ha.d/ha.cf
资源管理器层:/var/lib/heartbeat/crm/cib.xml
heartbeat v3:pacemaker
rhcs cman:rgmanager
资源代理(RA)
安装类别分:
heartbeat v1 legacy
ocf
heartbeat
pacemaker
linbit
redhat
lsb
stonith
策略引擎(PE):全局管理者
资源管理器的功能
资源约束:
location:资源对节点的偏好
colocation:资源运行在同一个节点的可能性
order:资源间启动顺序
资源的属性:
failover:资源故障跳转到其他节点
failback:故障资源节点恢复后是否回来
心跳信息传递
ucast:单播
mcast:多播,组播
bcast:广播
HA配置界面:
命令行界面:
crmsh:redhat6.3之前
pcs:redhat6.3之后
图形化界面:
hawk
pcs
conga
lcmc
hb_gui
pyGui
多节点间配置文件同步工具:
RHCS:ccs(红帽6中废弃了,取代者是ricci)
centos6.5实现高可用的方式:
1、corosync+pacemaker
2、heartbearv3+pacemaker
3、cman+rgmanager
4、cman+pacemaker
corosync有取代heartbeat的趋势,corosync从openais分类,已经发展到了2.0版本,目前corosync经常和pacemaker结合起来使用,pacemaker实现资源管理器的功能。另一种结合就是corosync+cman的方式,这种结合cman实现的功能就是高可用中的dc功能(选举功能),而cman的资源管理器是rgmanager。