keepalived的简单使用
原理简述
本篇主要学习keepalived配合nginx实现nginx的高可用, 也就是需要keepalived检测到nginx宕机时停用keepalived, 备用keepalived会自动接收过来.
简单的原理(如下图), 主备服务器会配置相同的vip(虚拟ip), 谁的优先级高谁来接收vip的请求, 然后nginx和keepalived部署在同一个服务器上面, keeplived控制机器接收到vip的请求, 交给了nginx来处理请求. nginx的功能主要是负责负载均衡, nginx的安装配置在此不再赘述, 可以参考这个: ngix安装与使用
keepalived功能有很多, 此篇只是最简单的配合ngxin实现高可用的demo.
安装
安装常用的的指令包:
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel安装:
yum install -y keepalived启动:
systemctl start keepalived重启:
systemctl restart keepalived关闭:
systemctl stop keepalived开机自启:
systemctl enable keepalived修改配置文件:
vim /etc/keepalived/keepalived.conf! Configuration File for keepalived # 定义虚拟路由, 必须叫VI_1
vrrp_instance VI_1 {
state MASTER #设置为主服务器, 备份服务器设置为BACKUP
interface enp0s3 #监控的网络接口(ifconfig或者ip addr指令找出网卡)
priority 100 #(优先级, 主机大一点, 备份机小一点)
virtual_router_id 99 #同一个vrrp_instance下routerId必须是一致的 authentication {
auth_type PASS #vrrp认证方式主备必须一致
auth_pass 12345 #密码
} virtual_ipaddress {
192.168.0.99 #虚拟ip, 主从一致, 可配置多个
}
}
另外一台机相同方法, 相同配置(state改成
BACKUP, priority调整调一下, 此例中是80)
vrrp 的主从并不是通过stat配置的MASTER和BACKUP决定的, 是通过优先级决定的
- 默认日志位置:
/var/log/message位置修改参考: keepalived 配置日志方法
参考2: Keepalived原理介绍和配置实践
参考3: keepalived介绍、安装及配置详解
参考4: https://codor.lanzoue.com/b012qnsvc 密码:1i77
检查是否脑裂
使用
a或者b进行查看, 默认的广播通道为224.0.0.18(我把时间删除了, 内容是我改的)192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
192.168.0.117 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 80, authtype simple, intvl 1s, length 20
192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
192.168.0.117 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 80, authtype simple, intvl 1s, length 20
192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
192.168.0.117 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 80, authtype simple, intvl 1s, length 20
如果结果如上, 说明出现了脑裂(主备都向外宣誓我是老大),
出现这种情况的原因是防火墙或者iptables拦截了vrrp请求, 进行放行即可.
防火墙(推荐):
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
firewall-cmd --reload
iptables:
iptables -A INPUT -s 192.168.1.0/24 -d 224.0.0.18 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p vrrp -j ACCEPT
不存在可以进行安装,
yum install iptables-services最后附上正常运行结果, 即只有100或者80优先级的机器来广播自己是老大
09:26:55.782258 IP 192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
09:26:56.782910 IP 192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
09:26:57.783787 IP 192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
09:26:58.784709 IP 192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
09:26:59.784792 IP 192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
09:27:00.785171 IP 192.168.0.111 > 224.0.0.18: VRRPv2, Advertisement, vrid 99, prio 100, authtype simple, intvl 1s, length 20
测试ip漂移
`ip漂移`: 就是主备切换过程成, vip漂到真实ip上的过程. 也称为`主备切换`.
测试过程就是停用master机器上面的keepalived或者关机master机器, 查看backup机器是否正常接过来, 一般1s左右可以切换过去. 当出现脑裂情况的时候切换过程也能实现, 只是很慢大约7s左右. 具体原因未深究.
漂移过程可以通过抓包实现, 也可以通过两给ngxin转发到不同tomcat中的项目或网页, 或者修改ngxin的默认网页进行测试都可.
至此位置简单使用就完成了, 下面介绍几个功能配置
VRRP脚本
签到keepalived的配置文件夹:
cd /etc/keepalived/创建一个脚本文件:
vim nginx_check.sh#!/bin/bash
count=`ps -C nginx --no-header |wc -l`
if [ $count -eq 0 ];then
killall keepalived
fi
赋予执行权限:
chmode +x nginx_check.sh引入脚本:
vim keepalived.conf与
vrrp_instance同级, 其中chk_nginx: 脚本名称, 自定义的script: 脚本位置interval: 执行间隔weight: 权重, 如果是负数, 当执行失败时候会影响vrrp_instance中的优先级priority, 因为主备切换是通过优先级的高低的进行切换的, 所以也可以通过这个优先级来进行主动控制主备切换. 而脚本中的内容可以很灵活地实现很多功能. 此个demo中只是简单实现检测到ngxin关闭后自动关闭keepalived, 也可以实现检测启动后进行开启, 然后延迟2s后查看是否启动成功, 未成功再进行关闭keepalived或者降低优先级(配合右键通知).vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
#weight -30
}
配置到vrrp_instance中, 与authentication和virtual_ipaddress同级
track_script {
chk_nginx
}
修改后的配置文件
! Configuration File for keepalived vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
#weight -30
} vrrp_instance VI_1 {
state MASTER
interface enp0s3
priority 100
advert_int 1
virtual_router_id 99
authentication {
auth_type PASS
auth_pass 221531
} track_script {
chk_nginx
} virtual_ipaddress {
192.168.0.99
}
}
测试
正常启动时候, 手动关闭nginx, 查看keepalived的状态.
参考:
参考2: Keepalived 的主备切换怎么做
邮件配置
邮件功能是linux上面的mail指令.
安装
mail:yum -y install mailx编辑配置文件(设置发送人信息):
vim /etc/mail.rc, 在末尾处添加set from=xxx@163.com
set smtp=smtp.163.com
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=KJFHTOSXZQPNFAIU #邮箱需要开启POP3/SMTP服务并设置密钥
set smtp-auth=login
set ssl-verify=ignore
测试mail功能:
echo test mail | mail -s testa 收件人id@qq.com-s后面是主题的意思echo test maill中的test mail 是邮件正文.最后跟着收件人
配置到keepalived中, 方法1
创建脚本
vim mail_send.sh(记得赋予执行权限)可以使用
./mail_send.sh master进行测试#!/bin/bash
contact='收件人邮箱@qq.com'
notify() {
mailsubject="$(hostname) to be $1, vip 转移"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
修改配置文件:
vim keepalived.confvrrp_instance下与authentication同级处
notify_master "/etc/keepalived/mail_senc.sh master"
notify_backup "/etc/keepalived/mail_send.sh backup"
notify_fault "/etc/keepalived/mail_send.sh fault"
整体配置文件
! Configuration File for keepalived vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
#weight -30
} vrrp_instance VI_1 {
state MASTER
interface enp0s3
priority 100
advert_int 1
virtual_router_id 99
# 当进入master/backup/fault状态时触发脚本, 可携带参数
notify_master "/etc/keepalived/mail_send.sh master"
notify_backup "/etc/keepalived/mail_send.sh backup"
notify_fault "/etc/keepalived/mail_send.sh fault"
authentication {
auth_type PASS
auth_pass 221531
} track_script {
chk_nginx
} virtual_ipaddress {
192.168.0.99
}
}
配置到keepalived中, 方法2
脚本内容, 下面这个是漂移到master时, 另外创建backup和fault
#!/bin/bash
contacts='收件人邮箱1, 收件人邮箱2'
ip a > ipa_temp.txt echo "$(date +'%F %T'): Keepalived instance I became MASTER on $(hostname). --- from master" | mail -s "Master Keepalived notification" -a ipa_temp.txt "$contacts"
修改配置文件:
vim keepalived.confvrrp_instance下与authentication同级处, 后面的
root是执行人和所在组notify_master /etc/keepalived/mail_send_master.sh root root
notify_backup /etc/keepalived/mail_send_back_up.sh root root
notify_fault /etc/keepalived/mail_send_faul.sh troot root
测试状态转移时有没有邮箱接收到即可, 通过重启, 停用
参考:
参考2: keepalived邮件通知
参考3: Keepalived故障切换时的邮件通知
参考4: mail指令同时发送给多个用户
学习链接
keepalived的简单使用的更多相关文章
- 测试redis+keepalived实现简单的主备切换【转载】
转自: 测试redis+keepalived实现简单的主备切换 - Try My Best 尽力而为 - ITeye技术网站http://raising.iteye.com/blog/2311757 ...
- 高可用技术之keepalived原理简单了解
Keepalived 工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议. 虚拟路由冗余协 ...
- keepalived+lvs简单实现
一,部署实战环节 01,服务架构图: 服务器镜像为centos6.9 02,服务安装: 10.0.0.10: 下载keeplived官方包--> http://www.keepalived. ...
- Keepalived之简单有效的配置
1.简介 官网地址:https://www.keepalived.org/ 源码包下载地址:https://www.keepalived.org/download.html Keepalived是一种 ...
- 配置LVS + Keepalived高可用负载均衡集群之图文教程
负载均衡系统可以选用LVS方案,而为避免Director Server单点故障引起系统崩溃,我们可以选用LVS+Keepalived组合保证高可用性. 重点:每个节点时间都同步哈! C++代码 [r ...
- Linux 高可用(HA)集群之keepalived详解
http://freeloda.blog.51cto.com/2033581/1280962 大纲 一.前言 二.Keepalived 详解 三.环境准备 四.LVS+Keepalived 实现高可用 ...
- keepalived双机热备nginx
nginx目前是我最常用的反向代理服务,线上环境为了能更好的应对突发情况,一般会使用keepalived双机热备nginx或者使用docker跑nginx集群,keepalived是比较传统的方式,虽 ...
- haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)
文章转载自: haproxy+keepalived https://cloud.tencent.com/developer/article/1026385 网络四层和七层的区别 https: ...
- Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
Nginx.LVS.HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能. 1)在四层(tcp)实现负载均衡的 ...
- keepalived与zookeeper
keepalived与zookeeper都可以用来实现高可用,高可用一般跟负载均衡会一起考虑,所以通常也会考虑到相应的负载均衡能力, 1.概括对比: 1.1.Keepalived: 优点:简单,基本不 ...
随机推荐
- uniapp项目 hbuilder工程转cli工程 hbuilder工程不可以用命令行打包
hbuilder工程不可以用命令行打包,只能用自带的发行手动打包 cli工程可以用命令行打包,可以配置多环境 1.安装空的cli项目 vue create -p dcloudio/uni-preset ...
- C语言历史与C++的区别
前期演变: C语言的前身是1967年由Martin Richards为开发操作系统和编译器而提出的两种高级程序设计语言BCPL和B.BCPL.Ken Thompson在BCPL的基础上,提出了新的功能 ...
- 字节过滤流 缓冲流-->BufferedInputStream用法
1创建字节输入节点流FileInputStream fis = new FileInputStream("文件读取的路径");2创建字节输入过滤流,包装一个字节输入节点流Buffe ...
- JS变量之间赋值,修改变量值,原变量会随之改变的问题
现象: 开发vue项目的过程中,需要多次用到一份基础数据,为减少代码量,提高一下复用效果,便用变量A来定义,在项目中需要用到时就用变量A进行赋值. 在项目中调用时,我新定义一个变量B,再将变量A赋值给 ...
- 新的世界,我们推荐不劳而获 -> 持续更新中
随着技术带来的生产力爆发越来越猛烈,有人提出是不是有必要保留一些落后的生产工艺及相关岗位,以避免社会动荡. 我的答案:不用.但是要改变社会对于不劳而获的态度:我们对于生活资料的不劳而获持接受的态度,但 ...
- revit添加扩展组件
revit 添加组件方法: 查找本地这个地址: C:\Users\用户名\AppData\Roaming\Autodesk\Revit\Addins\2018 下载网上找到的插件,一般从github查 ...
- docker&docker-compose安装
一.docker安装 1.通过 uname -r 命令查看当前的内核版本,Docker 要求 CentOS 系统的内核版本高于 3.10 uname -r 2.查看系统是否安装过docker yum ...
- centos7所有用户循环登录
1 使用快捷键Ctrl+Alt+F2进入命令终端 2 输入账号密码 3 输入 /usr/bin/sudo 4 输入 startx 那种单用户,改配置的试了没有用
- 解决com.alibaba.excel.exception.ExcelGenerateException: Can not close IO.
我在使用easycel导出到zip包中时,出现了这个问题.各种文件输出时产生的问题其实大同小异 查看了一些网上的文章,还有github上关于此bug的issue,总算是理清并解决了. 解决方法一 主要 ...
- VSCode 开发Vue + ElementUI
参考 (1)VSCode 开发Vue + ElementUI (2)玩转VSCode-完整构建VSCode开发调试环境 (shuzhiduo.com) (3)使用vscode搭建vue项目并引用ele ...