使用Keepalived实现Nginx的自动重启及双主热备高可用
1、概述
之前我们使用Keepalived实现了Nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下。
1)在双机主备机制中,Keepalived服务如果宕了,会自动启用备机进行服务,但Nginx服务如果负载过大宕了,虚拟ip是不会指向备机的。
2)双机主备的特点是,只有1台机器在提供服务,备机在主机的Keepalived服务宕掉后才会提供服务,大大的造成了资源的浪费。
3)目前比较流行租用云服务器去运营公司的产品,那云服务器支不支持虚拟IP呢?
今天我们就上述的三个问题来讲解一下。
2、使用Keepalived实现Nginx的自动重启
2.1 借助Shell脚本,完成Nginx的重启
Keepalived不能直接启动Nginx,但可以执行shell脚本,因此这里我们需要借助Shell脚本启动Nginx。
在 /etc/keepalived 目录下,新建一个脚本 check_nginx.sh,以下是脚本的具体内容:
#!/bin/bash # 执行查看Nginx进程的命令,并放在变量A中
A=`ps -C nginx --no-header | wc -l` # 判断是否宕机,如果宕机尝试重启,如果重启不成功,则停止Keepalived
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
killall keepalived fi
fi
脚本来源于网络
2.2 为脚本赋予运行权限
# chmod +x /etc/keepalived/check_nginx.sh
2.3 在Keepalived配置文件中增加配置
打开Keepalived配置文件,# vi /etc/keepalived/keepalived.conf
修改配置文件,增加 vrrp_script 和 track_script的配置,配置如下:
global_defs {
# 全局唯一的主机标识
router_id server_a
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 3 # 每隔3秒运行一次Shell脚本
weight 10 # 脚本运行成功,权重加10
}
vrrp_instance VI_1 {
# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP
state MASTER
# 绑定的网卡
interface ens33
# 虚拟路由id,保证主备节点是一致的
virtual_router_id 51
# 权重
priority 100
# 同步检查时间,间隔默认1秒
advert_int 1
# 认证授权的密码,所有主备需要一样
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
# 虚拟IP
virtual_ipaddress {
192.168.1.88
}
}
2.4 重启Keepalived服务
重启后,发现,Nginx停掉后,很快会自动启动。
3、双主热备的搭建
3.1 双主热备概述
由于双机主备机制,每次只会由一台服务器对外提供服务,且主备机的配置是相同的,因此极大地造成了资源的浪费。
双主热备则解决了这个问题,双主热备的原理是两台服务器利用Keepalived互为主备,因此需要两个虚拟IP,再利用DNS轮询的配置,让一个域名按轮询的方式分别路由到两个虚拟IP上,最终达到高可用的目的。
3.2 场景说明
虚拟IP1:192.168.1.88
虚拟IP2:192.168.1.66
A服务器IP(主):192.168.1.144
B服务器IP(备):192.168.1.22
3.3 修改A服务器配置
配置如下:
! Configuration File for keepalived
global_defs {
# 全局唯一的主机标识
router_id server_a
}
vrrp_instance VI_1 {
# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP
state MASTER
# 绑定的网卡
interface ens33
# 虚拟路由id,保证主备节点是一致的
virtual_router_id 51
# 权重
priority 100
# 同步检查时间,间隔默认1秒
advert_int 1
# 认证授权的密码,所有主备需要一样
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP
virtual_ipaddress {
192.168.1.88
}
}
vrrp_instance VI_2 {
# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP
state BACKUP
# 绑定的网卡
interface ens33
# 虚拟路由id,保证主备节点是一致的
virtual_router_id 52
# 权重
priority 80
# 同步检查时间,间隔默认1秒
advert_int 1
# 认证授权的密码,所有主备需要一样
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP
virtual_ipaddress {
192.168.1.66
}
}
3.4 修改B服务器配置
配置如下:
! Configuration File for keepalived
global_defs {
router_id server_b
}
vrrp_instance VI_1 {
# 设置为备机
state BACKUP
interface ens33
virtual_router_id 51
# 权重设置的要比主机低
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP需要主备设置成一样
virtual_ipaddress {
192.168.1.88
}
}
vrrp_instance VI_2 {
# 设置为主机
state MASTER
interface ens33
virtual_router_id 52
# 权重设置的要比主机低
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP需要主备设置成一样
virtual_ipaddress {
192.168.1.66
}
}
3.5 重启两台服务器的Keepalived
重启Keepalived即可。
3.6 设置DNS轮询
联系网络运营商解决。
4、云服务器的负载均衡
现在,很多公司都会选择租用云服务器运行自己的产品,因为更划算、更稳定,有专业人员负责运维。
但使用了云服务器,就要受云服务运营商的限制。
就拿虚拟IP这个事儿来说,一些云服务运营商就是不支持的。
如果不支持虚拟IP,则Keepalived这个方案就只能放弃了。
但即使Keepalived用不了,Nginx的高可用还是有解决方案的,很多云服务商都已经推出了自己的负载均衡服务(例如:阿里云的负载均衡 SLB 和 腾讯云的负载均衡 CLB)。我们直接租用就好了,不需要我们自己去配置。
5、综述
今天大概聊了一下KeepAlived自动重启Nginx,Keepalived的双主热备高可用的搭建,以及云服务器负载均衡的解决方案,希望能对大家有所帮助。
希望大家多多评论交流,共同进步。
使用Keepalived实现Nginx的自动重启及双主热备高可用的更多相关文章
- Mysql+Keepalived双主热备高可用操作记录
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- 【Keepalived+MySQL】MySQL双主互备+高可用
一.基本信息说明 [DB1] IP: 192.168.102.144 hostname: LVS-Real1 [DB2] IP: 192.168.102.145 hostname: LVS-Real2 ...
- Mysql双主热备+LVS+Keepalived高可用部署实施手册
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- Mysql双主热备+LVS+Keepalived高可用操作记录
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- keepalived+mysql双主热备
这里使用keepalived实现mysql的双主热备高可用 实验环境: 主机名 IP 系统版本 软件版本 master 192.168.199.6/vip:192.168.199.111 Rhel7. ...
- Nginx系列篇四:Nginx+keepalived搭建一个高可用的双机双主热备
建议:先阅读Nginx+keepalived主从配置,因为此篇是接着上篇开始的 上一篇我们简单的介绍了主从配置及其缺点,我们看一下双主热备配置: 2台Nginx+keepalived互为主备,各自绑定 ...
- Mysql + keepalived 实现双主热备读写分离【转】
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
- MySQL高可用性之Keepalived+MySQL(双主热备)
环境描述:OS:CentOS6.5_X64MASTER:192.168.0.202BACKUP:192.168.0.203VIP:192.168.0.204 1.配置两台Mysql主主同步[root@ ...
随机推荐
- salesforce Integration 概览(一) 杂篇
本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf 我们在做sales ...
- 正则:支持6-20位数字、字母和特殊字符(仅限!@#$%^&*())
checkpwd(newpsd); function checkpwd() { var newpsd = $(":input[name='newpsd']").val(); var ...
- FastAPI:一个测试人员视角的教程
前言 教程肯定谈不上了,主要还是就自己的理解分享内容而已 内容是连官方文档的基础教程都没涵盖起的 建议直接看官方文档 以个人视角来分享,希望各位通过这个可以写接口了 需要自取 完整视频链接:https ...
- CentOS 7 安装虚拟机
1.本次安装centos7 安装使用的软件是VitrualBox 虚拟机软件 Oracle公司的虚拟机软件,免费商品(大家可以百度搜索去官网下载) 1:我这里使用的是阿里的centos7的镜像(大家可 ...
- Vulhub-Mysql 身份认证绕过漏洞(CVE-2012-2122)
前言 当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的.也就是说只要知道用户名, ...
- 用 区间判断(if)来猜价格的高低
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int price = 150; 6 int gue ...
- 001 PCI Express体系结构(一)
一 .PCI总线的基本知识 PCI总线作为处理器系统的局部总线,主要目的是为了连接外部设备,而不是作为处理器的系统总线连接Cache和主存储器.但是PCI总线.系统总线和处理器体系结构之间依然存在着紧 ...
- Ajax 局部刷新 异步提交
AJAX简介 局部刷新,异步提交. AJAX 不是新的编程语言,而是一种使用现有标准的新方法.它最大的有点就是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容. 浏览器朝后端发送请 ...
- Mysql中的Join详解
一.Simple Nested-Loop Join(简单的嵌套循环连接) 简单来说嵌套循环连接算法就是一个双层for 循环 ,通过循环外层表的行数据,逐个与内层表的所有行数据进行比较来获取结果,当执行 ...
- HCNA Routing&Switching之PPPoE协议
前文我们了解了广域网中的HDLC和PPP协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15174240.html:今天我们来聊一聊PPPoE协议相 ...