keepalived+nginx 高可用配置实例

摘要:在一般的业务架构中,nginx作为负载均衡的入口,反向代理到多台业务机器。但是nginx却没有实现高可用,一般nginx高可用的方案有以下几种:①云厂商如阿里云SLB;②硬件负载均衡器如F5/Radware;③软件层面如keepalived/LVS。下面展示keepalived配置实例。

一、keepAlived介绍

Keepalived是一个基于VRRP协议来实现的服务高可用方案。VRRP协议(虚拟路由冗余协议—— Virtual Router Redundancy Protocol,简称VRRP),是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准。VRRP广泛应用在边缘网络 中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以 及即使在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。 大白话来说就是,VRRP协议允许一台机器可以拥有一个或者多个虚拟IP。在高可用的一组机器中,有 一个master,多个slave,对外提供一个虚IP,通过虚IP访问master,slave负责监控master,如果 master宕机,则选举其中一个slave接管master,虚IP绑定到新的master上(俗称IP漂移),从而实现了高可用。深入了解请查看 keepAlived官网

假设有192.168.1.100192.168.1.101两台机器安装了nginx,负载均衡配置一模一样。
这两台机器对外的虚拟IP是:192.168.1.200
原理是100宕机或者nginx未启动/启动失败,则把101选举为master,200绑定到101继续对外提供访问。

二、安装nginx和keepAlived

在100和101两台机器同样安装nginx和keepAlived

  1. 配置nginx的yum源(100和101)
sudo yum install ‐y yum‐utils 
sudo cat >>/etc/yum.repos.d/nginx.repo<<‐'EOF' 
[nginx‐stable] 
name=nginx stable repo 
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1 
enabled=1 
gpgkey=https://nginx.org/keys/nginx_signing.key 
module_hotfixes=true 
[nginx‐mainline] 
name=nginx mainline repo 
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ 
gpgcheck=1 
enabled=0 
gpgkey=https://nginx.org/keys/nginx_signing.key 
module_hotfixes=true 
EOF
  1. 安装nginx(100和101)
sudo yum install ‐y nginx 
#启动nginx 
systemctl start nginx 
#系统启动nginx自动启动 
systemctl enable nginx 
  1. 安装keepAlived(100和101)
yum install ‐y keepalived
  1. check_nginx脚本(100和101)
    Keepalived会定时执行“ps -C nginx --no-heading|wc -l ”命令, 如果返回0,代表Nginx挂了,然后尝试重启,如果重启失败,停止keepalived触发故障转移。如果返回大于0,代表Nginx正常运行
sudo cat >/etc/keepalived/check_nginx.sh<<‐'EOF' 
#!/bin/bash 
counter=$(ps ‐C nginx ‐‐no‐heading|wc ‐l) 
if [ "${counter}" = "0" ]; then 
systemctl start nginx 
sleep 2 
counter=$(ps ‐C nginx ‐‐no‐heading|wc ‐l) 
if [ "${counter}" = "0" ]; then 
systemctl stop keepalived 
fi
fi
EOF 

别忘记给脚本授权

chmod 755 /etc/keepalived/check_nginx.sh

三、配置主从keepAlived

接下里的配置,两个机器100(Master)和101(Slave)是不同的。配置内容在keepalived.conf

master配置(100)

sudo cat >/etc/keepalived/keepalived.conf<<‐'EOF' 
! Configuration File for keepalived 
# 全局配置,路由ID,固定不变 
global_defs { 
router_id LVS_DEVEL 
}
# 定义Nginx状态脚本 
vrrp_script chk_nginx { 
script "/etc/keepalived/check_nginx.sh" 
# 间隔时间,单位为秒,默认1秒 
interval 2 
# 权重,当脚本成功或失败对当前节点的优先级是增加还是减少 
weight ‐5 
}
#VRRP实例 
vrrp_instance VI_1 { 
# 主节点 
state MASTER 
# 绑定的网卡,使用ifconfig命令查看获取 
interface ens33 
# 虚拟路由id,保证相同 
virtual_router_id 51 
# 优先级,抢占模式下优先级高的称为主 
priority 101 
# 指定发送VRRP通告的间隔。单位是秒。 
advert_int 2 
# 安全认证用的密码,自定义即可 
authentication { 
auth_type PASS 
auth_pass 1111 
}
# 对外暴露的VIP地址 
virtual_ipaddress { 
192.168.1.200
}
# 指定Nginx执行状态脚本 
track_script { 
chk_nginx 
}
}
EOF 

slave配置(101)

sudo cat >/etc/keepalived/keepalived.conf<<‐'EOF' 
! Configuration File for keepalived 
global_defs { 
router_id LVS_DEVEL 
}
vrrp_script chk_nginx { 
script "/etc/keepalived/check_nginx.sh" 
interval 2 
weight ‐5 
}
vrrp_instance VI_1 { 
# 初始角色Backup 
state BACKUP 
interface ens33 
virtual_router_id 51 
# 优先级比master低 
priority 100 
advert_int 2 
authentication { 
auth_type PASS 
auth_pass 1111 
}
virtual_ipaddress { 
192.168.1.200
}
track_script { 
chk_nginx 
}
}
EOF 

两台机器keepAlived配置完成后启动keepalived

# 启动命令
systemctl start keepalived

# 查看启动日志
tail ‐f /var/log/messages

四、测试主从切换

将100机器的keepalived进程停止后,测试访问正常,日志显示101已被选举为master。

keepAlived工作原理

第一步:选举出Master

  • VRRP备份组中的设备根据优先级选举出Master。Master设备通过发送免费ARP报文,将虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务。
  • 选举规则:比较优先级的大小,优先级高者当选为Master设备。当两台设备优先级相同时,如果已经存在Master,则其保持Master身份,无需继续选举;如果不存在Master,则继续比较接口IP地址大小,接口IP地址较大的设备当选为Master设备。

第二步:Master设备状态的通告(VRRP备份组状态维持)

  • Master设备周期性地发送VRRP通告报文,在VRRP备份组中公布其配置信息(优先级等)和工作状况。Backup设备通过接收到的VRRP报文来判断Master设备是否工作正常。
  • 当Master设备主动放弃Master地位(如Master设备退出备份组)时,会发送优先级为0的通告报文,用来使Backup设备快速切换成Master设备,而不用等到Master_Down_Interval(默认为3s)定时器超时。这个切换的时间称为Skew_Time(几乎可以堪称0s),计算方式为:(256-Backup设备的优先级)/256,单位为秒。
  • 当Master设备发生网络故障而不能发送通告报文的时候,Backup设备并不能立即知道其工作状况。等到Master_Down_Interval定时器超时后,才会认为Master设备无法正常工作,从而将状态切换为Master。其中,Master_Down_Interval定时器取值为:3×Advertisement_Interval+Skew_Time,单位为秒。其中Advertisement_Interval默认情况下为1S。

VRRP主备切换过程

  • 如果Master发生故障,则主备切换的过程当组内的备份设备一段时间(Master_Down_Interval定时器取值为: 3×Advertisement_Interval+Skew_Time,单位为秒)内没有接收到来自Master设备的报文, 则将自己转为Master设备。
  • 一个VRRP组里有多台备份设备时,短时间内可能产生多个Master设备,此时,设备将会对 收到的VRRP报文中的优先级与本地优先级做比较,从而选取优先级高的设备成为Master。 设备的状态变为Master之后,会立刻发送免费ARP来刷新交换机上的MAC表项,从而把用户的流量引到此设备上来,整个过程对用户完全透明。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容