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: 优点:简单,基本不 ...
随机推荐
- vue项目浏览器ioc小图标
1 先有一个需要图片,png .jpg ...格式都可以 2 把图片转换成 .con 格式的图标 ,http://www.bitbug.net/使用比特虫转换 ,目标尺寸:16*16 或者 32*3 ...
- Jmeter四、jmeter脚本组成和组件搭配
一.jmeter脚本开发原则 简单:去除无关的组件,同时能复用的尽量复用. 正确:对脚本或者业务正确性进行必要的判断,不能少也不能多(200) 高效:部分组件仅仅在脚本开发模式使用,在真正生产环境下不 ...
- std::ref
The std::thread constructor copies the supplied values, without converting to the expected argument ...
- 【python】第一模块 步骤五 第一课、内存管理机制
第一课.内存管理机制 一.课程介绍 1.1 课程概要 课程概要 赋值语句的内存分析 垃圾回收机制 内存管理机制 课程目标 掌握赋值语句内存分析方法 掌握id()和is()的使用 了解python的垃圾 ...
- leetcode 1636
一些关于hashmap和list的用法 class Solution { public int[] frequencySort(int[] nums) { Map<Integer, Intege ...
- 免费Linux RDP,用来练习linux或者Python,还能做成远程桌面
分类:资源| 阅读:1103次阅读 goorm提供了免费的Linux容器,用它来在线练习命令行是非常不错的. 它的注册非常简单:https://ide.goorm.io/ 直接用谷歌账号登录即 ...
- XML_DTD_20200415
<!-- xml的注释写法 --> 格式良好的xml语言必须具备的几个条件 1.必须有xml声明语句,声明版本号与编码字符集 2.必须有且仅有一个根元素 3.标签大小写敏感 4.属性值 ...
- django_模板层的变量和标签
一.模板层的变量 1.能传递到模板层的数据类型:str(字符串).list(数组).dict(字典).obj(类实例化的对象).fun(函数)等. 2.在模板中使用变量的方法: (1)字符串:{{ 变 ...
- 第十二组 -摩天脆脆冰淇淋队-第四次团队作业:Git实战
这个作业属于哪个课程 至诚软工实践F班 - 福州大学至诚学院 - 班级博客 - 博客园 (cnblogs.com) 这个作业要求在哪里 第四次团队作业:Git实战 - 作业 - 至诚软工实践F班 - ...
- 磊磊零基础打卡算法:day16 c++ Trie树
5.19 Trie树: 用处:快速的查找和高效存储字符串集合的数据结构. 类似如此的查找,存储 其简单的两个操作:插入和删除 插入: void insert(char str[]) { int p; ...