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

[经验分享] Linux自学笔记——keepalived

[复制链接]

尚未签到

发表于 2018-12-29 09:29:45 | 显示全部楼层 |阅读模式
  本文部分参考博客:http://blog.运维网.com/1992tao/1869869
  一、        VRRP协议
1.      技术优点;
VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
VRRP具有如下优点:
  1)      简化网络管理。在具有多播或广播能力的局域网(如以太网)中,借助VRRP能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。
  2)      适应性强。VRRP报文封装在IP报文中,支持各种上层协议。
  3)      网络开销小。VRRP只定义了一种报文——VRRP通告报文,并且只有处于Master状态的路由器可以发送VRRP报文。
2.      相关术语
  1)      虚拟路由器:有一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当做默认网关。
  2)      VRID:虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器。
  3)      Master路由器:虚拟路由器中承担报文转发任务的路由器;
  4)      Backup路由器:Master路由器出现故障时,能够代替Master路由器工作的路由器。
  5)      虚拟IP地址:虚拟路由器的IP地址。一个虚拟路由器可以拥有一个或多个IP地址。
  6)      IP地址拥有者:接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者;
  7)      虚拟MAC地址:一个虚拟路由器拥有一个虚拟MAC地址。虚拟MAC地址的格式为00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址;
  8)      优先级:VRRP根据优先级来确定虚拟路由器中每台路由器的地位。
  9)      非抢占方式:如果Backup路由器工作在非抢占方式下,则只要Master路由器没有出现故障,Backup路由器即是随后被配置了更高的优先级也不会称为Master路由器;
  10)  抢占方式:如果Backup路由器工作在抢占方式下,当它收到VRRP报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master路由器优先级高,就会主动抢占成为Master路由器;否则,保持Backup状态。
3.      VRRP工作过程
虚拟路由器示意图:
   
VRRP工作过程为:
    1)      虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;
    2)      Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;
    3)      如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;
    4)      虚拟路由器状态发生切换时,Master路由器由一台设备切换为另一台设备,新的Master路由器只是简单的发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。
    5)      Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式决定是否重新选举Master。
         由此可见,为了保证Master路由器和Backup路由器能够协调工作,VRRP需要实现以下功能:
                Master路由器的选举;
                Master路由器状态的通告;
                同时,为了提高安全性,VRRP还提供了认证功能;
4.      Master路由器的选举
VRRP根据优先级来确定虚拟路由器中的每台路由器的角色(Master路由器或者Backup路由器)。优先级越高,则越有可能称为Master路由器。
初始化创建路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级;
    1)      如果VRRP报文中Master路由器的优先级高于自己的优先级,则路由器保持在Backup状态;
    2)      如果VRRP报文中Master路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占称为Master状态,周期性发送VRRP报文,采用非抢占工作方式的路由器仍保持Backup状态;
    3)      如果在一定时间内没有收到VRRP报文,则路由器切换为Master状态。
VRRP优先级的取值范围为0-255(数值越大表明优先级越高),可配置的范围是1-254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给ip地址拥有者使用。当路由为IP地址拥有者时,其优先级始终为255.因此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
5.      Master路由器的状态的通告。
Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作正常。
Master路由器主动放弃Master地位(如Master路由器退出虚拟路由器)时,会发送优先级为0的VRRP报文,致使Backup路由器快速切换变成Master路由器。这个切换的时间称为Skew time,计算方式为:(256-Backup路由器的优先级)/256,单位为秒。
当Master路由器发生网络故障而不能发送VRRP报文的时候,Backup路由器并不能立即知道其工作状况。Backup路由器等待一段时间之后,如果还没有接收到VRRP报文,那么会认为Master路由器无法正常工作,而把自己升级为Master路由器,周期性发送VRRP报文。如果此时多个Backup路由器竞争Master路由器的位置,将通过优先级来选举Master路由器。Backup路由器默认等待的时间称为Master_Down_Interval,取值为:(3×VRRP报文的发送时间间隔)+Skew time,单位为秒。
在 性 能 不 够稳定的网络中, Backup 路由器可能因为网络堵塞而在Master_Down_Interval期间没有收到Master路由器的报文,而主动抢占为Master位置,如果此时原Master路由器的报文又到达了,就会出现虚拟路由器的成员频繁的进行Master抢占现象。为了缓解这种现象的发生,特制定了延迟等待定时器。它可以使得Backup路由器在等待了Master_Down_Interval后,再等待延迟等待时间。如在此期间仍然没有收到VRRP报文,则此Backup路由器才会切换为Master路由器,对外发送VRRP报文。
6.      认证方式
VRRP提供了三种认证方式:
          1)      无认证:不进行任何VRRP报文的合法性认证,不提供安全性保障。
          2)      简单字符认证:在一个有可能收到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。
          3)      MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保存在Authentication Header(认证头)中。收到的VRRP报文的路由器会利用认证字解密报文,检查改报文的合法性。
  
  二、        Keepalived
1.      keepalived简介;
          1)      keepalived是VRRP协议在linux主机上以守护进程方式的实现;
          2)      能够根据配置文件自动生成ipvs规则;
          3)       对个RS做健康状态监测;
2.      组件
vrrp  stack
checkers
ipvs wrapper  -- > ipvs

3.      配置文件的组成部分;
GLOBAL CONFIGURATION
VRRPD CONFIGURATION
vrrp instance
vrrp synchronization group
LVS CONFIGURATION
4.      HA Cluster的配置前提;
          1)      本机的主机名,要于hostname(uname -n)获得名称保持一致;
              Centos 6:/etc/sysconfig/network
              Centos 7:hostnamectl  set-hostname  HOSTNAME
          2)      各节点时间同步;
          3)      确保iptables及selinux不会成为服务阻碍;
5.      配置格式;
virtual_ipaddress {
/ brd  dev  scope  label
   192.168.200.17/24 dev eth1
   192.168.200.18/24 dev eth2 label eth2:1
}
nopreempt:非抢占模式;默认为抢占模式;

vrrp_sync_group VG_1 {
group {
              VI_1   # name of vrrp_instance (below)
             VI_2  # One for each moveable IP.
           }
     }

    vrrp_instance VI_1 {
eth0
  vip
}

vrrp_instance VI_2 {
eth1
dip
}

  示例1:单主模型配置keepalived实现高可用
1.      配置环境准备;
两台主机,这里选择的两台centos7的主机,主机名分别为node1,node2,ip地址分别为192.168.19.141, 192.168.19.142;
为了两台主机通信的方便,首先配置两个节点通过主机名并基于密钥认证的ssh服务完成通信;
          1)      在两台节点主机上分别在hosts文件中添加名称解析;

          2)      通过ssh生成密钥对;

          3)      复制公钥文件至node2;

          4)      再次尝试远程node2无需密码;

在配置前还需达到以下几点要求:
          1)      本机的主机名,要于hostname(uname -n)获得名称保持一致;
              Centos 7:hostnamectl  set-hostname  HOSTNAME
          2)      各节点时间同步;

          3)      确保iptables及selinux不会成为服务阻碍;
2.      安装keepalived,编辑node1的配置文件;
   
    Note:编辑配置文件前记得先备份,再编辑,便于恢复;
3.      将node1编辑好的配置文件复制给node2,再次编辑node2的配置文件;
   
    Note:主要修改以上内容,修改状态为备用节点,和优先级为99
4.      测试;
          1)      启动节点1上的keepalived;利用systemctl status keepalived查看日志;

          查看node1的ip地址,地址已经在使用;

          2)      启动node2节点的keepalived,观察日志;

          查看node2的ip地址:

          3)      现在我们手动down掉node1的keepalived服务,可以发现配置的虚拟ip地址被移除;

          查看node2的日志和ip地址,可以发现地址被成功配置在node2上:

          4)      我们再次手动启动node1的keepalived服务,观察node1日志和地址转移情况,可以发现地址再次转移到node1上;

          观察node2的日志和地址转移情况:可以发现地址再次被移除;

  
  示例2 :双主模型配置keepalived实现高可用;
1.       在上面的基础上编辑node1的配置文件,添加一个虚拟路由器;
   
2.      配置node2的配置文件;
   
3.      测试
          1)      重启两个节点的keepalived服务,观察日志文件,及地址转移情况;
          Node1的日志和地址转移情况:获得地址192.168.19.160;

          Node2的日志和地址转移情况:获得地址192.168.19.161;

          2)      跟上面一样,我们手动关闭node1的keepalived服务,观察日志和地址转移情况;
          Node1的日志和地址转移情况:ip地址被移除;

          Node2的日志和地址转移情况:两个虚拟地址都转到了node2节点上;

          3)      再次启动node1的keepalived服务,测试观察;
          Node1节点再次获得192.168.19.160地址;

          Node2节点上192.168.19.160这个地址被移除,只剩192.168.19.161这个地址:

  
  
  在vi中的主机状态发生改变生发送通知:   
          # notify scripts, alert as above
             notify_master |
             notify_backup |
             notify_fault |
             notify |
             smtp_alert
  示例3:编辑通知脚本使其在主备节点发生转换时发送邮件;
1.      编辑脚本文件,并赋予脚本执行权限;
      
2.      编辑配置文件定义通知脚本;
     
3.      重启node1,查看邮件;
   
  
  示例4:Keepalived实现优先级动态调整;
Keepalived可以调用外部脚本进行资源监控,并根据监控结果实现优先级动态调整;
   
1.      在node1上定义脚本,如果在/etc/keepalived/目录下存在down文件,将节点的优先级减10,编辑配置文件;然后也同时把编辑的内容添加到node2的配置文件中;
   
2.      在两个节点的/etc/keepalived目录下新建脚本文件,内容如下。并赋予执行权限;
   
3.      测试;
          1)      在node1的/etc/keepalived/目录下新建一个down文件,观察地址转移情况;
          Node1失去了地址:

          Node2获得地址:

          2)      删除down文件;node1重新获得了地址

  三、     配置keepalived高可用ipvs和nginx服务
  具体用法可以使用man keepalived.conf命令查看。
  示例1:配置单主模型keepalived高可用ipvs-dr集群
1.      准备实验环境
四台虚拟机,两台作为director,两台作为real server,在director上配置keepalived+lvs-dr实现高可用;
实验拓扑图如下:
   
两台director的vip为192.168.19.160(即虚拟ip地址),两台real server的vip也为192.168.19.160,RS1的rip为192.168.19.134,RS2的rip为192.168.19.143
          1)      配置RS1主机的vip地址及内核参数,在这里可编写一个脚本;

          给脚本赋予执行权限,执行脚本,查看IP地址,路由以及内核参数;

          2)      将RS1的配置脚本发送给RS2,并执行脚本查看;

          3)      给RS1和RS2提供网页测试文件(一般centos6主机httpd默认已安装);
          RS1网页测试文件:

          RS2网页测试文件:

2.      配置node1(director1)上的keepalived,使其自动生成ipvsadm定义的规则;
          1)      配置node1上的keepalived配置文件;

          2)      配置node2节点上的keepalived配置文件;

          3)      启动两台rs server的web服务,和启动两台director的keepalived服务;
          Note:保证四台主机的iptables和selinux不会影响演示。
3.      测试;
          1)      查看node1的keepalived日志等信息,自动生成了ipvs规则;

          2)      查看node2上的keepalived服务日志等信息,发现自动生成了ipvs规则,但没有获取到虚拟ip地址;

          3)      用客户端访问测试;

          4)      手动关闭RS1的web服务,再次测试;
          Node上的ipvs规则定义的后端主机只剩一个;

          客户端测试:

          5)      重启RS1上的web服务,手动关闭node1的keepalived服务;
          Node2获取到ip地址,集群规则为两台RS:

          客户端测试:依旧能负载均衡后端rs server

          6)      如果后端的两台RS同时down掉,我们可以在director上定义一个sorry_server,用来提醒用户,集群服务出现故障。在上面的配置文件中,我们已经定义好了sorry server,现在提供sorry server网页文件和开启两台node的web服务。

          7)      Down掉两台RS的web服务,再次测试;

          再Down掉node1的keepalived服务;

          8)      再次启动node1的keepalived,和RS1;

          只要有一个rs启动,sorry server就会下线。
  
  示例2:keepalived高可用nginx服务
1.      实验环境
四台虚拟主机,两台upstream server,两台nginx服务器作为反向代理调度器,并配置keepalived实现高可用nginx;
upstream server1:192.168.19.143;
upstream server2:192.168.19.134;
node1:192.168.19.141
node2:192.168.19.142
虚拟ip(vip):192.168.19.160
2.      两台node节点服务器配置;
          1)      在/etc/nginx/nginx.conf文件中,两台nginx服务器配置upstream模块,定义后端web服务器组并定义反向代理;(两台nginx配置相同)

          2)      配置keepalived服务,在这里因为nginx的原因,所以无需再配置virtual server去定义后端主机;
          Node1节点:

          Node2节点:

3.      测试;
          1)      开启node1,node2节点上的nginx和keepalived服务;
          Node1:成功获取到地址;

          Node2

          2)      开启两台upstream server的web服务,用客户端测试;

          3)      Down掉node1的keepalived服务,重新访问测试;
          Node1丢失ip地址:

          客户端访问,服务不收影响;

4.      如果是nginx服务出现故障而不是keepalived服务故障,这时IP地址不会出现转移,我们需要一个外部脚本监控nginx服务,一旦出现nginx服务故障,立即调用脚本,降低优先级转移ip地址;
          1)      Node1:编写监控nginx服务运行状况脚本;

              Node1:编辑keepalived配置文件:

          2)      将脚本文件复制给node2下的/etc/keepalived/目录下,并编辑node2的keepalived配置文件;

          3)      重启keepalived服务,手动kill掉node1上的nginx服务,ip地址丢失;

          观察node2获取到了ip地址;

          客户端测试,依旧可以访问;

          4)      当nginx服务出现故障时,我们一种方法就是立即去手动修复或重启服务,如果不想手动去操作,可以编辑通知脚本,在主节点变为MASTER和BACKUP时,都重启nginx服务;

          手动杀掉nginx进程,node1丢失地址,过了一会,又重新抢占了地址;

  
  




运维网声明 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-657102-1-1.html 上篇帖子: keepalived健康检查方式 下篇帖子: Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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