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


image.png

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


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命令会生成
image.png

ssh-copy -i id_rsa.pub node2:
image.png

三.keepalived的具体应用

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

拓扑结构图


image.png

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


image.png

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

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


image.png

此时的虚拟vip地址也被绑定在主服务器上,备用服务器没有该地址
image.png

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

此时虚拟vip也切换到备用服务器上
image.png

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


    image.png
  • vim /etc/rsyslog.conf


    image.png

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


    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加入出发脚本


image.png

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

2.实现主主模式

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"
      
}

配置完成后进行测试


image.png

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

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

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


image.png

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


image.png

(3)在主备服务器上设置keepalived.conf脚本
image.png

image.png

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


image.png

在备用服务器上同样具有ipvs规则
image.png

配置成功
(4)在客户端上进行访问,测试结果
image.png

结果正确
(5)测试如果主服务器出现故障,在客户端进行测试,观察结果
image.png

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


image.png

(6)健康性检查的测试,当其中的一个RS服务器故障后,在客户端测试观察结果
image.png

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

  • 调度拓扑图


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


    image.png

    执行脚本后观察


    image.png

    (2)vim /etc/httpd/conf/httpd.conf在rs服务器上设置虚拟主机
    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
    image.png

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


    image.png

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

    显示成功,但是在客户端去测试无法正确显示,因此建议不要在统同一主机配置
    (5)一个vip只往一个rs服务器端上调度
    image.png

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

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

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


image.png

image.png

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


image.png

在/etc/keepalived/下创建一个down文件
就会实现主从切换
image.png

删除down文件后又重新恢复


image.png

(4)对此可以使用脚本来实现nginx的高可用集群调度
在/etc/nginx/nginx.conf中进行配置
image.png

image.png

开启了反向代理功能
关闭httpd 服务打开nginx服务
(5)对nginx服务做健康性检查,在keepalived.conf的脚本中进行设置
image.png

image.png

另一个调度器同上
(6)关闭keepalived服务,使用tcpdump命令测试,先开启一个keepalived服务
image.png

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


image.png

显示正确,主服务器减少20,使从服务器变为主服务器工作
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 一、高可用集群 (一)提升系统高可用性的解决方案:冗余(redundant) 工作模式active/passive...
    哈喽别样阅读 1,711评论 2 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 一.HAProxy介绍 HAProxy: 是法国人Willy Tarreau开发的一个开源软件,是 一款应对客户端...
    楠人帮阅读 1,082评论 0 2
  • 1.Cluster(集群)概念 (1)系统扩展方式: Scale UP:向上扩展,增强Scale Out:向外扩展...
    尛尛大尹阅读 1,085评论 0 4
  • 未来人工智能时代的教育是什么样子?人工智能时代,我们每个人最有效的学习方法是什么?该学习什么?怎么思考人工智能时代...
    曹司空阅读 317评论 0 0