第11章
高可用服务(keepalived)的配置

11.1 高可用服务的概念

11.1.1 高可用服务总体概念

  • 为了解决单点故障
  • 减轻服务器的压力

11.1.2 高可用keepalived的概念

  • 为了管理lvs服务
  • 由于lvs没有健康检查功能,keepalived可以进行健康检查
  • keepalived路由冗余协议

11.1.3 路由冗余协议

  • 利用vrrp协议进行相互之间的通信
  • 利用vrrp协议进行主备竞选
  • 发送组播包来告诉其他服务器我还正常的
  • 发送的时候使用的明文发送

11.2
安装高可用服务(172.16.1.5,172.16.1.6)

[root@lb01 conf.d] # yum -y install keepalived

11.3 高可用服务的原理

11.3.1 图示讲解

11.3.2 文字讲解

11.4
编辑配置文件

11.4.1 主配置文件编辑(172.16.1.5)

[root@lb01 ~] # cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

notification_email {

router_id lb01                    定义一个高可用的集群名称

}

}

 

vrrp_instance oldboy {                    设置一个实例(可以说是创建一个家族)

state MASTER                    指定这台服务器在家族的身份

interface eth0                    指定vip地址出现在哪台服务器的网卡上

virtual_router_id 66                指定家族的标识

priority 150                        指定服务器的优先级(优先级越高,越有可能是主服务器)

advert_int 1                        主服务器发送组播包的间隔

authentication {

auth_type PASS

auth_pass 1234                指定认证密码信息

}

virtual_ipaddress {

10.0.0.3                    指定vip地址信息

}

}

11.4.2 副配置文件编辑(172.16.1.6)

[root@lb02 ~] # cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

router_id lb02                    定义一个高可用集群名称

}

}

 

vrrp_instance oldboy {                    定义一个实例(家族)

state BACKUP                    定义这台服务器在家族中的身份地位

interface eth0                    定义vip出现哪个网卡上

virtual_router_id 66                家族的标识

priority 100                        定义服务器的级别信息

advert_int 1                        接收主服务器发送的组播信息间隔时间

authentication {

auth_type PASS

auth_pass 1234                定义指证密码信息

}

virtual_ipaddress {

10.0.0.3                    定义vip地址信息

}

}

11.5
重启keepalived服务(172.16.1.5,6都需要)

systemctl restart keepalived.service

11.6
测试是否搭建成功

11.6.1 将主服务器的高可用服务停止

[root@lb01 ~] # systemctl stop keepalived.service

11.6.2 在其他高可用服务器上查看vip地址是否已经切换成功

[root@lb02 ~] # ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:29:35:bd:57 brd ff:ff:ff:ff:ff:ff

inet 10.0.0.6/24 brd 10.0.0.255 scope global noprefixroute eth0

valid_lft forever preferred_lft forever

inet 10.0.0.3/32 scope global eth0                    切换成功

valid_lft forever preferred_lft forever

inet6 fe80::69eb:971b:2ae0:23cc/64 scope link tentative noprefixroute dadfailed

valid_lft forever preferred_lft forever

11.7
高可用服务企业常见的问题说明

11.7.1 脑裂问题

11.7.1.1 啥叫脑裂问题

简单的说就是其他服务器在主服务器正常的时候出现了vip地址信息

11.7.1.2 脑裂问题出现的原因

11.7.1.2.1 物理原因
  • 主和其他服务器连接的网线不通了,导致接收不到主发送的组播信息
  • 去往其他服务器的防火墙可能已经打开了,导致主服务器发送的信息不能正常的发送给其他服务器
11.7.1.2.2 逻辑原因

服务器的配置出现了问题

11.7.1.3 脑裂问题出现怎么解决

  • 写脚本进行监控,当出现了脑裂问题就进行发送邮件来进行解决
11.7.1.3.1 脚本的编写
  • 判断其他服务器是不是出现了vip地址信息

ip a s eth0 | grep -c "10.0.0.3" !=0 && 就进行发送邮件给运维人员

  • 开始编写(在其他服务器使用定时任务+脚本)

[root@lb02 scripts] # vim monitor_vip.sh

#!/bin/bash

 

VIP_COUNT=`ip a s eth0 | grep -c "10.0.0.3"`                验证vip地址是否存在

if [ "$VIP_COUNT" != 0 ]                        

then

echo "check vip addr" | mail -s "move vip" 460523471@qq.com                发送邮件信息

fi

11.7.2 实现监控nginx的服务状态进行主备切换

11.7.2.1 在主服务器上面进行监控

11.7.2.1.1 在主服务器上编写监控脚本
  • 思路:nginx服务停止以后,就将keepalived服务也给停止掉

netstat -anptu | grep -c nginx ==0 && systemctl stop keepalived

  • 脚本开始编写

[root@lb01 scripts] # vim monitor_nginx.sh

#!/bin/bash

count_nginx=`netstat -anptu | grep -c nginx`            判断nginx进程有几行

if [ "$count_nginx" == 0 ]                        行,则将keepalived服务停止

then

systemctl stop keepalived

else

exit 0

fi

 

[root@lb01 scripts] # sh -x monitor_nginx.sh             脚本执行过程

++ grep -c nginx

++ netstat -anptu

+ count_nginx=0

+ '[' 0 == 0 ']'

+ systemctl stop keepalived

 

[root@lb01 scripts] # systemctl is-active keepalived.service     发现keepalived服务已经停止

inactive

[root@lb01 scripts] #

  • 实时监控,一旦nginx挂了,立马将keepalived服务停止
  • 使用while死循环做

[root@lb01 scripts] # vim monitor_nginx.sh

#!/bin/bash

count_nginx=`netstat -anptu | grep -c nginx`

when true                     当为真的时候,进行下面的查看

do

if [ "$count_nginx" == 0 ]

then

systemctl stop keepalived

fi

sleep 1;                        秒进行一次循环判断

done

  • 使用主配置文件进行编辑(确认你的脚本有执行权限)

[root@lb01 scripts] # vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

notification_email {

router_id lb01

}

}

vrrp_script check_web {                    设置脚本的项目名称

script "/server/scripts/monitor_nginx.sh"        指定你要监控的脚本

interval 2                            秒进行一次监控

#weight 2

}

 

vrrp_instance oldboy {

state MASTER

interface eth0

virtual_router_id 66

priority 150

advert_int 1

authentication {

auth_type PASS

auth_pass 1234

}

virtual_ipaddress {

10.0.0.3

}

track_script {                        调用上面的项目名称信息函数

check_web

}

 

}

11.7.2.2 在其他服务器上面进行监控

11.7.2.2.1 使用权重值来进行vip地址的切换
  • 使用停止keepalived的方式虽然可以成功,但是是一次性的,可能nginx恢复以后,keepalived不会进行恢复,为了解决这个问题,我们可以使用权重值来进行解决
  • 权重值的概念
  • 权重值为正数的时候
  1. 返回为0的时候,实际值为权重值+默认优先级,权重值会进行增加操作
  2. 返回为非0的时候,实际值等于默认优先级
  • 权重值为负数的时候
  1. 返回为0的时候,实际值等于默认优先级
  2. 返回为非0的时候,实际值等于默认优先级+权重值
  • 编写脚本
  • 判断你访问的网站是不是200,如果是返回为真,如果不是返回为假
  • 使用curl -I -w "%{http_code}\n" -o /dev/null -s www.oldboy.com
  • 具体编写

[root@lb02 scripts] # vim monitor_nginx.sh

#!/bin/bash

code_info="$(curl -I -w "%{http_code}\n" -o /dev/null -s www.oldboy.com)"

if [ $code_info -ne 200 ]

then

exit 0

else

exit 1

fi

 

[root@lb02 scripts] # vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

notification_email {

router_id lb02

}

}

vrrp_script check_web {

script "/server/scripts/monitor_nginx.sh"

interval 2

weight 60

 

}

vrrp_instance oldboy {

state BACKUP

interface eth0

virtual_router_id 66

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1234

}

virtual_ipaddress {

10.0.0.3

}

track_script {

check_web

}

}

5分钟教你看大神操作keepalived服务的更多相关文章

  1. JavaScript的运行机制!!!很重要很重要!!!!!!请看大神操作!

    https://juejin.im/post/59e85eebf265da430d571f89

  2. ScrollView嵌套ListView的滑动冲突问题,是看大神的方法的,作为学习以后用的到

    在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结 ...

  3. 10分钟教你Python+MySQL数据库操作

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...

  4. 日常推荐大神操作,如何再oracle中delete数据后恢复

    http://blog.csdn.net/wangdinghai365/article/details/8593869

  5. 【leetcode】Wildcard Matching(hard) ★ 大神太牛了

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

  6. PS大神的作品,每张都是科幻大片!

    相信大家在网上一定见过 各种PS的作品 但是要想成为“PS大神”, 不仅仅要会P图, 最关键的就是脑洞! 同样的马路破坏效果 在大神操作后变成了大片! 摩托车换成了骏马 这效果果然不一般! 这个绝对牛 ...

  7. 7天教你精通变大神,学CAD关键还要掌握方法,纯干货新手要看

    接触CAD初期是“痛苦”的,“煎熬”的,也是充满“成就”的. 痛苦是初学者怎么都不懂,需要学习的东西很多,整个过程是有些痛苦的. 煎熬也是每个求学阶段都会遇到的状态,眼睛会了,手不会,这个状态很难受. ...

  8. JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。

      JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力..   小森执行一 ...

  9. C语言简单实现链栈基本几个功能(适合新手看,大神可指正)

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

随机推荐

  1. containerd 与安全沙箱的 Kubernetes 初体验

    作者 | 易立  阿里云资深技术专家 containerd 是一个开源的行业标准容器运行时,关注于简单.稳定和可移植,同时支持 Linux 和 Windows. 2016 年 12 月 14 日,Do ...

  2. pat 1065 A+B and C (64bit)(20 分)(大数, Java)

    1065 A+B and C (64bit)(20 分) Given three integers A, B and C in [−2​63​​,2​63​​], you are supposed t ...

  3. lqb 基础练习 数列特征

    基础练习 数列特征 时间限制:1.0s   内存限制:256.0MB     问题描述 给出n个数,找出这n个数的最大值,最小值,和. 输入格式 第一行为整数n,表示数的个数. 第二行有n个数,为给定 ...

  4. ArcGIS API For Javascript:新增热力图层的方法

    当我们要制作一个热力图层,可以通过以下 3 步来实现: 引入类 在 require 中需引入 "esri/layers/FeatureLayer", "esri/rend ...

  5. 从cocos2dx源代码看android和iOS跨平台那些事

    cocos2dx一个跨移动(平板)平台的游戏引擎,支持2d和3d,基于c/c++,网上介绍多在此不详叙.我们本篇关心的是跨平台那些事,自然而然就找到platform目录.好家伙,支持的操作平台还真不少 ...

  6. (三十五)golang--面向对象之多态

    多态:变量具有多种形态,可以用统一的接口来调用不同的实现. 接口体现多态特征: (1)多态参数:之前所讲的Usb接口案例,既可以接受手机变量,也可以接受相机变量,就体现了usb接口的多态: (2)多台 ...

  7. 扛把子组20191010-1 Alpha阶段贡献分配规则

    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8744] 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 刘信鹏 ...

  8. 基于crypto++国产加密软件SM4的实现,顺带加了ase,base64

    唔,美国压制得越狠,各种替代产品就越能活. 本文分享SM4的一种快速实现与集成方式.             SM4(原名SMS4)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于201 ...

  9. webpack4打包的一些坑

    1.安装webPack看官方文档就可以了,主要是打包,我安装的是4+以上的 官网中文教程:https://www.webpackjs.com/guides/installation/ 2.我是在php ...

  10. nginx实现内网服务唯一端口外网映射

    2.1         内网服务唯一端口外网映射 (一)       组网图 (二)       简要说明: 如标题所示,该功能可以实现内网环境下所有服务端口通过nginx的正向代理通过唯一端口映射至 ...