Keepalived+nginx实现高可用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keepalived+nginx实现高可用相关的知识,希望对你有一定的参考价值。
(keepalived只是解决代理的单点和地址漂流问题,所以只能对本机服务进行健康监控检测)
在部署站点规模不大的网站架构是一般通常使用keepalived+nginx来实现、从而实现轻量级的调度服务功能;用到lvs的场景不是很多,只有大规模的站点部署是才有可能用到。Nginx实现高可用,通过DNS服务解析,编辑两条A记录,从而实现真正的高可用,但是需要两个公网地址。虽然DNS调度效果不是很理想,但是有后端的nginx来为其进行优化、填坑,从而达到最理想的部署。
Nginx配置文件
http {}中配置
upstream websrvs { #定义组
server 10.10.10.111:80 weight=1; #定义组内站点,权重都为1
server 10.10.10.112:80 weight=1; #定义组内站点,权重都为1
}
server {}中配置
location / {
proxy_pass http://websrvs; #引用定义的组
}
Keepalived配置文件#vrrp中
Keepalived+nginx的配置文件参考示例:(仅供参考)
Server-1:
[[email protected] keepalived]# cat keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
[email protected] #定义收件人地址
}
notification_email_from [email protected] #邮件发件人地址
smtp_server 127.0.0.1 #发送邮件服务器地址
smtp_connect_timeout 10 #连接邮件服务器的超时时间
router_id 10.10.10.101 #当前路由的id信息网络中的节点标识(物理IP地址或主机名)
vrrp_mcast_group4 224.0.122.22 #组播地址
}
#脚本实现本机nginx服务运行状态监控
vrrp_script chk_ngx{
script "killall -0 nginx" #使用killall命令探测nginx服务运行是否正常,从而实现健康检测。
interval 1
weight -5
}
#vrrp1
vrrp_instance VI_1 { #一个虚拟路由器的标识,
state MASTER #一个虚拟路由器的标识,
interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;
virtual_router_id 11 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致)
priority 100 #当前主机在此虚拟路径器中的优先级;范围1-254;
advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。
authentication { #认证方式为:域共享密钥
auth_type PASS
auth_pass 11112222 #最多不要超过8位
}
virtual_ipaddress {
10.10.1.1/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址)
}
#调用服务监控
track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态
chk_ngx #调用vrrp中定义的chk_ngx
}
#监控接口
track_interface {
ens33 #追踪/监控 接口
}
#触发通知脚本
notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;
notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;
notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本;
}
#vrrp2
vrrp_instance VI_2 { #一个虚拟路由器的标识,
state BACKUP #重要选项,初始或状态;只能有一个是MASTER,余下的都应该为BACKUP;
interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;
virtual_router_id 22 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致)
priority 98 #当前主机在此虚拟路径器中的优先级;范围1-254;
advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。
authentication {
auth_type PASS #认证方式为:域共享密钥
auth_pass 11112222 #最多不要超过8位
}
virtual_ipaddress {
10.10.1.2/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址)
}
#调用服务监控
track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态
chk_ngx #调用vrrp中定义的chk_ngx
}
#监控接口
track_interface {
ens33 #追踪/监控 接口
}
#触发通知脚本
notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;
notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;
notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本;
}
Server-2:
[[email protected] keepalived]# cat keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email { #定义收件人地址
[email protected]
}
notification_email_from [email protected] #邮件发件人地址
smtp_server 127.0.0.1 #发送邮件服务器地址
smtp_connect_timeout 10 #连接邮件服务器的超时时间
router_id 10.10.10.102 #当前路由的id信息网络中的节点标识(物理IP地址或主机名)
vrrp_mcast_group4 224.0.122.22 #组播地址
}
#脚本实现本机nginx服务监控
vrrp_script chk_ngx {
script "killall -0 nginx"
interval 1
weight -5
}
vrrp_instance VI_1 { #一个虚拟路由器的标识,
state BACKUP #重要选项,初始或状态;只能有一个是MASTER,余下的都应该为BACKUP;
interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;
virtual_router_id 11 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致)
priority 98 #当前主机在此虚拟路径器中的优先级;范围1-254;
advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。
authentication { #认证方式为:域共享密钥
auth_type PASS
auth_pass 11112222 #最多不要超过8位
}
virtual_ipaddress {
10.10.1.1/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址)
#调用服务监控
track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态
chk_ngx #调用vrrp中定义的chk_ngx
}
#监控接口
track_interface {
ens33 #追踪/监控 接口
}
#触发通知脚本
notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;
notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;
notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本;
}
vrrp_instance VI_2 { #一个虚拟路由器的标识,
state MASTER #重要选项,初始或状态;只能有一个是MASTER,余下的都应该为BACKUP;
interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;
virtual_router_id 22 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致)
priority 100 #当前主机在此虚拟路径器中的优先级;范围1-254;
advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。
authentication {
auth_type PASS #认证方式为:域共享密钥
auth_pass 11112222 #最多不要超过8位
}
virtual_ipaddress {
10.10.1.2/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址)
}
#调用服务监控
track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态
chk_ngx #调用vrrp中定义的chk_ngx
}
#监控接口
track_interface {
ens33 #追踪/监控 接口
}
#触发通知脚本
notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;
notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;
notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本;
}
以上是关于Keepalived+nginx实现高可用的主要内容,如果未能解决你的问题,请参考以下文章