Nginx keepalived一主一从高可用,手把手带你一步一步配置!
时间:2022-07-27
本文章向大家介绍Nginx keepalived一主一从高可用,手把手带你一步一步配置!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 二、 配置环境
- 三、 Keepalived安装部署
- 四、 进入安装后的路径
- 五、 修改keepalived 的配置
- 六、 启动nginx
- 七、 验证冗余
- 八、 利用脚本实现自动切换
- 九、 测试keepalived利用脚本能否让nginx自动重启
一、 实验环境
1.准备两台NGINX环境的服务器
- Nginx40.14 IPADDR=192.168.40.14
- Nginx_40.15 IPADDR=192.168.40.15
2.准备一台tomcat服务器
- Docker40.16 Tomcat8081 192.168.40.16:8081
- Tomcat8082 192.168.40.16:8082
二、 配置环境
Nginx40.14
IPADDR=192.168.40.14
Keepalived.conf配置:
vrrp_instance VI_1
state MASTER
interface ens33
virtual_router_id 17
priority 150
virtual_ipaddress 192.168.40.17
Nginx_40.15
IPADDR=192.168.40.15
Keepalived.conf配置:
vrrp_instance VI_1
state BACKUP
interface ens33
virtual_router_id 17
priority 99
virtual_ipaddress 192.168.40.17
Docker40.16
利用docker部署两个tomcat容器,并启动容器。
Tomcat8081
192.168.40.16:8081
Tomcat8082
192.168.40.16:8082
三、 Keepalived安装部署
Keepalived下载地址https://www.keepalived.org/download.html
,下载keepalived-2.1.5.tar.gz安装包
1. 安装依赖环境
yum –y install curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel
2. 创建目录/data/keepalived
mkdir /software
此为软件存放目录
3. 上传安装包到/software
4. 解压安装包
tar -zxvf keepalived-2.1.5.tar.gz
5. 进入keepalived-2.1.5目录
cd keepalived-2.1.5
./configure --prefix=/data/keepalived --sysconf=/etc
6. 编译安装
make & manke install
确保依赖都安装的情况下更换keepalived低版本
四、 进入安装后的路径
cd /data/keepalived/
1. 创建软连接
ln -s sbin/keepalived /sbin/
2. 覆盖软连接
ln -snf sbin/keepalived /sbin
3. 复制运行命令
cp /software/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.d
chkconfig --add keepalived
4. 添加到系统服务
chkconfig keepalived on
5. 启动服务
service keepalived start
6. 查看启动状态
service keepalived status
五、 修改keepalived 的配置
Master配置
vim /etc/keepalived/
(最小配置)
! Configuration File for keepalived
global_defs {
router_id NGINX
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 17
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.17
}
}
Backup配置
vim /etc/keepalived/
(最小配置)
! Configuration File for keepalived
global_defs {
router_id NGINX
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 17
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.17
}
}
六、 启动nginx
/usr/local/nginx/sbin/nginx
启动keepalived
service keepalived start
查看网卡是否获取到虚拟IP
Ip add
验证试验
curl http://192.168.40.17
七、 验证冗余
手动停止 nginx服务
/usr/local/nginx/sbin/nginx –s stop
网页无法开启
手动停止keepalived服务
service keepalived stop
网页正常
八、 利用脚本实现自动切换
1. Keepalived检测nginx运行状态的脚本
#!/bin/bash
A=`ps -C nginx --no-header|wc -l` -->判断nginx的服务进程数并统计
if [ $A -eq 0 ];then -->假如数量为0则执行以下脚本
/usr/local/nginx/sbin/./nginx
sleep 2 -->进程休眠2秒
if [ `ps -C nginx --no-header|wc -l` -eq 0 ];then -->假如nginx服务进程总数还是0则执行以下脚本
killall keepalived -->结束keepalived所有进程
fi
fi
2. 修改keepalived.conf配置
Nginx-keepalived-MASTER
! Configuration File for keepalived
global_defs {
router_id NGINX #路由标识同一个主备必须相同
}
vrrp_script chk_nginx {
script "/root/chk_nginx.sh" #检测脚本的路径
interval 2 #脚本执行间隔
weight -5 #失败一次自己优先级降低5
}
vrrp_instance VI_1 {
state MASTER #节点状态,主节点为MASTER,备节点为BACKUP
interface ens33 #vip绑定的网络接口
virtual_router_id 17 #虚拟路由ID,方便记录可以使用IP最后一位VRID区间是0~255正证书
priority 100 #节点优先级,优先级是0~255正整数
advert_int 1
authentication { #认证
auth_type PASS #明文认证
auth_pass 1111 #认证密码
}
virtual_ipaddress {
192.168.40.17/24 #虚拟IP/掩码
}
track script { #追踪脚本
chk_nginx
}
}
Nginx-keepalived-BACKUP
! Configuration File for keepalived
global_defs {
router_id NGINX #路由标识同一个主备必须相同
}
vrrp_instance VI_1 {
state BACKUP #节点状态,主节点为MASTER,备节点为BACKUP
interface ens33 #vip绑定的网络接口
virtual_router_id 17 #虚拟路由ID,方便记录可以使用IP最后一位VRID区间是0~255正证书
priority 99 #节点优先级,优先级是0~255正整数
advert_int 1
authentication { #认证
auth_type PASS #明文认证
auth_pass 1111 #认证密码
}
virtual_ipaddress {
192.168.40.17/24 #虚拟IP/掩码
}
}
}
九、 测试keepalived利用脚本能否让nginx自动重启
停止nginx
/usr/local/nginx/sbin/nginx -s stop
查看进程
netstat -nulpt
netstat –nulpt
查看网页状态
修改nginx配置使nginx无法启动验证主备是否会自动切换 查看主备网络接口信息
Nginx-MASTER
Nginx-BACKUP
Kill -9 nginx
进程 有可能需要kill两边
查看网口信息
ip a
验证网页
查看nginx-BACKUP的网络接口信息
再次恢复nginx-MASTER的nginx.conf文件配置,重启keepalived,验证主服务器正常上线后是否抢占MASTER
Keepalived+nginx 主备能自动切换。
- 洛谷P1887 乘积最大3
- 18.CSS
- R语言可视化——ggplot图表系统中的形状
- [机器学习Lesson 1 Introduction] 机器学习的动机与应用
- 洛谷P3377 【模板】左偏树(可并堆)
- Numpy 修炼之道 (12)—— genfromtxt函数
- 19.JavaScript
- 20.DOM
- 洛谷P3273 [SCOI2011]棘手的操作
- [机器学习Lesson 2]代价函数之线性回归算法
- Docker初尝试1.What is Docker?2.Try It3.Use It
- 洛谷P1456 Monkey King
- 21.jQuery
- Session分布式共享 = Session + Redis + Nginx
- 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开发中使用WebView控件浏览网页的方法详解
- Android Studio实现标题栏和状态栏的隐藏
- Android实现手电筒电源键关闭功能
- Android实现保持屏幕常亮功能
- Android开发实现的几何图形工具类GeometryUtil完整实例
- Android自定义View倒计时圆
- Android开发实现的IntentUtil跳转多功能工具类
- Android端“被挤下线”功能的单点登录实现
- Android轻松实现多语言的方法示例
- Android开发实现去除bitmap无用白色边框的方法示例
- Android开发实现的内存管理工具类
- Android日期和时间选择器实现代码
- Android开发实现ImageView加载摄像头拍摄的大图功能
- Android开发实现的Intent跳转工具类实例
- Android开发中的文件操作工具类FileUtil完整实例