Centos7 安装 Keepalived
目标: Keeplaived 简单模拟测试一下Nginx 故障切换
前言:C7 默认的 1.3.5 似乎有点问题,改装 keepalived-2.0.7

1:安装 Nginx 和确认 (略)
2:安装配置 Keepalived
3:Nginx 健康脚本
4:Maix 邮件报警
2:安装配置 Keepalived
2.1 安装 cheese 源
# wget http://www.nosuchhost.net/~cheese/fedora/packages/epel-7/x86_64/cheese-release-7-1.noarch.rpm
2.2 rpm -ivh cheese-release-7-1.noarch.rpm
2.3 yum install keepalived
======================================================================
Package Arch Version Repository Size
======================================================================
Installing:
keepalived x86_64 2.0.7-1.el7 cheese 417 k
Installing for dependencies:
libnl x86_64 1.1.4-3.el7 base 128 k
lm_sensors-libs x86_64 3.4.0-8.20160601gitf9185e5.el7 base 42 k
net-snmp-agent-libs x86_64 1:5.7.2-48.el7_8.1 updates 707 k
net-snmp-libs x86_64 1:5.7.2-48.el7_8.1 updates 751 k
Transaction Summary
======================================================================
2.4 配置
# vi /etc/keepalived/keepalived.conf
主节点配置
########## Master ##################
global_defs {
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict # 需要注释掉
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # 主节点
interface ens192 # 网卡名称 !
virtual_router_id 51
priority 100 # 优先级高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.5.40 # 虚拟IP
}
}
########## 余下内容可先删除 ###########
备用节点配置
########## Backup ##################
global_defs {
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict # 需要注释掉
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state Backup # 备用节点
interface ens192 # 网卡名称 !
virtual_router_id 51
priority 90 # 优先级低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.5.40 # 虚拟IP
}
}
########## 余下内容可先删除 ########
2.5 服务启动
# systemctl start keepalived (主/备顺序启动)
# tailf /var/log/message (可监控LOG)
41 systemd: Starting LVS and VRRP High Availability Monitor...
41 Keepalived[1332]: Starting Keepalived v2.0.7 (08/23,2018)
41 Keepalived[1332]: Running on Linux 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 (built for Linux 3.10.0)
41 Keepalived[1332]: Command line: '/usr/sbin/keepalived' '-D'
41 Keepalived[1332]: Opening file '/etc/keepalived/keepalived.conf'.
41 Keepalived[1332]: (Line 13) number '0' outside range [1e-06, 4294]
41 Keepalived[1332]: (Line 13) vrrp_garp_interval '0' is invalid
41 Keepalived[1332]: (Line 14) number '0' outside range [1e-06, 4294]
41 Keepalived[1332]: (Line 14) vrrp_gna_interval '0' is invalid
41 systemd: Started LVS and VRRP High Availability Monitor.
41 Keepalived[1333]: Starting VRRP child process, pid=1334
41 Keepalived_vrrp[1334]: Registering Kernel netlink reflector
41 Keepalived_vrrp[1334]: Registering Kernel netlink command channel
41 Keepalived_vrrp[1334]: Opening file '/etc/keepalived/keepalived.conf'.
41 Keepalived_vrrp[1334]: Assigned address 192.168.5.41 for interface ens192
41 Keepalived_vrrp[1334]: Registering gratuitous ARP shared channel
41 Keepalived_vrrp[1334]: (VI_1) removing VIPs.
41 Keepalived_vrrp[1334]: (VI_1) Entering BACKUP STATE (init)
41 Keepalived_vrrp[1334]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(8,9)]
41 Keepalived_vrrp[1334]: (VI_1) Receive advertisement timeout
41 Keepalived_vrrp[1334]: (VI_1) Entering MASTER STATE
41 Keepalived_vrrp[1334]: (VI_1) setting VIPs.
41 Keepalived_vrrp[1334]: Sending gratuitous ARP on ens192 for 192.168.5.40
41 Keepalived_vrrp[1334]: (VI_1) Sending/queueing gratuitous ARPs on ens192 for 192.168.5.40
41 Keepalived_vrrp[1334]: Sending gratuitous ARP on ens192 for 192.168.5.40
※ number '0' outside range 可以改成 0.001
# ip addr (主节点虚拟ip OK )
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:11:11 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.41/24 brd 192.168.5.255 scope global ens192
valid_lft forever preferred_lft forever
inet 192.168.5.40/32 scope global ens192
valid_lft forever preferred_lft forever
# ip addr (备份节点 无虚拟ip)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:22:22:22 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.42/24 brd 192.168.5.255 scope global ens192
valid_lft forever preferred_lft forever
2.6 访问测试
C:\Users\liu>ping 192.168.5.40
正在 Ping 192.168.5.40 具有 32 字节的数据:
来自 192.168.5.40 的回复: 字节=32 时间=8ms TTL=63
来自 192.168.5.40 的回复: 字节=32 时间=8ms TTL=63
64 bytes from 192.168.5.40: icmp_seq=1 ttl=64 time=0.047 ms
web 服务应该也能正常访问(主节点提供)
2.7 手动切换测试
# systemctl stop keepalived (主节点 停服务)
# tailf /var/log/message (备用节点LOG显示已经接管)
42 Keepalived_vrrp[1570]: (VI_1) Backup received priority 0 advertisement
42 Keepalived_vrrp[1570]: (VI_1) Receive advertisement timeout
42 Keepalived_vrrp[1570]: (VI_1) Entering MASTER STATE
42 Keepalived_vrrp[1570]: (VI_1) setting VIPs.
42 Keepalived_vrrp[1570]: Sending gratuitous ARP on ens192 for 192.168.5.40
42 Keepalived_vrrp[1570]: (VI_1) Sending/queueing gratuitous ARPs on ens192 for 192.168.5.40
42 Keepalived_vrrp[1570]: Sending gratuitous ARP on ens192 for 192.168.5.40
web 服务应该也能正常访问(备用节点提供)
如果主节点恢复后会重新接管服务(根据配置)
3:Nginx 健康脚本
3.1 编辑 Nginx 监控Shell(使用脚本自动检测和切换服务,注意脚本运行权限)
# vi /etc/keepalived/nginx_health.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/sbin/nginx
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
systemctl stop keepalived
fi
fi
3.2 keepalived 配置文件中添加监控项
########## Master ##################
global_defs {
notification_email {
acassen@firewall.loc # mail 故障报警
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict # 需要注释掉
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script nginx_check {
script "/etc/keepalived/nginx_health.sh" # nginx 检测脚本路径
interval 2 # 检测间隔
weight -20 # 如果条件成立权重 -20 注意数字
}
vrrp_instance VI_1 {
state MASTER # 主节点
interface eth0 # 网卡名称 !
virtual_router_id 51
priority 100 # 优先级高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
nginx_check # Nginx监控服务
}
virtual_ipaddress {
192.168.5.40 # 虚拟IP
}
}
########## 余下内容可先删除 ########
4:Mailx 邮件报警
4.1 安装mailx和配置(略)
注意25端口是否能够发送
4.2 编辑邮件监控Shell(使用脚本自动发送服务切换邮件,注意脚本运行权限)
# vi /etc/keepalived/mail.sh
contact='admin@cnblog.xyz'
notify() {
mailsubject="$(hostname) to be $1, vip Trans"
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
4.3 手动测试一下邮件脚本
[root@ nginx-A1] # sh /etc/keepalived/mail.sh backup
正常情况下应该能收到邮件
4.4 keepalived 配置文件中添加配置
...
vrrp_script nginx_check {
script "/etc/keepalived/nginx_health.sh"
interval 2
weight -20
}
notify_master "/etc/keepalived/mail.sh master"
notify_backup "/etc/keepalived/mail.sh backup"
notify_fault "/etc/keepalived/mail.sh fault"
}
主备切换时候正常情况下应该收到2封邮件。
Centos7 安装 Keepalived的更多相关文章
- Centos7 安装keepalived实现高可用
场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not ...
- centos7 安装keepalived
node1 192.168.5.101 node2 192.168.5.102 1.安装 openssl openssl-devel yum install openssl openssl-devel ...
- centos7安装keepalived问题
● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/syste ...
- Centos7安装keepalived(自定义路径安装)-高级篇
0.Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker.但 ...
- Centos7+LVS-DR+keepalived实验(包含sorry-server、日志、及HTTP-GET的健康检测)
目录检索 一.简介 1.lvs-dr原理请参考原理篇 2.keepalived原理请参考原理篇 3.基于lvs-dr+keepalived故障切换架构图如下: 二.部署 1.环境 2.准备RS的web ...
- CentOS7.4 Keepalived+LVS 负载均衡 后台节点健康检查
主机信息 VIP 10.10.10.55 LVS01 10.10.10.59 Web01 10.10.10.60 Web02 10.10.10.61 一.apache简单配置 1.(10.10.10. ...
- linux下安装keepalived
keepalived安装文档 1. 安装环境 su - root yum -y install kernel-devel* yum -y install openssl-* yum -y instal ...
- HP服务器 hp 360g5 centos7安装问题
HP服务器 hp 360g5 centos7安装问题 一 :启动盘无法识别硬盘 1.进入安装光盘,用上下键选择安装centos--Install Centos7(注意不可按Enter键),如图: 2 ...
- CentOS7 安装Mono及Jexus
CentOS7安装Mono及Juxes 1 安装Mono 1.1 安装yum-utils 因为安装要用到yum-config-manager,默认是没有安装的,所以要先安装yum-utils包.命令如 ...
随机推荐
- NumPy之:使用genfromtxt导入数据
目录 简介 genfromtxt介绍 多维数组 autostrip comments 跳过行和选择列 简介 在做科学计算的时候,我们需要从外部加载数据,今天给大家介绍一下NumPy中非常有用的一个方法 ...
- 【pytest系列】- fixture测试夹具详解
如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html fixture的优势 pyt ...
- dubbo服务暴露原理-远程暴露
1.与本地暴露相比,远程暴露也大同小异 我们已经到了第三个关键词Procotol我们来看看他的继承体系图 按照经典图的路线,我们下一个关键词应该就是Server了,从方法名openServer(url ...
- Elastic-Job原理
概述Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成. Elastic-Job-Lite定位为轻量级无中心 ...
- TLB和CPU缓存
TLB 如果每次应用程序访问一个线性地址都需要先解析(查PDT,PTT)那么效率十分低,为了提高执行效率CPU在CPU内部建立了一个TLB表,此表和寄存器一样访问速度极高.其会记录线性地址和物理地址之 ...
- 从零搭建springboot服务01-初始搭建、内嵌swagger
愿历尽千帆,归来仍是少年 1.基础springBoot框架 编辑工具:IDEA.jdk1.8.tomcat8.maven3.3.9 编码格式:UTF-8 参考文献:https://www.cnblog ...
- [DB] Spark Streaming
概述 流式计算框架,类似Storm 严格来说不是真正的流式计算(实时计算),而是把连续的数据当做不连续的RDD处理,本质是离散计算 Flink:和 Spark Streaming 相反,把离散数据当成 ...
- Sql Server 课堂笔记
创建表 --创建学生表 create table student (sno char(8) primary key, sname char(8) not null unique, ssex char( ...
- 11.8 iotop:动态显示磁盘I/O统计信息
iotop命令是一款实时监控磁盘I/O的工具,但必须以root用户的身份运行.使用iotop命令可以很方便地查看每个进程使用磁盘I/O的情况. 最小化安装系统一般是没有这个命令的,需要使用yum命令额 ...
- KMP算法中我对获取next数组的理解
之前在学KMP算法时一直理解不了获取next数组的函数是如何实现的,现在大概知道怎么一回事了,记录一下我对获取next数组的理解. KMP算法实现的原理就不再赘述了,先上KMP代码: 1 void g ...