Keepalived 搭建 Nginx 集群(主从模式)
一、准备两台虚拟机分别安装 nginx 和 keepalived
192.168.141.129
192.168.141.130
1、安装 nginx
https://www.cnblogs.com/xiaomaomao/p/14075164.html
2、安装 keepalived
yum install keepalived –y
安装完成之后,默认在 etc 里面生成 keepalived 目录,该目录下存在配置文件 keepalived.conf
二、修改 keepalived.conf 配置文件
主服务器和从服务器只有两个地方不一样,两个不一样的配置都在 vrrp_instance VI_1 中
state: 主服务器的值是 MASTER ,副本服务器的值是 BACKUP
priority: 主服务器的值比副本服务器的值大即可(例如:主服务器设置为 100,副本服务器设置为 80)
global_defs {
notification_email { # keepalived 服务器宕机异常出现的时候,发送通知邮件,可以配置多个邮箱地址
1412556053@qq.com # 收件人邮箱1
# ***@**.com # 收件人邮箱2
}
notification_email_from 1412556053@qq.com # 邮箱发件人
smtp_server stmp.qq.com # 邮箱服务器地址
smtp_connect_timeout 30 # 超时时间
router_id LVS_DEVEL # 路由 id
vrrp_skip_check_adv_addr # 默认不跳过检查
# vrrp_strict # 这个东西要注释掉,这个东西要注释掉,这个东西要注释掉...
vrrp_gna_interval 0 # 单位秒,在一个网卡上每组消息之间的延迟时间,默认为 0
script_user root
enable_script_security
}
vrrp_script chk_haproxy{
script "/etc/keepalived/chk_nginx.sh" # keepalived 监测 nginx 的监本路径和名称
interval 2
weight 2
}
# vrrp 实例,我们集群设置,多机配置,除了 state 和 priority 不一样之外,其它的配置都是一样的
# 主实例 state 为 MASTER , priority 的值高于副本实例的值
# 副本实例 state 为 BACKUP , priority 的值低于主实例的值
vrrp_instance VI_1 {
state BACKUP # 服务器状态,MASTER 代表主服务器, BACKUP 是备份服务器
interface ens33 # 通信端口,通过 ifconfig 命令可以看到,根据自己的机器配置
virtual_router_id 51 # 虚拟路由 ID ,主实例和副本实例保持一致
priority 80 # 权重比,主服务器的 priority 比副本服务器大即可
advert_int 1 # 心跳间隔,单位秒, keepalived 多机器集群通过心跳检测,如果发送心跳没反应,就立刻接管
authentication { # 服务器之间的通信密码
auth_type PASS
auth_pass 1111
}
track_script { # keepalived 的监测脚本,与 vrrp_script 定义的名称一致
chk_haproxy
}
virtual_ipaddress { # 自定义虚拟 ip ,可以配置多个,每行一个
192.168.141.132
}
}
三、编写 keepalived 监测 nginx 的脚本
我们在 keepalived.conf 中 vrrp_script chk_haproxy 配置的监测脚本路径和名称如下: /etc/keepalived/chk_nginx.sh
所以我们需要在 /etc/keepalived 目录下新建一个 chk_nginx.sh 的脚本文件,文件内容如下
#!/bin/bash
# nginx 挂掉之后, keepalived 重新启动 nginx ,若不能启动 则关闭当前 keepalived
status=`ps -ef|grep -w nginx|grep -v grep|wc -l`
echo ${status}
if [ ${status} -eq 0 ]; then
systemctl start nginx.service
sleep 2
status2=`ps -ef|grep -w nginx|grep -v grep|wc -l`
echo ${status2}
if [ ${status2} -eq 0 ]; then
systemctl stop keepalived.service
fi
fi
然后运行 chmod +x chk_nginx.sh 命令为脚本文件添加可执行权限
chmod +x chk_nginx.sh
四、启动 nginx 和 keepalived
分别启动两台服务器上的 nginx 和 keepalived
// 启动 nginx
./nginx
// 启动 keepalived
systemctl start keepalived.service
// 查看 nginx 是否成功启动
ps -ef | grep nginx
// 查看 keepalived 是否成功启动
ps -ef | grep keepalived
五、测试
配置信息如下
主服务器: 192.168.14.129
从服务器: 192.168.14.130
虚拟 IP: 192.168.14.132
1、浏览器访问 192.168.14.132
2、关闭主机 192.168.141.129 上的 nginx 和 keepalived ,再次访问虚拟 IP ,发现可以正常访问,并且访问的是从机
原文地址:https://www.cnblogs.com/xiaomaomao/p/14393394.html
- 有趣的算法(七) ——快速排序改进算法
- 编写你人生中第一个机器学习代码吧!
- 使用Octave来学习Machine Learning(二)
- RESTful API的十个最佳实践1. 使用名词而不是动词 2. Get方法和查询参数不应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使
- MYSQL数据库设计的一些小技巧[转载]
- 在ASP.NET 5应用程序中的跨域请求功能详解什么是“同域”添加CORS包在应用程序中配置CORSCORS策略选项跨域请求中的凭据设置先行请求的过期时间CORS是怎么样工作的先行请求
- 有趣的算法(八) ——红黑树插入算法
- 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面何时使用Donut CachingDonut Caching 的Nuget 包Donut Ho
- 有趣的算法(九) ——蛇形数组
- 有趣的算法(十一) ——分治法:快速求最值
- ASP.NET AJAX(3)__UpdatePanel
- 正则表达式学习笔记
- PHP10个实用函数
- ASP.NET AJAX(2)__ASP.NET 2.0 AJAX Extensions
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在 Android 的 /data 目录下添加虚拟内存
- 玩转安卓模拟器命令行
- 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?
- Android 应用保存状态
- 2020-8-9日报:修复zip在某些X64机器上的运行崩溃问题
- 专题一:预处理数据(使用sklearn-preprocessing)
- 「Docker」使用 Docker run 覆盖 ENTRYPOINT
- 尝试在 Mono 3.0 下运行 ASP.NET MVC 4
- CentOS7使用yum安装nginx报错:获取 GPG 密钥失败:[Errno 14] curl#60 - "Peer's Certificate has expired."
- iOS 应用使用位置信息
- Silverlight CreateObjectEx 参考
- NHibernate 配置使用 Formula
- Not allowed to navigate top frame to data URL问题
- MonoTouch绑定CocoaTouch类库
- NuGet 使用自定义本地类库目录