keepalived是集群管理中保证集群高可用的一个服务软件,通过keepalived,我们可以实现Nginx集群,实现高可用。
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。 keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
安装yum命令:
yum install keepalived -y
keepalived常用命令:
systemctl start keepalived.service
systemctl stop keepalived.service
systemctl restart keepalived.service
keepalived查看日志:
tail -f /var/log/messages
安装目录: 我们查找即可:
find / -name keepalived
我们平时玩的就是一个keepalived配置
/etc/keepalived 下的keepalived.conf配置
1)centos上安装nginx
默认情况Centos7中没有Nginx的源,Nginx官方提供了源,所以执行如下命令添加源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安装Nginx
yum install -y nginx
启动Nginx并设置开机自动运行
systemctl start nginx.service
systemctl enable nginx.service
Nginx关闭命令
systemctl stop nginx.service
Nginx重启命令
systemctl restart nginx.service
关闭防火墙
systemctl stop firewalld 临时关闭
systemctl disable firewalld ,然后reboot 永久关闭
systemctl status firewalld 查看防火墙状态。
输入IP测试; http://192.168.195.129/
出现Welcome to nginx!字样的页面,算是安装成功;
2)高可用集群配置
我们首先要搞两台机器,每个机器都安装有keepalived以及Nginx,为了演示得更逼真,nginx也要反向代理搞两个tomcat实现负载均衡;所以这两台机器,每个机器上都再搞个docker以及tomcat;
首先我们配置keepalived 找到第一台机器的/etc/keepalived目录的keepalived.conf配置文件,打开;
global_defs是全局定义 vrrp_instance VI_1 是实例配置;
配置讲解:
全局配置
global_defs {
notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
acassen@firewall.loc # 收件人邮箱1
failover@firewall.loc # 收件人邮箱2
sysadmin@firewall.loc # 收件人邮箱3
}
notification_email_from Alexandre.Cassen@firewall.loc #邮件发件人
smtp_server 192.168.200.1 # 邮件服务器地址
smtp_connect_timeout 30 # 超时时间
router_id LVS_DEVEL # 路由id 多个keepalived集群的时候 必须一致
vrrp_skip_check_adv_addr # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。
vrrp_strict # 这个东西要注释掉,否则要出乱子。严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。
vrrp_garp_interval 0 # 小数类型,单位秒,在一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0,一个发送的消息=n组 arp报文
vrrp_gna_interval 0 # 小数类型,单位秒, 在一个网卡上每组na消息之间的延迟时间,默认为0
}
vrrp实例 我们集群设置 多机配置,除了state和priority不一样,其他都一样
vrrp_instance VI_1 {
state MASTER # 服务器状态 MASTER是主服务器 BACKUP是备份服务器 主服务器的priority要比备份服务器大
interface eth0 # 通信端口 通过ip addr可以看到 根据自己的机器配置
virtual_router_id 51 # vrrp实例id keepalived集群,实例id必须一致
priority 100 # 权重比 主服务器的priority要比备份服务器大
advert_int 1 # 心跳间隔 单位秒 keepalived多机器集群 通过心跳检测,如果发送心跳没反应 就立刻接管;
authentication { # 服务器之间通信密码
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 自定义虚拟IP
192.168.200.16
192.168.200.17
192.168.200.18
}
}
router_id 配置方式 我们修改/etc/hosts文件 加一行
127.0.0.1 KEEPALIVED_NGINX_MASTER
vrrp_instance 的 interface 配置: 我们ip addr看
主keepalived配置:
全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id KEEPALIVED_NGINX_MASTER
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp实例 我们集群设置 多机配置,除了state和priority不一样,其他都一样
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 {#自定义虚拟ip
192.168.195.66
}
}
备份机配置:
全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id KEEPALIVED_NGINX_BACKUP
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp实例 我们集群设置 多机配置,除了state和priority不一样,其他都一样
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.195.66
}
}
启动systemctl start keepalived.service
我们可以通过192.168.195.66访问到我们的集群机器;
3)高可用集群测试
先修改页面192.168.195.129、192.168.195.132两台机器Nginx访问页内容
systemctl start keepalived.service
虚拟IP 【192.168.195.66】 生效,访问到的是keepalived主机对应的Nginx服务器(192.168.195.129)
systemctl stop keepalived.service
整个高可用配置图如下
前面我们测试的情况是 keepalived挂掉的情况,实际情况是keepalived不容易挂掉,容易挂掉的是nginx; 所以这里就有有问题了,nginx挂了,但是keepavlied没挂,这时候 依然可以访问机器,但是访问不到服务; 所以这里需要借助keepalived的vrrp_script配置;来调用自定义shell脚本;
echo 'xxxxxx'
count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l`
echo $count_nginx
if [ $count_nginx -eq 0 ];then
systemctl start nginx.service
sleep 2
if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then
systemctl stop keepalived.service
fi
fi
这个shell脚本的意思是 统计nginx进程数,假如是0个 说明Nginx挂掉了,那就启动nginx,等2秒,再统计,假如还是0,说明nginx启动失败, 那我们就把keepalived也啥掉 切换备份机器,假如不是0,说明启动成功,那就继续运行;
把上面shell脚本命名nginx_check.sh文件,存/hone/shell/目录下; 下面是shell脚本测试; 切换shell目录
脚本没毛病,再配合Linux定时器,就可以解决nginx宕机问题;
over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有