废话不多说,直接开始,整体规划如下:
实验通过虚拟机实现,基于Red Hat 5.8来完成
1.资源分析
在做实验之前,首先要知道高可用用于分配的资源有哪些,由于我们做的是Lvs DR模型Director的高可用,用到得资源有两个:
1)VIP:用户用来访问
2)ipvsadm
清楚了需要分配的资源,做起来就明朗多了,在实现高可用之前,我们要首先保证我们的Lvs是可以正常工作的。
2.验证资源的可用性
2.1验证实现Lvs
1)RS的配置
关于RS上的web不需要过于复杂的配置,通过ip地址访问即可,为了达到能清楚了解实验结果的目的,将我们两台RS上的网页文件修改成不一致,使我们跟好看到效果
- #echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
- #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- 设定本地IP地址发出arp回应的限制级别,arp回应中的ip地址为设备上的ip地址,非发送地址,即vip
- #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
- #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- 定义对目标地址为本地IP的arp询问,本地的不用应答模式,只对arp查询的目标地址为来访接口的地址予以回应
- #ifconfig eth0 172.16.99.2/16
- #ifconfig lo:0 172.16.98.1 broadcast 172.16.98.1 netmask 255.255.255.255 up
- #route add -host 172.16.98.1 dev lo:0
- 设置路由,凡是对172.16.98.1的IP请求,都通过lo:0设备来响应
RS2的配置过程同上,其中RIP为172.16.99.2
2)DR的配置
- #yum install ipvsadm
- #ifconfig eth0 172.16.99.1/16
- #ifconfig eth0:0 172.16.98.1 broadcast 172.16.98.1 netmask 255.255.255.255 up
- #echo 1 > /proc/sys/net/ipv4/ip_forward
- 开启路由转发
- #ipvsadm -A -t 172.16.98.1:80 -s rr
- #ipvsadm -a -t 172.16.98.1 -r 172.16.99.2 -g
- #ipvsadm -a -t 172.16.98.1 -r 172.16.99.3 -g
打开网页通过vip172.16.98.1访问一下,验证Lvs
#ipvsadm -L
通过命令参看我们Director是否进行转发,通向将另一台备用的Director也进行如上的验证操作
3.高可用的配置
3.1高可用之前的准备
- (DC上的配置)
- #hostname node1.ying.com
- #vim /etc/hosts
- 172.16.99.2 node1.ying.com node1
- 172.16.99.3 node2.ying.com node2
- 节点之间是通过主机名来进行解析
- #ssh-keygen -t rsa
- #ssh-copy-id -i .ssh/id_rsa.pub root@node2
- 建立双机互信,方便操作,资源的开启关闭,不能直接通过在本机上设置,要通过DC来实现,当然必须你的备用Director已经改为node2了
- !!还有一点要注意的是,高可用主备之间,根据心跳信息的到达时间来判断DC的健康状态,所以主备之间的机器时间一定要保持一致。
3.2实现高可用
- #ipvsadm -S > /etc/sysconfig/ipvsadm
- 保存我们定义的策略,ipvsadm开启需要的文件
- #service ipvsadm stop
- #scp /etc/rc.d/init.d/ipvsadm node2:/etc/rc.d/init.d
- #scp /etc/sysconfig/ipvsadm node2:/etc/sysconfig
- #ssh node2 'service ipvsadm stop'
- (rpm包安装corosync+pacemaker)
- #yum -y --nogpgcheck install cluster-glue-1.0.6-1.6.el5.i386.rpm cluster-glue-libs-1.0.6-1.6.el5.i386.rpm corosync-1.2.7-1.1.el5.i386.rpm corosynclib-1.2.7-1.1.el5.i386.rpm heartbeat-3.0.3-2.3.el5.i386.rpm heartbeat-libs-3.0.3-2.3.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm pacemaker-1.1.5-1.1.el5.i386.rpm pacemaker-cts-1.1.5-1.1.el5.i386.rpm pacemaker-libs-1.1.5-1.1.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm resource-agents-1.0.4-1.1.el5.i386.rp
- #cd /etc/corosync
- #cp corosync.conf.example corosync.conf
- #vim corosync.conf
- secauth:on 心跳信息签名,如果确定高可用的就这2台设备,最好不要开启
- #to_syslog:yes 注释掉此行,并添加以下内容支持pacemaker
- service {
- ver:0
- name:pacemaker
- }
- #corosync-keygen 生成心跳信息签名文件
- #mkdir /var/log/cluster 创建日志文件
- #scp authkeys corosync.conf node2:/etc/corosync
- 在备Director上安装corosync后,将这两个文件考本过去,节省配置时间
- #service corosync start
- #ssh node2 'service corosync start'
- #crm 直接进入corosync的交互式界面
- crm(live)# configure
- crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=172.16.98.1
- crm(live)configure# primitive ipvsadm lsb:ipvsadm
- 定义两个资源
- crm(live)configure# colocation vip_with_ipvsadm inf: ipvsdm vip
- crm(live)configure# order ipvsadm_after_vip inf: vip ipvsadm
- 定义资源的排列约束和次序约束
- crm(live)configure# property no-quorum-policy=ignore
- 没有仲裁设备,所以设置忽略计票记过
- crm(live)configure# property stonith-enabled=false
- 因为没有stonith设备,会一直报错,取消掉并不影响实验
- crm(live)configure# verify 验证配置
- crm(live)configure# commit
- 提交配置到并同步到各个节点的CIB
- crm(live)configure# exit
- #crm_mon
- 配置完成,查看高可用工作信息,显示工作的节点和资源,以及资源工作的位置
- #crm node standby
- 将此节点设置为备用,再次使用上个命令查看下结果的不同
- #crm node online 上线
- #ssh node2 'crm node standby'
- 将节点2设置为备用
3.3扩展
通过监控RS状态来实时更改ipvsadm转发配置,避免RS出现异常Director依然转发,这里要用到的两个RPM包。
ldirectord-1.0.1-1.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
1)ldirectord的安装
- #yum -y --nogpgcheck install perl-MailTools-1.77-1.el5.noarch.rpm
- ldirectord-1.0.1-1.el5.i386.rpm
- # cp /usr/share/doc/ldirectord-1.0.1/ldirectord.cf /etc/ha.d/ld.cf
- 配置文件的名字可以自定义
- #vim /etc/ha.d/ld.cf
- virtual=172.16.98.1:80 指定集群VIP
- real=172.16.99.2:80 gate 添加的RS1
- real=172.16.9.3:80 gate 添加的RS2
- #fallback=127.0.0.1:80 gate 当访问的RS不存在,请求发到哪里
- service=http
- scheduler=rr
- #persistent=600
- #netmask=255.255.255.255
- protocol=tcp
- checktype=negotiate
- checkport=80
- request="test.html" ldirectord用来检查RS状态的网页文件,在网站根目录下创建
- receive="ok" 从网页文件中得到‘ok’字符,表示RS在线
- # virtualhost=www.x.y.z 没有定义就注释掉,没有影响
- #scp /etc/ha.d/ld.cf node2:/etc/ha.d/ldirectord.cf
- 安装好node2的软件,从node1上复制配置文件即可,节省时间
2)RS上web 页面的创建
#echo 'ok' > /var/www/html/text.html
3)DC上资源的配置
ldirectord的配置
- crm(live)configure#primitive ld lsb:ldirectord
- crm(live)configure#delete vip_with_ipvsadm
- crm(live)configure#colocation vip_ld_ipvsadm inf: vip_ld_ipvsadm
- crm(live)configure#verify
- crm(live)configure#commit
如果我们自定义了ldirectord配置文件的名字,改/etc/rc.d/init.d/ldirectord中配置文件路径,或者将ldirectord定义为ocf资源的类型
- [root@node1 ~]# crm
- crm(live)# ra
- crm(live)ra# meta ocf:heartbeat:ldirectord
- 对资源的配置有详细的说明
- crm(live)configure# primitive ld ocf:heartbeat:ldirectord params configfile=/path/ ldirectord=/path/
- 指定ldirectord的配置文件路径,和命令路径