设为首页 收藏本站
查看: 830|回复: 0

[经验分享] 基于heartbeat v1+ldirectord实现LVS的高可用

[复制链接]

尚未签到

发表于 2019-1-5 12:25:47 | 显示全部楼层 |阅读模式
  高可用集群简介

  高可用集群,即High Availability Cluster,其主要作用就是实现对服务器的故障检测和资源切换的自动化,尽量缩短由于服务器停止工作而造成的业务中断时间。服务器在运行过程中经常会由于计算机硬件或者软件的原因造成该服务器停止向外提供服务,在高可用集群软件的帮助下,备用节点可以自动检测到主节点的故障并将主节点上的资源转移过来,并立即向外提供服务,实现业务的自动切换。
  

  HA的框架
  
      最下层是基础事务层(Messaging Layer),主要用于传递集群事务信息、各节点的心跳信息,也包括了CRM层所有需要传递的信息,该类服务启动之后都监听在某一广播地址或组播地址上。在该层上解决的方案有heartbeat,corosync,cman(openais),这些服务需要运行在每一个节点上。

      Membership,主要用于管理这个集群的拓扑结构,并且将这个拓扑结构共享给上层的CRM做出相应的决策。这个层更多地用于管理当前集群的成员及成员的角色,包括决定哪一个节点为DC(Designated Coordinator协调员,一个集群中仅有一个DC)

      Resource Allocation,主要实现对资源的管理,包括定义资源,资源分组,资源约束。监控资源在某一个节点上的运行状况。其中policy engine用于做出集群事务策略,这个模块仅运行在DC上,Transition Engine模块用于执行policy engine做出的决策。该层的资源管理器(CRM)对资源的具体操作通过LRM(Local Resource Manager)实现,而LRM主要是通过执行/etc/init.d目录下的脚本完成响应的工作。这层的实现方案有haresources(heartbeat v1),crm(heartbeat v2),pacemaker   (heartbeat v3),rgmanager 。
  

  配置高可用集群的注意事项:
  1、集群中的各节点时间必须保持同步。

  2、节点与节点之间使用名称相互通信(配置/etc/hosts实现)
  3、ssh密钥认证实现无障碍通信
  4、提供仲裁设备(ping node)
  

  基于heartbeat v1+haresources实现LVS高可用集群
  实验中LVS的模型为NAT模型,通过heartbeat v1+haresource对Director实现高可用。使用ldirectord对后方的Real Server进行健康状况的监控。
  实验环境:
  时间服务器:192.168.1.118
  2台Director(node1,node2):VIP:192.168.1.200,DIP:192.168.2.200
  Real Server1:192.168.2.12

  Real Server2:192.168.2.6
  
  配置LVS环境
  在各Real Server上配置网关
[root@node1 ~]# ip route add default via 192.168.2.200  在Director上开启转发功能(主备节点)

[root@vm1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward  

  时间同步

  时间服务器上:

[root@vm1 ~]# vim /etc/ntp.conf
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap   #仅允许本网段的进行时间同步
......
server cn.pool.ntp.org                  #指定更高级别的时间服务器
server 0.cn.pool.ntp.org
server 127.127.1.0                      #若访问不了前面几个服务,则使用本地的系统时间作为标
fudge 127.127.1.0 stratum 10            #准时间提供给客户端[root@vm1 ~]# ntpstat
synchronised to NTP server (202.118.1.81) at stratum 3
   time correct to within 84 ms
   polling server every 512 s  

  集群中的各节点:
[root@node1 ~]# vim /etc/ntp.conf
......
server 192.168.2.8
[root@node1 ha.d]# ntpstat
synchronised to NTP server (192.168.2.8) at stratum 4           #时间已同步  

  配置/etc/hosts,使双方能基于主机名相互通信
[root@node2 ~]# vim /etc/hosts
192.168.1.116   node1
192.168.1.117   node2  

  ssh密钥认证,双方无障碍通信
[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
[root@node2 ~]# ssh-keygen -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1  配置完无障碍通信之后,测试下两边时间是否同步
[root@node1 ha.d]# ssh node2 'date'; date
Wed Aug  5 23:49:43 CST 2015
Wed Aug  5 23:49:43 CST 2015  

  安装对应的包,编辑配置文件
  在集群的每个节点中安装这些软件包。
[root@node1 heartbeat]# yum install perl-TimeDate PyXML libnet net-snmp-libs heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
[root@node2 heartbeat]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm  heartbeat-ldirectord程序包主要是提供ldirectord程序。ldirectord程序在启动时自动建立IPVS表,然后监视集群节点的健康情况,在发现失效节点时将其自动从IPVS表中移除。
  主配置文件:/etc/ha.d/ha.cf
  认证密钥:/etc/ha.d/authkeys
  用于定义资源的文件:/etc/ha.d/haresources
  ldirectord的配置文件:/etc/ha.d/ldirectord.cf
  默认情况下/etc/ha.d目录中没有上述的这几个文件,需要复制样例文件到此目录下,然后修改/etc/ha.d/authkeys文件的权限为400或600,若权限大于这个值,heartbeat 将无发启动。
[root@node1 ha.d]# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} ./ -p
[root@node1 ha.d]# chmod 600 authkeys
[root@node1 ha.d]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d  
  

  编辑主配置文件/etc/ha.d/ha.cf(其他都使用默认配置)
logfile /var/log/ha-log                   #日志文件
keepalive 2                               #每2秒传递一次心跳信息
udpport 694                               #各节点之间通信用的端口
mcast eth0 230.0.120.1 694 1 0            #多播地址
auto_failback on                          #自动切回
node    node1                             #各节点定义
node    node2
ping 192.168.1.1                          #选择ping节点,仲裁设备
compression     bz2                       #对传递的信息进行压缩
compression_threshold 2                   #超过2K的信息才进行压缩  编辑authkeys,各节点传递信息时需要做认证会用到该文件
[root@node2 heartbeat]# openssl rand -hex 8        #生成随机码
4ece364b077efd89
[root@node1 ha.d]# vim authkeys
#auth 1
#1 crc
#2 sha1 HI!
#3 md5 Hello!
auth 1                        #选择哪一种加密方式
1 sha1 4ece364b077efd89       #加密算法序号    加密算法    随机码  配置ldirectord(/etc/ha.d/ldirectord.cf),#http virtual service下面的参数即定义了一个集群服务,包括VIP,RIP,LVS模型及调度算法。在定义资源时只需要定义ldirectord服务(不需要ipvsadm)即可,在ldirectord在启动时会调用ipvsadm完成集群服务的添加。
# Global Directives               #全局配置,对所有的virtual都有效
checktimeout=3                    #探测real server的超时时长
checkinterval=1                   #每一次探测的时间间隔
#fallback=127.0.0.1:80
autoreload=yes                      #更改了配置文件会自动载入
#logfile="/var/log/ldirectord.log"  #自己维护一个日志文件
#logfile="local0"                   #使用syslog记录日志
#emailalert="admin@x.y.z"
#emailalertfreq=3600                #发送邮件的时间间隔
#emailalertstatus=all
quiescent=yes                       #是否工作在静默模式下。
#http virtual service
virtual=192.168.1.200:80                 #vip
        real=192.168.2.12:80 masq        #各real server,gate表示DR模型,masq为NAT模型
        real=192.168.2.6:80 masq
        fallback=127.0.0.1:80 masq
        service=http                     #检查Real Server健康状况时使用的协议
        request="test.html"              #检查时,请求的页面
        receive="ok"                     #期望页面中包含的数据
        scheduler=rr                     #调度器
        #persistent=600                  #是否使用持久连接,600是持久时长
        #netmask=255.255.255.255
        protocol=tcp                      #基于TCP协议探测
        checktype=negotiate               #探测方式
        checkport=80                      #探测的端口  配置完成后,不要忘了在各个Real Server上httpd的DocumentRoot目录中添加测试页面,测试页面中包含request指定的信息。若配置了fallback,需要在每个节点上启动httpd服务,并添加index.html页面,当所有后方的Real Server都停止服务时,这个页面能给予用户提示信息。
各个Real Server
[root@node1 ~]# vim /httpd_dir/test.html
ok
各集群节点上
[root@node1 ha.d]# vim /var/www/html/index.html
Sorry  

  在/etc/ha.d/haresources文件中定义资源
  
  格式:
  主节点    IP/mask/iface    resource         #主节点后面的都为资源,资源与资源之间用空格或tab隔开。
[root@node2 ~]# vim /etc/ha.d/haresources
node1   192.168.1.200/24/eth0   192.168.2.200/24/eth1   ldirectord::/etc/ha.d/ldirectord.cf  ldirectord在启动时需要指定配置文件。每一行定义一组资源,当主节点出现故障时,这一组资源会统统转移至备节点上。上述192.168.1.200为VIP,192.168.2.200为DIP。
  

  复制4个配置文件至其他节点(-p保留权限)
[root@node1 ha.d]# scp -p haresources ha.cf authkeys ldirectord.cf root@node2:/etc/ha.d/  关闭各节点上ldirectord服务并确保开机不自动启动。

[root@node1 ha.d]# chkconfig ldirectord off ; ssh node2 'chkconfig ldirectord off'  

  启动服务进行测试

[root@node1 ha.d]# service heartbeat start ; ssh node2 'service heartbeat start'  主节点上:

  对应的VIP,DIP和集群服务已经启用!!!
  

  让主节点停止提供服务(模仿服务器故障)
[root@node1 ha.d]# /usr/lib64/heartbeat/hb_standby
2015/08/06_01:17:42 Going standby [all].  
  对应的资源已转移至node2上。
  停止后方的一台Real Server(RealS1)上的httpd服务
[root@node1 ~]# service httpd stop
Stopping httpd:                                            [  OK  ]  

  前端的Director上已将该Real Server标注为不可用(Weight=0),且仅能访问到Real Server2的页面。将Real Server2上的httpd服务也停止,这时候就只有fallback页面的信息了。

  测试完成.................^_^




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659652-1-1.html 上篇帖子: Heartbeat + LVS + ldirectord构建可伸缩网络服务 下篇帖子: heartbeat+ldirector 构建高可用LVS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表