Keepalived安装与配置
**
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安装与配置相关推荐
- Linux下Keepalived 安装与配置 此博文包含图片
来源:http://blog.sina.com.cn/s/blog_6dbc8a680100u1s7.htmlUAN Keepalived 安装与配置 一.环境说明 1.操作系统内核版本:2.6.9 ...
- keepalived 安装和配置
第一步:安装 yum -y install keepalived 第二步:配置 /etc/keepalived/keepalived.conf ! Configuration File for kee ...
- keepalived安装与配置_面试官问LVS+keepalived+nginx怎么实现时该怎么答?
概述 前面大家已经对基本概念有个了解了,接下来就是搭建过程了~ 需求 1.LVS给两台nginx做负载均衡 2.keepalived做lvs高可用,同时做Real-Server健康检查,如果发现Rea ...
- keepalived安装与配置_Nginx_Keepalived高可用配置
利用keepalived实现高可靠配置(HA) 2.1. 高可靠概念 HA(High Available):高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备 ...
- 如何查看keepalived版本号_Linux下Keepalived 安装与配置
一.环境说明 1.操作系统内核版本:2.6.9-78.ELsmp 2.Keepalived软件版本:keepalived-1.1.20.tar.gz 二.环境配置 1.主Keepalived服务器IP ...
- Linux下Keepalived安装与配置
一.简介 负载平衡是一种在真实服务器集群中分配IP流量的方法,可提供一个或多个高度可用的虚拟服务.在设计负载均衡拓扑时,重要的是要考虑负载均衡器本身的可用性以及它背后的真实服务器.用C编写的类似于la ...
- keepalived 安装及配置VIP漂移
环境: 主机 10.10.6.105 备机 10.10.6.106 VIP 10.10.6.188 一.安装 yum install keepalived -y 二.配置文件(/etc/keepal ...
- 高性能集群软件Keepalived的介绍以及安装与配置
Keepalived介绍: Keepalived是Linux下一个轻量级的高可用解决方案:起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态.它根据TCP/IP参考模型的第三.第四和第五层 ...
- FastDFS分布式文件系统集群安装与配置
原文链接:http://blog.csdn.net/xyang81/article/details/52928230 FastDFS集群规划 跟踪服务器负载均衡节点1:192.168.1.206 df ...
最新文章
- 【清华大学龙明盛副教授】迁移学习理论与算法
- Pandas进阶修炼120题,给你深度和广度的船新体验
- 3.非关系型数据库(Nosql)之mongodb:升降序排序,排序分页,$all,$in,$nin,$or,$nor, $exists,游标,更新(update,$set,$unset,$inc)
- Opencv EmguCv 基本识别步骤
- 骚操作,IDEA防止写代码沉迷插件 !
- Centos7安装Redis4.0.8
- 市场营销读后感_好书共赏市场营销原理——带你探索市场营销成功的奥秘 !...
- 回顾InfoGAN与隐变量
- 【Python3】待解决的疑问
- win10 使用cmake编译opencv源码生成VS工程(二)
- 几款引擎比较:BigWorld,Unreal,CryEngine等
- 计算机控制原理中雷达天线,相控阵雷达工作原理
- 用C语言写Badapple
- Matlab save colormap
- java编程培训都学习哪些内容
- uni-app使用多彩色图标,阿里图库
- 化繁为简,我用”知晓推送”开发微信小程序订阅消息
- TensorFlow 入门到进阶,如何快速学习?
- element表格固定表头每列宽度,最右侧固定后,溢出出现滚动条内容和表头不能同时移动
- 局域网监控软件有哪些功能
热门文章
- [Vijos1009] 清帝之惑之康熙
- VS终结者即【Breeze's Terminator】 V1.0 正式版【完美版】发布
- 计算机应用技术macbook,告别MacBook小容量,网友:中国技术让库克泪流满面,这操作香!...
- SpringBoot解决跨域问题的六种方式
- SerializationException: Could not read JSON: Unrecognized token “xxx“
- greenplum获取建表语句_Greenplum数据库基本语句 - 树懒学堂
- 搭建B2B2C多商户商城、分销系统的价值
- 点击泰坦单位计算机,泰坦导弹制导计算机内部
- Windows Server 2008 R2域控组策略设置禁用USB
- 赛马娘日服下载登录问题详解,日服赛马娘怎么登录?