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

相关推荐

  • 线上多服务管理工具实例剖析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1583156        公司线上对nginx、tomcat和jar包的java应用的服务管理脚本之前都是单独分离开…

    Linux干货 2016-08-15
  • 显示历史命令时间

        历史命令中默认是不显示时间的,如果我们想要在使用history命令时显示时间可以通过设置环境变量来实现。     HISTTIMEFORMAT变量的具体参数与date命令中的类似,可以参数date命令的对日期时间格式时行修改。    &nbs…

    Linux干货 2015-05-02
  • 关于shell脚本基础编程第四篇

                                    shell脚本基础编程第四篇本章主要内容:函数 函数 function:     &n…

    系统运维 2016-08-24
  • yum函数介绍以及自建yum仓库

    一、前言     在之前介绍了yum的配置(详细请移步 http://www.178linux.com/archives/6445)。但是有没有发现一个问题,虽然我们已将仓库指向一个可用的仓库服务器,但是随着Linux的不断升级和改版,我们是否还需要不断的去修改仓库的配置文件,如果只有一台还好,那如果我们有多…

    Linux干货 2015-07-24
  • Linux下使用screen协同作业

    1)screen应用场景(拷贝自网络): 来自产品工程的高级维护用户 David 打电话说:“为什么我不能在您部署的这些新机器上编译 supercode.c”。 您会问他:“您运行的是什么机器?” David 答道:“ Posh”。(这个虚够的公司将它的 5 台生产服务器以纪念 Spice Girls 的方式命名)。这下您可以大显身手了,另一台机器由 Dav…

    系统运维 2016-08-15
  • ansible学习笔记

    简介:  在日常服务器维护中,从系统安装到程序部署再到发布应用,在大规模的生产环境中,如果需要手动的每台服务器进行安装配置将会给运维人员带来许多繁琐而又重复的工作。这就促使了在每个运维层次中出现了不同的自动化运维工具。 常见的自动化运维工具分类有以下几类:  系统安装运维工具(OS Provisioning):    …

    Linux干货 2015-08-17