文章目录
1 Keepalived
1.1 keepalived简介
keepalived
观察其名可知,保持存活,在网络里面就是保持在线
,也就是所谓的高可用
或热备
,是集群管理中轻量级的保证集群高可用
的一个服务软件,其功能类似于heartbeat
,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生
说到keepalived
就不得不说VRRP
协议(目的是解决静态路由出现的单点故障问题),可以说这个协议就是keepalived
实现的基础,那么首先我们来看看VRRP
协议
1.2 VRRP协议介绍
学过网络的朋友都知道,网络在设计的时候必须考虑到冗余容灾
,包括线路冗余,设备冗余等,防止网络存在单点故障,那在路由器或三层交换机处实现冗余就显得尤为重要。
在网络里面有个协议就是来做这事的,这个协议就是VRRP
协议,Keepalived
就是巧用VRRP
协议来实现高可用性(HA
)的发生。
VRRP
全称Virtual Router Redundancy Protocol
,即虚拟路由冗余协议
。对于VRRP
,需要清楚知道的是:
VRRP
是用来实现路由器冗余的协议VRRP
协议是为了消除在静态缺省路由环境下路由器单点故障引起的网络失效而设计的主备模式的协议,使得发生故障而进行设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数VRRP
协议需要具有IP备份
,优先路由选择,减少不必要的路由器通信等功能VRRP
协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP
(一个或多个)。然而,在路由器组内部,如果实际拥有这个对外IP
的路由器,如果工作正常的话,就是master
,或者是通过算法选举产生的,MASTER
实现针对虚拟路由器IP
的各种网络功能,如ARP
请求,ICMP
,以及数据的转发等,其他设备不具有该IP
,状态是BACKUP
。除了接收MASTER
的VRRP
状态通告信息外,不执行对外的网络功能,当主级失效时,BACKUP
将接管原先MASTER
的网络功能。VRRP
协议配置时,需要配置每个路由器的虚拟路由ID
(VRID
)和优先权值,使用VRID
将路由器进行分组,具有相同VRID
值的路由器为同一个组,VRID
是一个0-255
的整整数,同一个组中的路由器通过使用优先权值来选举MASTER
,优先权大者为MASTER
,优先权也是一个0-255
的正整数
1.3 keepalived工作原理
keepalived
可提供vrrp
以及health-check
功能,可以只用它提供双机浮动的vip
(vrrp
虚拟路由功能),这样可以简单实现一个双机热备高可用功能;keepalived
是以VRRP虚拟路由冗余协议
为基础实现高可用的,可以认为是实现路由器高可用的协议,即将N
台提供相同功能的路由器组成一个路由器组,这个组里面有一个master
和多个backup
,master
上面有一个对外提供服务的vip
(该路由器所在局域网内其他机器的默认路由为该vip
),master
会发广播,当backup
收不到VRRP
包时就认为master
宕掉了,这时就需要根据VRRP
的优先级来选举一个backup
当master
。这样的话就可以保证路由器的高可用了。
下图是keepalived
的组件图
keepalived
也是模块化设计,不同模块不同的功能,它主要有三个模块,分别是core
、check
和VRRP
,其中:
core
模块:为keepalived
的核心组件,负责主进程的启动、维护以及全局配置文件的加载和解析;check
:负责健康检查,包括常见的各种检查方式;VRRP
模块:是来实现VRRP
协议的。system call
:系统调用watch dog
:监控check
和vrrp
进程的看管者,check
负责检测器子进程的健康状态,当其检测到master
上的服务不可用时则通告vrrp
将其转移至backup
服务器上libipfwc
:iptables(ipchains)库
,配置LVS
会用到libipvs*
:配置LVS
会用到
注意,keepalived
和LVS
完全是两码事,只不过他们各负其责相互配合而已。
keepalived
正常启动的时候,共启动3个进程:
一个是父进程
,负责监控其子进程;一个是VRRP
子进程,另外一个是checkers
子进程;
两个子进程都被系统watchdog
看管,两个子进程各自负责自己的事。
Healthcheck
子进程检查各自服务器的健康状况,,例如http,lvs
。如果healthchecks
进程检查到master
上服务不可用了,就会通知本机上的VRRP
子进程,让他删除通告,并且去掉虚拟IP
,转换为BACKUP
状态。
1.4 Keepalived作用
Keepalived
主要用作RealServer
的健康状态检查以及LoadBalance
主机和BackUP
主机之间failover
的实现。Keepalived
的作用是检测web
服务器的状态,如果有一台web
服务器死机,或工作出现故障,Keepalived
将检测到,并将有故障的web
服务器从系统中剔除,当web
服务器工作正常后Keepalived
自动将web
服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
1.5 lvs和keepalived的异同
lvs和keepalived的异同:
- 这两个软件的表现形式很相似,都是
一ip
对多ip
的存在形式 lvs
是一个实现负载均衡的软件,keepalived
是一个实现高可用(HA
)的软件,他们的主要功能是不同的lvs
的工作模式:通过ipvsadm
软件设置vip
,添加rip
(多个),数据从vip
进来,经过ipvs
的调度,分发到具体的rip
机器上keepalived
的工作模式:通过配置文件(/etc/keepalived/keepalived.conf)设置vip
和主从节点(rip),数据从vip
进来,到主节点(rip),当主节点挂掉之后,则到从节点(rip),配置文件可以配置lvs,也可以不配置lvs和keepalived
组合
lvs和keepalived
的组合使用是:他们公用一个vip
,keepalived
的主从节点就是一个lvs
(对lvs做了主从),然后lvs将数据进行转发
1.6 安装keepalived
1.6.1 下载解压
下载:https://www.keepalived.org/download.html
解压 : tar -zxvf keepalived-2.0.18.tar.gz
1.6.2 编译安装
使用configure
命令配置安装目录与核心配置文件所在位置:
./configure --prefix=/usr/local/keepalived --sysconf=/etc
prefix
:keepalived
安装的位置sysconf
:keepalived
核心配置文件所在位置,固定位置,改成其他位置则keepalived
启动不了,/var/log/messages
中会报错
配置过程中可能会出现警告信息,如下所示:
*** WARNING – this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
安装libnl/libnl-3
依赖
yum -y install libnl libnl-devel
安装keepalived
make && make install
配置文件在/etc/keepalived/keepalived.conf
如果忘记安装配置的目录,则通过如下命令找到:
whereis keepalived
启动keepalived
进入sbin目录
./keepalived
或者
service keepalived start|status|stop|reload
默认日志路径在/var/log/messages
1.6.3 把keepalived注册为系统服务
拷贝配置文件
将安装目录的keepalived
目录下etc/init.d/keepalived
拷贝到/etc/init.d/
下
将安装目录的keepalived
目录下etc/sysconfig/keepalived
拷贝到/etc/sysconfig/
下
刷新systemctl
systemctl daemon-reload
启动、停止、重启keepalived
启动
systemctl start keepalived.service
停止
systemctl stop keepalived.service
重启
systemctl restart keepalived.service
1.6.4 配置keepalived 主机
通过命令vim keepalived.conf
打开配置文件
global_defs {
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一
router_id keep_171
}
vrrp_instance VI_1 {
#当前节点所属的虚拟路由的名称
# 表示状态是MASTER主机还是备用机BACKUP
state MASTER
# 该实例绑定的网卡
interface eth0
# 保证主备节点一致即可
virtual_router_id 51
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
# 主备之间同步检查时间间隔,单位秒
advert_int 2
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.161
}
}
注意
:interface
需要查看网卡信息命令,如下就是eth0
ip addr
执行结果:
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:4e:db:c4 brd ff:ff:ff:ff:ff:ff
inet 10.0.4.8/22 brd 10.0.7.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe4e:dbc4/64 scope link
valid_lft forever preferred_lft forever
启动keepalived
查看进程
ps -ef|grep keepalived
1.6.5 实现双机主备高可用
修改备机配置
global_defs {
router_id keep_172
}
vrrp_instance VI_1 {
# 备用机设置为BACKUP
state BACKUP
interface eth0
virtual_router_id 51
# 权重低于MASTER
priority 80
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.1.161
}
}
启动 Keepalived
访问vip即可访问主机,当主机失效时访问vip就会访问到备机
1.6.6 keepalived配置nginx自动重启
(1)编写脚本
在/etc/keepalived/
下创建脚本check_nginx_alive_or_not
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
添加运行权限
chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
配置keepalived
监听nginx
脚本
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2 # 每隔两秒运行上一行脚本
weight 10 # 如果脚本运行失败,则升级权重+10
}
在vrrp_instance
中新增监控的脚本
vrrp_instance VI_1 {
...其他配置
...其他配置
track_script {
check_nginx_alive # 追踪 nginx 脚本
}
}
重启Keepalived
使得配置文件生效
systemctl restart keepalived
修改nginx.conf
配置
把配置的是当前机器IP的server_name
,更改一下成虚拟地址ip:
sever{
listen 80;
# 这里从机器的本地IP改为虚拟IP
server_name 虚拟IP;
}
1.6.7 keepalived双主热备
配置DNS轮询
在同一个域名下配置两个ip,自行百度
配置第一台主机
global_defs {
router_id keep_171
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.161
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.162
}
}
配置第二台主机
global_defs {
router_id keep_172
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.161
}
}
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.162
}
}
重启两台Keepalived
systemctl restart keepalived
转载于:https://mp.weixin.qq.com/s/6k0cWeSlVgR9-hbZrY7Vxw
今天的文章Keepalived基本讲解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/7632.html