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

相关推荐

  • 浅谈RPM

    浅谈RPM    [先絮叨下编译啊]   1、 库:其实就是一个程序模块(它没有执行入口,不能独立执行,只能被能独立运行的程序调用时执行)你可以把它想象成工具螺丝刀,可执行的程序是就是你自己;螺丝刀能自己干活吗?没有螺丝刀能拧螺丝吗?或者说你现在制作一个? 螺丝刀可以实现这个功能但需要你来执行这个动作。   2、静态编译:将程序所需要的所有的库都编…

    Linux干货 2015-04-27
  • 使用Openssl构建私有CA

    使用Openssl构建私有CA Openssl是SSL的开源实现,是一种安全机密程序,主要用于提高远程登录访问的安全性。也是目前加密算法所使用的工具之一,功能很强大。     Openssl为网络通信提供安全及数据完整性的一种安全协议,包括了主要的密码算法、常用的密钥和证书封装管理功能(CA)以及SSL协议,并提供了丰…

    Linux干货 2015-10-07
  • 信息论的熵

    1.  前言    熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。    在信息论里则叫信息量,即熵是对不确定性的度量。从控制论的角度来看,应叫不确定性。信息论的创始人香农在其著作《通信的数学理论》中提出了建立在概率统计模型上的信息度量。他把信息定义为“用来消除不确定性的东西”。在信息世界,熵越…

    Linux干货 2016-03-27
  • linux上安全软件SElinux

    selinux简介 SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的 实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的 任务中所需要文件。SELinux 默认安装在 Fedora 和 Red …

    系统运维 2016-09-19
  • Linux下如何使用sendEmail来发送邮件

    1)什么是sendEmail sendEmail是一个轻量级,命令行的SMTP邮件客户端(注意,不要跟sendmail混淆了)。如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大,从此以后你就爱上了它。 2)安装sendEmail [root@zabbix ~]# wget http://…

    系统运维 2016-07-29
  • 第二周

    第二周 1. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp 复制文件和目录语法格式:cp [OPTION]… [-T] SOURCE DESTcp [OPTION]… SOURCE… DIRECTORYcp [OPTION]… -t DIRECTORY SOURCE&#8230…

    Linux干货 2017-07-21