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

[经验分享] 基于keepalived构建 LVS

[复制链接]

尚未签到

发表于 2018-12-30 15:02:09 | 显示全部楼层 |阅读模式
  

   一、 理论部分:

      keepalived通过虚拟路由器、主路由器、虚拟IP、虚拟MAC的方式来完成一个虚拟路由器的管理;在vrrp当中有很多术语,这些术语描述了一个vrrp的工作过程;在vrrp的工作模式当中常见的有:

      主/备    主/主(主/备,备/主),  
     (1) vrrp_script:能够自定义一个资源监控脚本;这个脚本可以作为vrrp实例当中去追踪作为其优先级高低判断或计算的一个基本标准;
          通过vrrp实例或进程能根据脚本状态返回值来判定这个服务是成功的还是失败的基本依据;并且能够在脚本执行成功时,使得相应的节点的优先级提升,或者,在失败时使得相应的节点的优先级通过计算以后降低;降低到什么程度?
          比如对于一个主节点来讲我可以运行两个资源,第一,是定义在网卡上的IP地址,第二,是我们所监控的一个nginx服务,我们不断的通过一个脚本去探测nginx所监听的80端口,或者是nginx中的某个资源是否能够正常访问,如果能够正常访问的话,那就一切不动,如果发现nginx服务访问不了的时候,它就会尝试着借助于在vrrp实例当中有一个track_script(追踪脚本),根据track_script中的定义,是的我们当前节点的优先级减去一个数值;减得以后的结果会低于BACKUP节点,因此这样子,他在向外通告时,通告的优先级就低于BACKUP节点,所以这时候BACKUP节点就会取而代之;
          公共定义,可被多个实例调用,因此,vrrp_script定义在vrrp实例之外;

      (2)track_script:跟踪脚本;调用vrrp_script定义的脚本去监控资源;还能够在监控的过程当中,一旦发现脚本成功了,能够使得优先级升高,失败了,就能够使得优先级降低,从而完成向外通告时,通告一个较高的优先级,或较低的优先级,完成所谓的节点角色转换。

          track_script定义在实例之内,调用事先定义好的vrrp_script;
         使用实例1:要在实例之外定义chk_down,在实例之内调用chk_down;

              vrrp_script chk_dowm{

                  script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"    ##判断/etc/keepalived/目录下是否由down文件,如果有就退出;

                  interval 2                   ##每隔多久检测一次;

                  weight -5                    ##检测失败时把权重降低5,检测成功,权重不变;

              }

              track_script {

                  chk_down

              }

         使用实例2:如果监控服务具体的进程;

  
  vrrp_script chk_httpd {
  

  
      script "killall -0 httpd"
  

  
      interval 2
  

  
      weight -5
  

  }
  track_script {           ##如果有多个脚本一同使用的话在track_script添加多个脚本的调用即可;
  chk_httpd
  }
  


DSC0000.gif
  
二、keepalived构建 LVS-DR的主主模型
      拓扑:
  
  环境:
  
Name
ip address
主/备
VIP:172.18.200.6
备/主
VIP:172.18.100.5
Real Server1
  VIP(1):172.18.200.6/32   

  VIP(2):172.18.200.5/32
  RIP:172.18.100.100/16
Real Server2
  VIP(1):172.18.200.6/32   

  VIP(2):172.18.200.5/32
  RIP:172.18.100.110/16
  

      操作步骤:      
          (1)各节点时间同步;
              ##yum -y install keepalived #前端两台主机都要安装;
              ##ntpdate 172.18.0.1        #同步时间; 两个节点都要同步;
              ##crontab -e       #创建计划任务,每5分钟同步一次时间;  两个节点都要同步;
              */5 * * * * /usr/sbin/ntpdate 172.18.0.1 &> /dev/null   
           (2)确保iptables及selinux不会阻碍;
             (3)定义俩节点配置,并启动之;

                  在主备节点上面修改配置文件:
          #vim /etv/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
       root@localhost
   }
   notification_email_from kaadmin@magedu.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.0.100.18
}
vrrp_script chk_down {
    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
    interval 2
    weight 5
}
vrrp_script chk_httpd {
    script "killall -0 httpd"
    interval 2
    weight -5
}
vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pBkfC1ax
    }
    virtual_ipaddress {
    172.18.200.6 dev eno16777736 label eno16777736:0
    }
    track_script {
    chk_down
    }
    notify_master "/etc/keepalived/notify.sh master"   
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 {               
    state BACKUP
    interface eno16777736
    virtual_router_id 60
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pBkfC1ab
    }
    virtual_ipaddress {
        172.18.200.5 dev eno16777736 label eno16777736:1
    }
    track_script {
        chk_down
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 172.18.200.6 80 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.18.200.100 80 {
        weight 1
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.18.200.110 80 {
        weight 2
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 172.18.200.5 80 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.18.200.100 80 {
        weight 1
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.18.200.110 80 {
        weight 2
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}          在备主节点上面修改配置文件:
          #vim /etv/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
       root@localhost
   }
   notification_email_from kaadmin@magedu.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
   vrrp_mcast_group4 224.0.100.18
}
vrrp_script chk_down {
    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
    interval 2
    weight 5
}
vrrp_script chk_httpd {
    script "killall -0 httpd"
    interval 2
    weight -5
}
vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pBkfC1ax
    }
    virtual_ipaddress {
    172.18.200.6 dev eno16777736 label eno16777736:0
    }
    track_script {
    chk_down
    }
    notify_master "/etc/keepalived/notify.sh master"   
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 60
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pBkfC1ab
    }
    virtual_ipaddress {
        172.18.200.5 dev eno16777736 label eno16777736:1
    }
    track_script {
        chk_down
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 172.18.200.6 80 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.18.200.100 80 {
        weight 1
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.18.200.110 80 {
        weight 2
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 172.18.200.5 80 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.18.200.100 80 {
        weight 1
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.18.200.110 80 {
        weight 2
        HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}              ##systemctl start keepalived.servcie
      测试一下:
          主备节点:
          
            备主节点:

             (4)在Real Server上配置:
  
                  在各real server节点上添加VIP:
  #ifconfig lo:0 172.18.200.6 netmask 255.255.255.255 broadcast 172.18.200.6

  #ifconfig lo:1 172.18.200.5 netmask 255.255.255.255 broadcast 172.18.200.5
  # route add -host 172.18.200.6 dev lo:0
  # route add -host 172.18.200.5 dev lo:1
            限制响应级别和通告级别:
                  #echo 1> /proc/sys/net/ipv4/conf/all/arp_ignore

                  #echo 1> /proc/sys/net/ipv4/conf/lo/arp_ignore

                  #echo 2> /proc/sys/net/ipv4/conf/all/arp_announce

                  #echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce
          (5)测试

     

  


  

          写的不好之处请各路大神多多指点,互相交流学习!

          下一遍聊聊运维自动化工具之一:Ansible  (待续......)





运维网声明 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-657675-1-1.html 上篇帖子: keepAlived+nginx实现高可用双主模型LVS 下篇帖子: mysql5.6
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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