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: 优点:简单,基本不 ...
随机推荐
- 【Appium_python】多进程启动时,没有设置间隔导致连接关闭,以及等待时间,导致用例未执行完成,服务提早关闭。
多进程启动多设备时,没有设置间隔时间,appium服务器以为受到远程攻击,就自动关闭连接,导致服务启动失败, 解决方法:用time.sleep设置时间间隔 也需要增加等待时间,等待其他设备用例都执行完 ...
- Java知识体系深度理解
1 post请求和get请求异同点 ①无论是POST还是GET请求,都是基于超文本传输协议(HTTP)的,而HTTP协议是TCP/IP协议族的应用层协议. HTTP的底层是TCP/IP.所以GET和P ...
- 4组-Alpha冲刺-6/6
一.基本情况 队名:摸鲨鱼小队 组长博客:https://www.cnblogs.com/smallgrape/p/15574385.html 小组人数:8人 二.冲刺概况汇报 组长:许雅萍 过去两天 ...
- 虚拟机安装windows 7 32位 + sqlserver 2000
安装包网盘地址:(https://pan.baidu.com/s/1ZoC-cTafBi8zZbCkvvmvNA?pwd=x1y2 提取码:x1y2 ) VMware 安装win7 32 位 http ...
- Gabor滤波(个人学习)
Gabor滤波 1.优点 Gabor小波与人类视觉系统中简单细胞的视觉刺激响应非常相似.在提取目标的局部空间和频率与信息方面具有良好的特性. 对于图像的边缘敏感,能够提供良好的方向选择和尺度选择.因此 ...
- pytorch 简简单单求个值
能用张量处理就用张量,不要使用for in 跑循环,一个是容易出错,一个是比较浪费时间,应用广播机制的话去做很容易的 1.5 使用mean处理平均值 2. 在处理梯度的时候无法更改自身,因此使用的办法 ...
- 云服务器搭建redis主从复制以及哨兵模式(附踩坑记录)
云服务器搭建redis主从复制以及哨兵模式(附踩坑记录) 踩坑记录见最后 搭建一主两从: 在根目录下任意新建一个目录/myredis来存放配置文件: 将我们常用的redis.conf文件拷贝到该目录下 ...
- qtconsole和jupyter-notebook的对应启动命令行配置
jupyter-notebook: set conda_path=D:\use\program\Miniconda3 pushd %conda_path% call Scripts\activate. ...
- 在vscode中用tsc编译ts文件的时候报错,tsc : 无法加载文件,因为在此系统上禁止运行脚本;SecurityError
1. TypeScript安装成功,在C盘的Administrator目录下,运行 tsc -v 也可看到TypeScript的版本. 2. 但在vscode中的时候运行tsc 编译ts文件的时候报 ...
- Ubuntu-18.04.1-live-server-amd64.iso安装全过程
以下向你介绍安装Ubuntu-18.04.1-live-server-amd64.iso版本的全过程,同时要说明的是Ubuntu 18.04.1 server版本只能通过文本的方式安装,即它没有和Ub ...