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

[经验分享] 一步步教你为LVS中的Director实现高可用集群

[复制链接]

尚未签到

发表于 2019-1-6 06:08:53 | 显示全部楼层 |阅读模式
  Director对于LVS来说,是重中之重,所有对服务的请求都要经过它 向他身后提供服务的集群进行转发,但它也是LVS高负载均衡集群的不稳定因素,如果Director主机宕机,后方的服务集群也就不能够提供服务了,这是坚决不允许出现的情况,因此我们可以通过为Director提供高可用集群服务来保证当一个Director宕机之后,还有其它的Director可以替代提供服务,知道宕机的Director重新恢复。   
        我们使用高可用集群解决方案之一 ——Heartbeat来实现这个目的     
        我们先来考虑一个问题,当Director的主节点宕机之后,必须要将资源转移到备节点上,否则备节点也只是摆设,并不能替代宕机的主节点来完成Director的工作。关键就在这个资源转移的方法上。     
         Heartbeat为LVS中的Director实现高可用集群量身定做了套解决方案,我们只需要在Heartbeat的几个配置文件中进行简单的配置,我们所需要的目的都统统能够实现,不仅如此,它自身还具备了帮我们检测后方服务集群中主机服务状态的功能,简直让我们喜出望外,下面我们就通过一个简单的实验来阐明这个观点。
         实验拓扑如图:   
              
        我们要实现的LVS的类型为DR,即直接路由     
        route为连接外网的路由器,switch为内网中的交换机,RS1、RS2为提供web服务的集群,直接和交换机相连,ND1、ND2为LVS中的两个Director节点,我们要对这连个Director节点实现高可用集群服务,两个Director和交换机直接相连之外,两个节点之间还需要直接连接进行心跳等基本信息的传递。     
        每个有标记的块状物为网卡,上面是编号,在连个ND节点之间有一个被称为资源一部分的VIP在哪个节点上是不固定的,外网的用户也是通过这个VIP来访问我们的web服务的。

  开始配置:  设定VIP为192.168.0.85/24
  一、我们先来RS1和RS2让其称为一个web服务的集群   
      
     1、对RS1的配置
  (1)、对realserver配置内核参数:   
                  先来解释一下修改内核参数的原因,因为在DR模型中RS1、RS2在lo:0上都配置了VIP的地址,是为了在数据包响应用户的时候源地址为用户访问的VIP地址,但是在数据包进入路由器之后,在我们的内网中有多个VIP地址,路由器将不能将其转发到应该得到数据包的ND上,为了避免这种情况出现,我们就修改内核参数来让RS上的VIP网卡不对路由器的产生响应即可。      
                 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore   
                 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore   
                 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce   
                 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  (2)、为RS1配置虚拟的VIP地址(是为了实现在数据包返回用户的时候源地址为用户访问的地址)   
                 ifconfig lo:0 192.168.0.85 broadcast 192.168.0.85 netmask 255.255.255.255 up   
                   为RS1的eth0网卡添加地址   
                 ifconfig eth0 192.168.0.206/24
  (3)、给realserver主机添加路由信息   
                route add -host 192.168.0.85 dev lo:0  设定相应的数据包的源地址都为这个地址
  (4)、为RS1安装web服务   
                yum install php php-mbstring mysql mysql-server httpd php-mysql  
      (5)、为实现结果为web指定一个有其代号的网页,并写一个有ok的测试网页   
                echo RS1 > /var/www/html/index.html   
                echo ok > /var/www/html/.ok.html
      (6)、测试httpd服务能否正常运行,测试结果如下:




      2、对RS2进行配置   
          (1)、RS2的eth0端口配置   
                   ifconfig eth0 192.168.0.207/24   
          (2)、写入网页   
                   echo RS2 > /var/www/html/index.html   
           其他配置和RS1完全一样,不再演示:   
           对RS2的web服务进行验证,结果如下:   
               

  二、对两个Director节点进行配置:
  配置两个Director节点,ND1为node1,ND2为node2
  1、给node1配置地址   
       ifconfig eth0 192.168.0.202/24  
       ifconfig eth1 1.1.1.1     
           给noid2配置地址     
       ifconfig eth0 192.168.0.204/24  
       ifconfig eth1 1.1.1.2
  2、配置本地主机名称解析
  在node1上   
       vim /etc/hosts 添加如下内容     
      192.168.0.202 node1.a.org     
      192.168.0.204 node2.a.org
  对node1、node2的主机名进行相应的修改   
       在node1上  
       hostname node1.a.org     
       在node2上  
       hostname node2.a.org
  3、只有我们要多次在连个节点间拷贝文件,为了省去繁琐的密码输入,我们在两个节点上进行如下配置
  在node1上   
       ssh-keygen -t rsa     
       ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.204     
       在node2上  
       ssh-keygen -t rsa     
       ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.202     
       从此我们在两个节点上拷贝文件就不需要输入密码了
  4、开始安装集群服务
  (1)、下载安装包   
        heartbeat-ldirectord-2.1.4-9.el5.i386.rpm     
        perl-MailTools-1.77-1.el5.noarch.rpm   
        heartbeat-2.1.4-9.el5.i386.rpm   
        heartbeat-pils-2.1.4-10.el5.i386.rpm   
        heartbeat-devel-2.1.4-9.el5.i386.rpm   
        heartbeat-stonith-2.1.4-10.el5.i386.rpm   
        heartbeat-gui-2.1.4-9.el5.i386.rpm  
        libnet-1.1.4-3.el5.i386.rpm   
        创建一个目录将所用的安装包都放在这个目录内     
       mkdir node  
        将软件包移动进目录的命令我就不再说明了
  (2)、安装 这些软件包,因为他们之间有依赖关系,所以使用yum安装
  cd node   
        yum localinstall * --nogpgcheck –y
  前两步需要在两个节点上都进行同样的操作
  (3)、将heartbeat的配置文件移动到/etc/下   
        cd /usr/share/doc/hearbeat-2.1.4     
        cp ha.cf  authkeys /etc/ha.d   
        cd /usr/share/doc/heartbeat-ldirectord-2.1.4   
        cp   ldirectord.cf  /etc/ha.d/
  (4)、编辑配置文件/etc/ha.d/ha.cf
  vim /etc/ha.d/ha.cf 进行如下修改  
        打开日志 logfile /var/log/ha-log     
        打开 udpport 694 两节点用此端口发送心跳信息     
        添加 bcast eth1 发送心跳信息的网卡     
        添加定义节点 node node1.a.org     
       node node2.a.org
  (5)、编辑配置文件/etc/ha.d/authkeys   
        vim /etc/ha.d/authkeys 添加如下内容     
        auth 2     
        2 sha1 kfhslkdhfsk(md5加密后的字符串,想要得到这个字符串运行如下命令,在将结果粘贴即可  
       dd if=/dev/urandom bs=512 count=1 | md5sum)
  将此文件的权限改为400   
       chmod 400 authkeys
  (6)、编辑配置文件/etc/ha.d/ldirectord.cf   
      修改结果如下:   
      checktimeout=3   对后端的RS进行服务状态检测的超时时间   
      checkinterval=1    每次一秒检测一次   
      autoreload=yes   
      logfile="/var/log/ldirectord.log"  开启错误日志   
      quiescent=yes
  virtual=192.168.0.85:80   指定VIP地址   
        real=192.168.206:80 gate 200     指定RS1的IP、服务端口、lvs的类型、权重(实际的大小为*100)   
        real=192.168.207:80 gate 600   
        fallback=127.0.0.1:80 gate   
        service=http      提供的服务   
        request=".ok.html"    对RS进行状态检测是检测的网页   
        receive="ok"               在网页中搜索的关键字,只要找到这个关键字就认为是服务正常   
        scheduler=rr   LVS使用的调度算法   
        protocol=tcp    使用的协议   
        checktype=negotiate    检测的类型   
        checkport=80    检测的端口   

  (7)、将我们配置的这三个文件拷贝到node2上
  cd /etc/ha.d   
        scp ha.cf authkeys ldirectord node2.a.org:/etc/ha.d
  (8)、启动heartbeat   
        在哪个节点上启动第一个该服务,以后所有的这个服务必须在这个节点上启动     
        我们就在node1上启动heartbeat服务     
         /etc/init.d/heartbeat start  
        在node1上启动node2的heartbeat服务     
        ssh node2 --‘/etc/init.d/heartbeat start’   
    (9)、在每个节点上都启动ldirectord服务   
         service ldirectord  start
  查看我们的Director高可用集群是否正常启动:   
      执行命令:   
      crm_mon   
      可能刚开始看到的显示为:   
         
       表示没有启动,但是别急多等一会,比较慢,我们过一会再看,如果看到显示如下表示成功:   
         
        图片底部的信息表示Director的主节点为ND1   
      
      接下来我们在浏览器中输入192.168.0.85进行测试,看能够看到网页,如果看到表示LVS的服务正常:   
         

  我们将主节点的服务关闭,看资源是否成功流转到ND2上   
      在node1上执行  /etc/init.d/heartbeat stop
  至执行成功之后到node2上,在此查看资源状态   
           
        结果显示,node1已经宕机,此时node2已经称为主节点
  我们再次验证,Director高性能集群能否提供LVS功能:   
        继续在浏览器中数据192.168.0.85   
            
         结果显示,RS集群还能够提供web服务,表示Director集群依然能够正常工作




运维网声明 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-659762-1-1.html 上篇帖子: 用轮调算法配置集群LVS 下篇帖子: 例题解析LVS:NAT和DR模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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