Linux keepalived高可用集群

                   Linux keepalived高可用集群


keepalived简介:

   keepalived是为了高可用ipvs集群而设计的,主要用作realserver的健康状态检测,如果有一台web服务器死机,或工作出现故障,keepalived将检测到,并将有故障的服务器从系统中移除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后keepalived自动将服务器加入到服务器集群中,这些工作全部自动完成,不需要人工干预,需要人工做的只是修复故障的服务器。

集群类型:LBHAHP

SPoF: Single Point of Failure

系统可用性的公式:A=MTBF/MTBF+MTTR

HA Cluster实现方案:

vrrp协议的实现

        vrrp:虚拟冗余路由协议;

keepalived

ais:完备HA集群;

heartbeat

corosync  

 

keepalived保持连接:

    vrrp协议:Virtual Redundant Routing Protocol 虚拟冗余路由协议

术语:

虚拟路由器:Virtual Router

虚拟路由器标识:VRID(0-255)

物理路由器:

master:主设备

backup:备用设备

priority:优先级

VIPVirtual IP

VMACVirutal MAC (00-00-5e-00-01-VRID)

通告:心跳,优先级等;周期性;

抢占式,非抢占式;

 

安全工作:

   认证:

无认证

简单字符认证

MD5

 

工作模式:

/备:单虚拟路径器;

/主:主/备(虚拟路径器1),备/主(虚拟路径器2

keepalived:为了在Linux系统中实现vrrp协议

vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务:

vrrp协议完成地址流动;

vip地址所在的节点生成ipvs规则(在配置文件中预先定义);

ipvs集群的各RS做健康状态检测;

基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;

 组件:

核心组件:

 vrrp stack

 ipvs wrapper

 checkers

控制组件:配置文件分析器

IO复用器

内存管理组件

 

HA Cluster的配置前提:

(1) 各节点时间必须同步;

    ntp, chrony

(2) 确保iptablesselinux不会成为阻碍;

(3) 各节点之间可通过主机名互相通信(对KA并非必须);

建议使用/etc/hosts文件实现;

(4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信;(并非必须)

 

keepalived安装配置:

CentOS 6.4之后的版本keepalived已经收录到base仓库中了。

    程序环境:

配置文件:/etc/keepalived/keepalived.conf

  主程序:/usr/sbin/keepalived

  Unit Filekeepalived.service

配置文件组件部分:

TOP HIERACHY

GLOBAL CONFIGURATION

Global definitions

Static routes/addresses

VRRPD CONFIGURATION

VRRP synchronization group(s)

VRRP instance(s)

LVS CONFIGURATION

Virtual server group(s)

Virtual server(s)

单主配置示例:

! Configuration File for keepalived

 

     global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id node1

vrrp_mcast_group4 224.0.100.19

}

 

vrrp_instance VI_1 {

state BACKUP

interface eno16777736

virtual_router_id 14

priority 98

advert_int 1

authentication {

auth_type PASS

auth_pass 571f97b2

}

virtual_ipaddress {

10.1.0.91/16 dev eno16777736

}

}  

配置语法:

配置虚拟路由器:

vrrp_instance <STRING> {

….

}

专用参数:

 state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP

 interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口;

 virtual_router_id VRID:当前虚拟路由器的惟一标识,范围是0-255

 priority 100:当前主机在此虚拟路径器中的优先级;范围1-254

     advert_int 1vrrp通告的时间间隔;

 authentication {

auth_type AH|PASS

auth_pass <PASSWORD>

}

virtual_ipaddress {

<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>

192.168.200.17/24 dev eth1

192.168.200.18/24 dev eth2 label eth2:1

}

 track_interface {

eth0

eth1

}

配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;

nopreempt:定义工作模式为非抢占模式;

preempt_delay 300:抢占式模式下,节点上线后触发新选举操作的延迟时长;

定义keepalived主备切换邮件通知脚本:

notify_master <STRING>|<QUOTED-STRING>:当前节点成为主节点时触发的脚本;

notify_backup <STRING>|<QUOTED-STRING>:当前节点转为备节点时触发的脚本;

notify_fault <STRING>|<QUOTED-STRING>:当前节点转为“失败”状态时触发的脚本;

notify <STRING>|<QUOTED-STRING>:通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知;

 

 

keepalived单、主配置实例:

blob.png

blob.png

blob.png

定义keepalived主备切换邮件通知脚本:

blob.png

blob.png

双主模型示例:  

! Configuration File for keepalived

 

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id node1

    vrrp_mcast_group4 224.0.100.19

}

 

    vrrp_instance VI_1 {

state MASTER

interface eno16777736

virtual_router_id 14

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 571f97b2

}

virtual_ipaddress {

10.1.0.91/16 dev eno16777736

}

}

 

vrrp_instance VI_2 {

  state BACKUP

  interface eno16777736

  virtual_router_id 15

  priority 98

  advert_int 1

  authentication {

  auth_type PASS

  auth_pass 578f07b2

}

  virtual_ipaddress {

  10.1.0.92/16 dev eno16777736

}

}

 

 双主模型配置实例:

blob.png

blob.png

blob.png

定义keepalived主备切换邮件通知脚本:

blob.png

blob.png

虚拟服务器:

配置参数:

virtual_server IP port |

    virtual_server fwmark int

  {

real_server {

}

 }

常用参数:

 delay_loop <INT>:服务轮询的时间间隔;

 lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法;

 lb_kind NAT|DR|TUN:集群的类型;

 persistence_timeout <INT>:持久连接时长;

 protocol TCP:服务协议,仅支持TCP

 sorry_server <IPADDR> <PORT>:备用服务器地址;

 real_server <IPADDR> <PORT>

{

 weight <INT>

 notify_up <STRING>|<QUOTED-STRING>

 notify_down <STRING>|<QUOTED-STRING>

     HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { … }:定义当前主机的健康状态检测方法;

}

HTTP_GET|SSL_GET {

url {

path <URL_PATH>:定义要监控的URL

status_code <INT>:判断上述检测机制为健康状态的响应码;

digest <STRING>:判断上述检测机制为健康状态的响应的内容的校验码;

}

nb_get_retry <INT>:重试次数;

delay_before_retry <INT>:重试之前的延迟时长;

connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求

connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求

bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址;

bind_port <PORT>:发出健康状态检测请求时使用的源端口;

connect_timeout <INTEGER>:连接请求的超时时长;

}

 TCP_CHECK {

connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求

connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求

bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址;

bind_port <PORT>:发出健康状态检测请求时使用的源端口;

connect_timeout <INTEGER>:连接请求的超时时长;

}

 

实验测试:

   部署一个lvs-dr类型的keepalived HA单主高可用集群:

   环境介绍:

   测试客户机:

      client客户机IP192.168.3.4

   搭建单主高可用集群:

      keepalived HA高可用集群(1IP192.168.3.7

      keepalived HA高可用集群(2IP192.168.3.5

      keepalived HA 高可用集群的vip192.168.3.6

      keepalived各节点上提供sorry_server web服务;网页为:website maintenance

   后台网站服务器:

      realserver1IP地址:192.168.3.2

        配置httpd服务:网页为 keepalived server 1

        lo别名网卡上配置vip地址:192.168.3.6;关闭arp_ignorearp_announce;

       realserver2IP地址:192.168.3.8

        配置httpd服务:网页为 keepalived server 2

        lo别名网卡上配置vip地址:192.168.3.6;关闭arp_ignorearp_announce;

 

   1)在real server 1 realserver2上分别执行此脚本,配置lo别名网卡上的viparp_ignorearp_announce的参数。

blob.png

  2)在 keepalived HA高可用集群(1IP192.168.3.7 配置如下内容:

blob.png

blob.png

blob.png

blob.png

  3)在 keepalived HA高可用集群(2IP192.168.3.5 配置如下内容:

blob.png

blob.png

blob.png

blob.png

4)在客户机上测试keepalived的轮循调度:

blob.png

5)故意关闭一台realserver web进行测试:

blob.png

6)故意关闭后台所有realserver服务,测试sorry_server web

blob.png

keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整;

分两步:(1) 先定义一个脚本;(2) 调用此脚本;

 

调用外部脚本对keepalived进行健康状态检测机制

定义在vrrp_instance实例之外:

vrrp_script <SCRIPT_NAME> {   //定义脚本

script ""

interval #

weight -#

}

定义在vrrp_instance实例之内:  

track_script {                //调用脚本

SCRIPT_NAME_1

SCRIPT_NAME_2

    

 }

实验测试:

   部署一个nginxkeepalived HA单主高可用集群:

   环境介绍:

   测试客户机:

      client客户机IP192.168.3.4

   搭建单主高可用集群:

      keepalived HA高可用集群(1IP192.168.3.7

      keepalived HA高可用集群(2IP192.168.3.5

      keepalived两个节点上分别配置nginx反向代理服务;

   后台网站服务器:

      realserver1IP地址:192.168.3.2

        配置httpd服务:网页为 nginx HA  server 1

      realserver2IP地址:192.168.3.8

        配置httpd服务:网页为 nginx HA  server 2

 

  1)配置nginx keepalived HA高可用集群(1IP192.168.3.7

blob.png

blob.png

blob.png

 配置keepalived1)上的nginx反向代理服务:

nginx主配置文件http配置段中定义上游服务器组upstream

blob.png

blob.png

nginx默认配置文件中定义反向代理的upstream组名称:

blob.png

blob.png

  2)配置nginx keepalived HA高可用集群(2IP192.168.3.7

 nginx keepalived HA高可用集群(2)的配置过程与 nginx keepalived HA高可用集群(1)类似,唯一的区别就是在/etc/keepalived/keepalived.conf配置文件中,如下图:

blob.png

blob.png

3)测试HA nginx cluster

blob.png

4)调用外部脚本 chk_dow ,使其vip地址转移到另一个keepalived节点上:

/etc/keepalived/目录下创建一个文件down

blob.png

在去keepalived2)节点查看IP a l

blob.png

5)再次测试HA nginx cluster

blob.png

原创文章,作者:zhengyibo,如若转载,请注明出处:http://www.178linux.com/60048

(0)
zhengyibozhengyibo
上一篇 2016-11-18
下一篇 2016-11-18

相关推荐

  • Btrfs文件系统的管理和应用

        Btrfs(我们称之为Butter FS或者B-tree FS)被称为新一代的linux文件系统。一直以来,EXT文件系统以其卓越的稳定性成为linux标准的文件系统。但近年来,EXT3暴露出一些扩展性的问题(如单一文件大小限制、总文件系统大小限制等),于是便催生了EXT4。但同时,Btrfs向人们展现出诸多优…

    Linux干货 2016-02-14
  • xen虚拟化基础篇

    Xen介绍:  xen是一个开放的源代码虚拟机监视器,有剑桥大学研发。它打算在单个计算机上运行多达128个满足特征的操作系统,操作系统必须进行显示地修改("移植")以在Xen上运行(但是提供对用户应用的兼容性)。这使得无需特殊硬件支持,就能达到高性能的虚拟化。 Xen由三部分组成:     第一部分…

    Linux干货 2015-08-26
  • 一. DHCP,TFTP, DNS 配置

    练习在CentOS6上配置DHCP, TFTP, DNS服务 1. 首先按下图所示搭建网络拓扑图 2017-07-11 151425-001.png Server1 服务器IP: 192.168.20.101/24GATEWAY: 192.168.20.2DNS: 192.168.20.2 Server2 服务器IP: 192.168.20.102/24GA…

    Linux干货 2017-07-11
  • 数据结构- 串的模式匹配算法:BF和 KMP算法

    Brute-Force算法的思想 1.BF(Brute-Force)算法   Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较。 2) 依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹…

    Linux干货 2015-04-07
  • MooseFS性能图表[原创]

    对MooseFS有了一定的了解,现在可以压压它的性能了,使用的是iozone IO测试工具。测试命令为:./iozone -a -n 512m -g 4g -i 0 -i 1 -f /mnt/mfs/logs/test.tar.gz -Rb ./iozone.xls -C测试说明1、/mnt/mfs/logs/test.tar.gz大小为9.2G,大于服务器…

    Linux干货 2015-03-27
  • 简明 Vim 练级攻略

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。 ——————————正文开始—————————— …

    Linux干货 2015-04-04