leonheart 发表于 2019-1-3 09:40:33

WEB Lvs Director DR实现高可用(corosync)

  废话不多说,直接开始,整体规划如下:
http://blog.运维网.com/attachment/201208/233309916.jpg
  实验通过虚拟机实现,基于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资源的类型


[*]# 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的配置文件路径,和命令路径




页: [1]
查看完整版本: WEB Lvs Director DR实现高可用(corosync)