2017 10-30 keepalived应用

一.keepalived介绍

1.keepalived的功能

实现集群服务的高可用性(HA),在实际工作中当lvs调度器发生故障时需要这种机制实现工作的高可用性,就是说当一个调度器出现故障时,可以由另一个服务器继续接管继续工作。

2.常用的高可用集群的实现方案

vrrp:Virtual Router Redundancy Protocol——虚拟路由冗余协议

3.常见的keepalived配置术语

虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
物理路由器:
master:主设备
backup:备用设备
priority:优先级
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
通告:心跳,优先级等;周期性 
工作方式:抢占式,非抢占式 
安全工作: 认证: 无认证 简单字符认证:预共享密钥 MD5 
工作模式:
主/备:单虚拟路径器
主/主:主/备(虚拟路径器1),
备/主(虚拟路径器2)

*注意:vrrp协议的软件实现,原生设计目的为了高可用ipvs服务.换句话说该协议软件的实现就是搭配lvs使用,达到高可用的目的,彼此为绝配的关系
双方的搭配模式主要的功能:
vrrp协议完成地址流动 
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义) 
为ipvs集群的各RS做健康状态检测 
基于脚本调用接口通过执行脚本完成脚本中定义的功能, 进而影响集群事务,以此支持nginx、haproxy等服务

4.keepalived的组成

(1)组件: 
核心组件: vrrp stack ipvs wrapper checkers 
控制组件:配置文件分析器 IO复用器  内存管理组件

二.keepalived的实现

1.HA Cluster 配置准备的准备工作
(1)集群环境的时间同步,也就说各个节点的时间必须相同
使用的服务是ntp和chrony(在7上使用)
首先使用ntpdate 172.18.0.1(假设为互联网时间),与互联网时间同步
上述方法是暂时同步时间,过一段时间后还是会出现差别
然后vim /etc/ntp.conf


2017 10-30 keepalived应用_第1张图片
image.png

该方法可以实现与互联网时间的实时同步,为了方便直接设置为开机自启chkconfig ntpd on
然后service ntpd start
这样只需要其他服务在ntp.conf或是chrony.conf配置文件中和该主机时间同步即可


2017 10-30 keepalived应用_第2张图片
image.png

(2)清除各主机之间的防火墙策略和selinux策略,以防影响实验结果
(3)各节点之间以主机名的方式实现互相通讯
在各个节点中设置:
hostname set-hostname node1
image.png

hostname set-hostname node2
image.png

然后在/etc/hosts文件中写下对方的主机名,实现解析通讯


image.png

image.png

(4)实现基于Key的ssh服务验证,相互信任,防止黑客的干扰
实现方法:
执行ssh-keygen命令会生成
2017 10-30 keepalived应用_第3张图片
image.png

ssh-copy -i id_rsa.pub node2:
2017 10-30 keepalived应用_第4张图片
image.png

三.keepalived的具体应用

1.实现简单的主备工作模式

拓扑结构图


2017 10-30 keepalived应用_第5张图片
image.png

(1)yum install keepalived
vim /etc/keepalived/keepalived.conf


2017 10-30 keepalived应用_第6张图片
image.png

在另一主机上,设置为主服务器,将配置文件中的优先级调为100,比备用主机数值大即可,state为MASTER
其他不变

配置完成,可以通过tcpdump -i eth0 -nn host 224.99.99.62来测试效果


2017 10-30 keepalived应用_第7张图片
image.png

此时的虚拟vip地址也被绑定在主服务器上,备用服务器没有该地址
2017 10-30 keepalived应用_第8张图片
image.png

此时即使将备服务器的keepalived开启也无法工作,因为它的优先级小于主服务器,所以无法参与工作。但是此时如果将主服务关掉,那么备用服务器会开始工作
2017 10-30 keepalived应用_第9张图片
image.png

此时虚拟vip也切换到备用服务器上
2017 10-30 keepalived应用_第10张图片
image.png

主从模式配置成功
  • 记录日志
    vim /etc/sysconfig/keepalived


    2017 10-30 keepalived应用_第11张图片
    image.png
  • vim /etc/rsyslog.conf


    image.png

    设置完成后,重启日志服务和keepalived
    查看日志 ll /var/log/keepalived.log


    2017 10-30 keepalived应用_第12张图片
    image.png
  • mail设置
    通过mail设置可以实现rs服务器的上线下线通知功能,并且通过触发脚本来实现主备的切换

具体实现:
在 /etc/keepalived/下编写notify.sh通知脚本

  1 #!/bin/bash
  2 #
  3 contact='root@localhost'
  4 notify() {
  5   mailsubject="$(hostname) to be $1, vip floating"
  6   mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
  7   echo "$mailbody" | mail -s "$mailsubject" $contact
  8 }
  9 case $1 in
 10   master)
 11     notify master
 12     ;;
 13 backup)
 14     notify backup
 15     ;;
 16 fault)
 17     notify fault
 18     ;;
 19 *)
 20   echo "Usage: $(basename $0) {master|backup|fault}"  
 21   exit 1
 22   ;;
 23 esac

写完后执行 ./notify master 观察mail

image.png

./notify backup


image.png

因此在keepalived.conf加入出发脚本


2017 10-30 keepalived应用_第13张图片
image.png

主要功能就是通过邮件进行通知主服务器与备用服务器的切换,当之前的主服务出现故障后,配置文件会触发通知脚本告知另一个备用服务器变为主服务器
  • 注意在备用服务器上也要进行相同的设置

2.实现主主模式

2017 10-30 keepalived应用_第14张图片
image.png

解释:
针对route_id为80,虚拟vip为192.168.136.62这个地址,node1位master,node2为backup
针对route_id为70,虚拟vip为192.168.136.63这个地址,node1为backup,node2为master
总体来说仍然是主备模式,只是针对不同的vip地址而定义了相对的主主模式

  • 具体实现步骤:
vim /etc/keepalived/keepalived.conf
再写一个实例
vrrp_instance VI_2 {
    state BACKUP——由原来的MASTER变为BACKUP
    interface eth0
    virtual_router_id 70——设置一个新的id号
    priority 90——优先级要变低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 6ceadb21——设置新的密码
        
    }   
    virtual_ipaddress {
        192.168.136.63/24——配置新的vip地址
    }   
      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——由原来的BACKUP变为MASTER
    interface ens33
    virtual_router_id 70——设置一个新的id号
    priority 100——优先级要变高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 6ceadb21——设置新的密码
        
    }   
    virtual_ipaddress {
        192.168.136.63/24——配置新的vip地址
    }   
      notify_master "/etc/keepalived/notify.sh master"
      notify_backup "/etc/keepalived/notify.sh backup"
      notify_fault  "/etc/keepalived/notify.sh fault"
      
}

配置完成后进行测试


2017 10-30 keepalived应用_第15张图片
image.png

3.结合后端RS服务器的高可用性的实现(与Lvs的结合应用)

(1)结合ipvs的主从服务调度(DR调度模式)

拓扑图 基于结合lvs的主从模式的高可用的工作模式


2017 10-30 keepalived应用_第16张图片
image.png

(2)在rs服务器端上执行lvs脚本


2017 10-30 keepalived应用_第17张图片
image.png

(3)在主备服务器上设置keepalived.conf脚本
2017 10-30 keepalived应用_第18张图片
image.png

2017 10-30 keepalived应用_第19张图片
image.png

将该脚本复制到另一个备用服务器上
scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/keepalived.conf
配置完成后,重启服务查看是否具有ipvs规则
ipvsadm -Ln


2017 10-30 keepalived应用_第20张图片
image.png

在备用服务器上同样具有ipvs规则
2017 10-30 keepalived应用_第21张图片
image.png

配置成功
(4)在客户端上进行访问,测试结果
2017 10-30 keepalived应用_第22张图片
image.png

结果正确
(5)测试如果主服务器出现故障,在客户端进行测试,观察结果
2017 10-30 keepalived应用_第23张图片
image.png

利用tcpdump命令查看主从是否切换


2017 10-30 keepalived应用_第24张图片
image.png

(6)健康性检查的测试,当其中的一个RS服务器故障后,在客户端测试观察结果
2017 10-30 keepalived应用_第25张图片
image.png

4.实现主主模式的集群调度

  • 调度拓扑图


    2017 10-30 keepalived应用_第26张图片
    image.png
  • 正常情况下lvs2应该选择新的另外两个服务器进行测试,并且后面的也要建立两个新的rs服务器,但是本实验为了节省资源就都在同样的两台机上做实验,实现互为主从的调度实验
    设置两个vip
    vip1:192.168.136.62
    vip2:192.168.136.63
    当访问vip1时170为主
    当访问vip2时183为主
    实验目的明确,接下来实现具体的配置步骤
    (1)首先在各自的rs服务器上执行lvsj脚本


    2017 10-30 keepalived应用_第27张图片
    image.png

    执行脚本后观察


    2017 10-30 keepalived应用_第28张图片
    image.png

    (2)vim /etc/httpd/conf/httpd.conf在rs服务器上设置虚拟主机
    2017 10-30 keepalived应用_第29张图片
    image.png

    ip a a 192.168.136.133 dev eth0
    mkdir /app/web1
    mkdir /app/web2
    echo images 134 > /app/web1/index.html
    echo app 133 > /app/web2/index.html
    (3)在lvs调度器上
    vim /ect/keepalived/keepalived.conf
    2017 10-30 keepalived应用_第30张图片
    image.png

    另一个同上
    配置完后,重启服务观察ipvs


    2017 10-30 keepalived应用_第31张图片
    image.png

    (4)在rs服务器端上测试
    image.png

    显示成功,但是在客户端去测试无法正确显示,因此建议不要在统同一主机配置
    (5)一个vip只往一个rs服务器端上调度
    2017 10-30 keepalived应用_第32张图片
    image.png

    减少服务器数量
    只要访问63就往173上调度
    只要访问62就往134上调度

5.实现keepalived的nginx的高可用集群调度

(1)在keepalived的配置文件中配置脚本


2017 10-30 keepalived应用_第33张图片
image.png

image.png

(2)另一台调度器执行相同操作
该脚本的含义是:先设置脚本,然后对脚本进行检查,如果判断出down文件存在,就将优先级高的调度器的数值减少20,使另一个调度器优先级变高成为主服务器,进行继续的工作。当down文件删除后,又恢复原来的主备模式
(3)对脚本进行测试


2017 10-30 keepalived应用_第34张图片
image.png

在/etc/keepalived/下创建一个down文件
就会实现主从切换
2017 10-30 keepalived应用_第35张图片
image.png

删除down文件后又重新恢复


2017 10-30 keepalived应用_第36张图片
image.png

(4)对此可以使用脚本来实现nginx的高可用集群调度
在/etc/nginx/nginx.conf中进行配置
2017 10-30 keepalived应用_第37张图片
image.png

2017 10-30 keepalived应用_第38张图片
image.png

开启了反向代理功能
关闭httpd 服务打开nginx服务
(5)对nginx服务做健康性检查,在keepalived.conf的脚本中进行设置
2017 10-30 keepalived应用_第39张图片
image.png

image.png

另一个调度器同上
(6)关闭keepalived服务,使用tcpdump命令测试,先开启一个keepalived服务
2017 10-30 keepalived应用_第40张图片
image.png

(7)另一个也开启,并杀死之前的keepalived服务


2017 10-30 keepalived应用_第41张图片
image.png

显示正确,主服务器减少20,使从服务器变为主服务器工作

你可能感兴趣的:(2017 10-30 keepalived应用)