**

keepalived安装配置

**
有关keepalived安装和配置相关博文很多,我找了两篇介绍的都特别详细,只是版本不一样,原文地址如下:
https://blog.csdn.net/xyang81/article/details/52554398
https://my.oschina.net/u/2347651/blog/3011012

一、简介
Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。

上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。
内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。
用户空间:

WatchDog:负载监控checkers和VRRP进程的状况
VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。
Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。
IPVS wrapper:用户发送设定的规则到内核ipvs代码
Netlink Reflector:用来设定vrrp的vip地址等。
Keepalived的所有功能是配置keepalived.conf文件来实现的。

二、安装与配置
从官网下载keepalived的最新版本,本文以版本2.0.18为例。
Keepalived下载地址

shell> cd /opt/local/
shell> wget http://www.keepalived.org/software/keepalived-2.0.18.tar.gz
shell> tar -zxvf keepalived-2.0.18.tar.gz
shell> cd keepalived-2.0.18
shell> ./configure --prefix=/opt/local/keepalived
shell> make && make install

2.2 配置
安装完成后,进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf配置文件,如果没有找到则使用默认的配置。/etc/keepalived目录安装时默认是没有安装的,需要手动创建。配置文件目录结构如下所示:

shell> tree -l /opt/local/keepalived/etc
├── init
│   └── keepalived.conf
├── keepalived
│   ├── keepalived.conf
│   └── samples
│       ├── client.pem
│       ├── dh1024.pem
│       ├── keepalived.conf.conditional_conf
│       ├── ........
└── sysconfig└── keepalived

分别对应系统目录(忽略samples目录):
/etc/keepalived/keepalived.conf
/etc/rc.d/init.d/keepalived
/etc/sysconfig/keepalived
因为keepalived的默认配置文件位置是: /etc/keepalived/keepalived.conf,所以需要将实际的文件文职软连接到这里,当然也可以在/opt/local/etc/syscofig/keepalived里面配置增加选项: -f 配置文件路径,这样的形式来更改配置文件路径。本文是以建立软连接的方式

sudo ln -s /opt/local/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

或者通过拷贝

shell> mkdir /etc/keepalived
shell> cp /opt/local/keepalived/etc/keepalived.conf /etc/keepalived/keepalived.conf
shell> cp /opt/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
shell> cp /opt/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

这样就算是安装完成了。

开启对应网卡的防火墙的vrrp支持
sudo firewall-cmd --reload
当然,测试机器关闭防火墙也就一劳永逸了,记得要同时关闭selinux。selinux的保护机制导致跟踪脚本不能执行某些操作(例如:重启某项服务等),解决方法是修改对应脚本的安全上下文类型,详细看下面的配置说明(2.0.0版本不需要修改安全上下文类型了)。

启动

Centos 7

shell> systemctl start keepalived.service
或者

Centos 6

shell> service keepalived start
shell> service keepalived stop #停止服务
shell> service keepalived restart #重启服务

另外需要注意的一点是,keepalived启动时不会检查配置文件的语法是否正确,所以我们在编写配置文件时要特别小心,别写错了,否则会出现一些意想不到的现象。

使用service keepalived start命令启动服务时,默认会将/etc/sysconfig/keepalived文件中KEEPALIVED_OPTIONS参数作为keepalived服务启动时的参数,并从/etc/keepalived/目录下加载keepalived.conf配置文件,或用-f参数指定配置文件的位置。

# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp               -P    Only run with VRRP subsystem.
# --check              -C    Only run with Health-checker subsystem.
# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
# --dump-conf          -d    Dump the configuration data.
# --log-detail         -D    Detailed log messages.日志默认输出在/var/log/message文件中
# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#
KEEPALIVED_OPTIONS="-D"

运行keepalived --help可以查看启动时的可选参数,这些可选参数都可以配置在/etc/sysconfig/keepalived文件中的KEEPALIVED_OPTIONS选项中,作为服务启动时的参数。

keepalived正常运行后,会启动3个进程,其中一个是父进程,负责监控其子进程。一个是vrrp子进程,另外一个是checkers子进程。

shell> ps -ef | grep keepalived
root       831     1  0 11:22 ?        00:00:00 keepalived -D
root       840   831  0 11:22 ?        00:00:00 keepalived -D
root       841   831  0 11:22 ?        00:00:00 keepalived -D

三、keepalived.conf配置文件说明
keepalived服务安装完成之后,后面的主要工作就是在keepalived.conf文件中配置HA和负载均衡。一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha,虚拟服务器是可选的。下面是一个功能比较完整的配置文件模板:

#主节点
! Configuration File for keepalivedglobal_defs {notification_email {aaaa@xxxx.com}notification_email_from bem@aipark.comsmtp_server smtp.qiye.163.comsmtp_connect_timeout 30router_id NodeA
}
#vrrp script示例,必须声明在vrrp_instance节点前:
vrrp_script check_haproxy {script "/etc/keepalived/scripts/check-nginx.sh"interval 3  #每隔3秒坚持一次
}vrrp_instance http4dfs {state MASTER #设置为从服务器interface eth0    #监测网络接口dont_track_primarynopreemptvirtual_router_id 51 #主、备必须一样priority 100 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)advert_int 1   #VRRP Multicast广播周期秒数authentication {auth_type PASS     #VRRP认证方式,主备必须一致auth_pass 1111   #(密码)}virtual_ipaddress {10.110.60.166     #VRRP HA虚拟地址}track_script {check_haproxy}
}
#备节点
! Configuration File for keepalivedglobal_defs {notification_email {aaaa@xxxx.com}notification_email_from bem@aipark.comsmtp_server smtp.qiye.163.comsmtp_connect_timeout 30router_id NodeB
}
#vrrp script示例,必须声明在vrrp_instance节点前:
vrrp_script check_haproxy {script "/etc/keepalived/scripts/check-nginx.sh"interval 3  #每隔3秒坚持一次
}vrrp_instance http4dfs {state BACKUP   #设置为从服务器interface eth0  #监测网络接口dont_track_primarynopreemptvirtual_router_id 51 #主、备必须一样priority 80  #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)advert_int 1   #VRRP Multicast广播周期秒数authentication {auth_type PASS     #VRRP认证方式,主备必须一致auth_pass 1111   #(密码)}virtual_ipaddress {10.110.60.166     #VRRP HA虚拟地址}track_script {check_haproxy}
}

简单检查nginx进程是否存在,实际上nginx进程正常运行并不代表服务就是正常的,应该同时检查后端服务时候正常,check_nginx.sh:

#!/bin/bash
count=$(ps -C nginx --no-heading | wc -l)
if [ "$count" = "0" ]; then# systemctl start nginx.serviceecho `/opt/local/nginx/sbin/nginx`sleep 2count=$(ps -C nginx --no-heading | wc -l)exit 1
elseexit 0
fi

global_defs项

notification_email : keepalived在发生诸如切换操作时需要发送email通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
router_id : 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。

vrrp_instance项

state : 只能为两个值之一:MASTER或BACKUP(必须大写)。指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER。
interface : 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的。
mcast_src_ip : 发送多播数据包时的源IP地址(默认是224.0.0.28,使用默认的就可以了)。这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址。
virtual_router_id :0~255, 这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址。
priority : 1~254,数字越大优先级越高。设置本节点的优先级,优先级高的为master
advert_int : 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常。
authentication : 定义认证方式和密码,主从必须一样。
virtual_ipaddress : 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址。
track_script : 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
uncast_src_ip : 单播地址,即本机ip。
uncast_peer : 接收单播地址(BACKUP ip),配置在{}里面,可以多个。

vrrp_script

告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script。

script : 自己写的检测脚本。也可以是一行命令如killall -0 nginx。
interval 2 : 每2s检测一次。
weight -5 : 检测失败(脚本返回非0)则优先级 -5。
fall 2 : 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)。
rise 1 : 检测 1 次成功就算成功。但不修改优先级。

这里要说明一下script一般有2种写法:

通过脚本执行的返回结果,改变优先级,keepalived继续发送通告消息,backup比较优先级再决定。
脚本里面检测到异常,直接关闭keepalived进程,backup机器接收不到advertisement会抢占IP。
上文 vrrp_script 配置部分,killall -0 nginx属于第1种情况,/etc/keepalived/check_nginx.sh属于第2种情况(脚本中关闭keepalived)。个人更倾向于通过shell脚本判断,但有异常时exit 1,正常退出exit 0,然后keepalived根据动态调整的 vrrp_instance 优先级选举决定是否抢占VIP:

如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。
如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少。
其他情况,原本配置的优先级不变,即配置文件中priority对应的值。

提示:

优先级不会不断的提高或者降低。
可以编写多个检测脚本并为每个检测脚本设置不同的weight(在配置中列出就行)。
不管提高优先级还是降低优先级,最终优先级的范围是在[1,254],不会出现优先级小于等于0或者优先级大于等于255的情况。
在MASTER节点的 vrrp_instance 中 配置 nopreempt ,当它异常恢复后,即使它 priority 更高也不会抢占,这样可以避免正常情况下做无谓的切换。
以上可以做到利用脚本检测业务进程的状态,并动态调整优先级从而实现主备切换。
对于keepalived出现脑裂问题请查询keepalived脑裂章节

如果需要再虚拟一个其他网卡的vip,可以复制多一份vrrp_instance进行修改。

修改完后,复制或者同步修改好的配置文件到备机,记得修改备机的state为BACKUP和优先级prority, 优先级必须比主机的优先级低。

如果在不关闭主机keepalived进程的情况下,想要使某台备机提升为主机,可以修改优先级大于当前主机优先级50,重启备机keepalived即可。官方文档:

#for electing MASTER, highest priority wins. #to be MASTER, make this 50 more than on other machines. priority 100

[x] 开启相应访问端口
如果防火墙使用firewalld管理:

firewall-cmd --zone=public --add-port=80/tcp --permanent
开启80端口

[x] 开启vrrp协议支持
全部部署了keepalived的主机都需要开启vrrp支持。

如果遇到主备切换很慢而且主备都存在的情况下,请求却一直路由到备机,这种情况一般是防火墙没有开启vrrp的支持。需要按如下方法处理:
如果防火墙使用firewall-cmd进行管理(Centos 7):

添加规则

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT

重启防火墙

firewall-cmd --reload
enp0s3对应网卡名称, 224.0.0.18是keepalived的组播地址。

如果防火墙使用iptables进行管理(Centos 6):
vim /etc/sysconfig/iptables

添加配置

-A INPUT -i 网卡名称 -p vrrp -s 主/备IP -j ACCEPT
如果禁用了组播,可以使用单播

master

uncast_src_ip 10.0.0.1
uncast_peer {
10.0.0.2
}

backup

uncast_src_ip 10.0.0.2
uncast_peer {
10.0.0.1
}
[ ] 修改日志路径
keepalived的默认日志路径是: /var/log/message

以下以日志路径/var/log/keepalived.log为例:

keepalived --help 可以查看支持的配置

修改/etc/sysconfig/keepalived:
修改前: KEEPALIVED_OPTIONS="-D", 修改后: KEEPALIVED_OPTIONS="-D -d -S 0"

修改/etc/rsyslog.conf:
上面的0表示的是系统级别的日志存放路径local0.*, 在/etc/rsyslog.conf里面最后面增加:

local0.* /var/log/keepalived.log
重启相应服务: 修完上述两部分后,先重启系统日志服务:
sudo systemctl restart rsyslog.service
再重启keepalived服务:

sudo systemctl restart keepalived.service
如果上述必需配置都已经配置好了,还 是不能访问,那就是配置有问题了,请检查各个配置是否有拼写错误等原因。

问题和异常处理
查看日志发现健康检查一直提示子进程死亡,重启:
日志: Healthcheck child process(14203) died: Respawning

解决方法: 删除多无或无效的vrrp_server节点。 vrrp_server是用于lvs的负载均衡的,如无用可以删掉。 参考这里

执行跟踪脚本报错,提示:
/…/…/检查脚本.sh exited due to signal 15

解决方法: 脚本里的休眠时间要小于vrrp_script里面设置的执行间隔interval;

使用跟踪脚本检查并尝试重启nginx(或其他服务),不能重启,但是单独跑脚本却能重启:
原因:selinux的保护机制。

解决方法: 1.关闭selinux。临时关闭: setenfource 0; 永久关闭: 修改/etc/selinux/config里的SELINUX属性,enfourcing为强制开启,permissive为宽容,disabled为关闭,设置为后两个之一就可以。

Keepalived安装与配置相关推荐

  1. Linux下Keepalived 安装与配置 此博文包含图片

    来源:http://blog.sina.com.cn/s/blog_6dbc8a680100u1s7.htmlUAN  Keepalived 安装与配置 一.环境说明 1.操作系统内核版本:2.6.9 ...

  2. keepalived 安装和配置

    第一步:安装 yum -y install keepalived 第二步:配置 /etc/keepalived/keepalived.conf ! Configuration File for kee ...

  3. keepalived安装与配置_面试官问LVS+keepalived+nginx怎么实现时该怎么答?

    概述 前面大家已经对基本概念有个了解了,接下来就是搭建过程了~ 需求 1.LVS给两台nginx做负载均衡 2.keepalived做lvs高可用,同时做Real-Server健康检查,如果发现Rea ...

  4. keepalived安装与配置_Nginx_Keepalived高可用配置

    利用keepalived实现高可靠配置(HA) 2.1. 高可靠概念 HA(High Available):高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备 ...

  5. 如何查看keepalived版本号_Linux下Keepalived 安装与配置

    一.环境说明 1.操作系统内核版本:2.6.9-78.ELsmp 2.Keepalived软件版本:keepalived-1.1.20.tar.gz 二.环境配置 1.主Keepalived服务器IP ...

  6. Linux下Keepalived安装与配置

    一.简介 负载平衡是一种在真实服务器集群中分配IP流量的方法,可提供一个或多个高度可用的虚拟服务.在设计负载均衡拓扑时,重要的是要考虑负载均衡器本身的可用性以及它背后的真实服务器.用C编写的类似于la ...

  7. keepalived 安装及配置VIP漂移

    环境: 主机 10.10.6.105 备机 10.10.6.106 VIP  10.10.6.188 一.安装 yum install keepalived -y 二.配置文件(/etc/keepal ...

  8. 高性能集群软件Keepalived的介绍以及安装与配置

    Keepalived介绍: Keepalived是Linux下一个轻量级的高可用解决方案:起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态.它根据TCP/IP参考模型的第三.第四和第五层 ...

  9. FastDFS分布式文件系统集群安装与配置

    原文链接:http://blog.csdn.net/xyang81/article/details/52928230 FastDFS集群规划 跟踪服务器负载均衡节点1:192.168.1.206 df ...

最新文章

  1. 【清华大学龙明盛副教授】迁移学习理论与算法
  2. Pandas进阶修炼120题,给你深度和广度的船新体验
  3. 3.非关系型数据库(Nosql)之mongodb:升降序排序,排序分页,$all,$in,$nin,$or,$nor, $exists,游标,更新(update,$set,$unset,$inc)
  4. Opencv EmguCv 基本识别步骤
  5. 骚操作,IDEA防止写代码沉迷插件 !
  6. Centos7安装Redis4.0.8
  7. 市场营销读后感_好书共赏市场营销原理——带你探索市场营销成功的奥秘 !...
  8. 回顾InfoGAN与隐变量
  9. 【Python3】待解决的疑问
  10. win10 使用cmake编译opencv源码生成VS工程(二)
  11. 几款引擎比较:BigWorld,Unreal,CryEngine等
  12. 计算机控制原理中雷达天线,相控阵雷达工作原理
  13. 用C语言写Badapple
  14. Matlab save colormap
  15. java编程培训都学习哪些内容
  16. uni-app使用多彩色图标,阿里图库
  17. 化繁为简,我用”知晓推送”开发微信小程序订阅消息
  18. TensorFlow 入门到进阶,如何快速学习?
  19. element表格固定表头每列宽度,最右侧固定后,溢出出现滚动条内容和表头不能同时移动
  20. 局域网监控软件有哪些功能

热门文章

  1. [Vijos1009] 清帝之惑之康熙
  2. VS终结者即【Breeze's Terminator】 V1.0 正式版【完美版】发布
  3. 计算机应用技术macbook,告别MacBook小容量,网友:中国技术让库克泪流满面,这操作香!...
  4. SpringBoot解决跨域问题的六种方式
  5. SerializationException: Could not read JSON: Unrecognized token “xxx“
  6. greenplum获取建表语句_Greenplum数据库基本语句 - 树懒学堂
  7. 搭建B2B2C多商户商城、分销系统的价值
  8. 点击泰坦单位计算机,泰坦导弹制导计算机内部
  9. Windows Server 2008 R2域控组策略设置禁用USB
  10. 赛马娘日服下载登录问题详解,日服赛马娘怎么登录?