nginx+keepalived 实现高可用
上一篇写了nginx的配置,nginx确实能帮咱们分配到多个应用中,但是仍然有一个问题,当我其中一个机器down了,比如意外关机了,那么仍然是访问不了了,必须用户手动切换地址才可以访问,所以需要配置高可用,当其中一个nginx意外down了,则自动切换为另外一台nginx上面,即自动主备切换
此时就需要用到 keepalived
具体想了解keepalived的原理以及作用,请参考官网:https://www.keepalived.org/index.html
下面进行keepalived的安装和配置,配合nginx实现高可用
1、安装keepalived
系统为:centos7
直接进行在线安装:
yum install keepalived
2、配置keepalived
安装完成后,配置文件为:/etc/keepalived
vim keepalived.conf
以下是我配置的所有内容:
主节点:
1 #配置文件 2 ! Configuration File for keepalived 3 4 global_defs { 5 #从服务器最改一下这个 6 router_id node1 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息 7 } 8 #监控服务.NGINX mysql等 9 vrrp_script chk_nginx { 10 script "/etc/keepalived/health_check.sh" 11 #每2s检查一次 12 interval 2 13 #每次检查-20 14 weight -20 15 } 16 vrrp_instance VI_1 { 17 ##主从设置 MASTER/BACKUP 18 state MASTER 19 #网卡名称 20 interface enp0s8 21 #同一个集群下这个 router_id是一样的 22 virtual_router_id 51 23 #本机的ip,需要修改 24 mcast_src_ip 192.168.0.109 25 #优先级,从节点 配置,需要小于主节点 26 priority 100 27 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 28 advert_int 1 29 #认证的密码 30 authentication { 31 auth_type PASS 32 #设定授权密码,密码相同的为一个集群 33 auth_pass root 34 } 35 #触发的脚本 36 track_script { 37 chk_nginx #检测脚本,上面配置的 38 } 39 #虚拟ip地址 40 virtual_ipaddress { 41 192.168.0.120 42 } 43 }
备节点:
1 #配置文件 2 ! Configuration File for keepalived 3 4 global_defs { 5 #从服务器最改一下这个 6 router_id node2 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息 7 } 8 #监控服务.NGINX mysql等 9 vrrp_script chk_nginx { 10 script "/etc/keepalived/health_check.sh" 11 #每2s检查一次 12 interval 2 13 #每次检查-20 14 weight -20 15 } 16 vrrp_instance VI_1 { 17 ##主从设置 MASTER/BACKUP 18 state BACKUP 19 #网卡名称 20 interface enp0s8 21 #同一个集群下这个 router_id是一样的 22 virtual_router_id 51 23 #本机的ip,需要修改 24 mcast_src_ip 192.168.0.109 25 #优先级,从节点 配置,需要小于主节点 26 priority 99 27 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 28 advert_int 1 29 #认证的密码 30 authentication { 31 auth_type PASS 32 #设定授权密码,密码相同的为一个集群 33 auth_pass root 34 } 35 #触发的脚本 36 track_script { 37 chk_nginx #检测脚本,上面配置的 38 } 39 #虚拟ip地址 40 virtual_ipaddress { 41 192.168.0.120 42 } 43 }
说明:
上面的内容基本已经写了注释,主备又那些需要注意的呢
1、备节点的 priority 的值不要大于主节点的值
2、router_id、auth_pass 这两个值要相同
3、virtual_ipaddress 虚拟地址,这个地址就是将来真正要访问的地址,也要配置相同,可以配置多个虚拟地址
4、需要配置一个检测脚本,本篇中的health_check.sh脚本内容如下:
1 #!/bin/bash 2 count=$(ps aux | grep -v grep | grep nginx | wc -l) 3 if [ $count -gt 0 ] 4 then 5 exit 0 6 else 7 exit 1 8 fi
5、在interface属性配置的机器的网卡,查看网卡信息(ip a),此时我配置的interface的值为 enp0s8
3、启动服务并验证
systemctl start keepalived.service
#停止服务 systemctl stop keepalived.service
#重启服务 systemctl restart keepalived.service
查看日志:
journalctl -xe
查看虚拟地址是否启动成功
ip a
查看倒数第5行,虚拟的地址已经启动成功了,此时,在浏览器中访问就不要在用nginx的地址了,而应该用虚拟地址192.168.0.120,如下图:
四个应用均可以访问,此时,我将主机(109)的nginx停掉 nginx -s stop
此时继续刷新页面,仍然是可以访问所有应用
此时将主机(109)启动,然后把备机(111)的nginx停止,仍然能访问所有应用
安装完成。
本篇参考的文章:https://blog.csdn.net/yelllowcong/article/details/78764780
上一篇nginx配置地址:https://www.cnblogs.com/hanpengblog/p/11330447.html
原文地址:https://www.cnblogs.com/hanpengblog/p/11330520.html
- MySQL 5.6, 5.7并行复制测试(二)(r12笔记第10天)
- MySQL主从报错解决:Failed to initialize the master info structure
- 使用pt工具检测MySQL主从延迟(r12笔记第7天)
- WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存
- MySQL中的binlog和redo浅析(r12笔记第5天)
- WordPress发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存
- 使用sysbench压力测试MySQL(一)(r11笔记第3天)
- 分享一下php7和其他php多版本共存的配置教程
- 使用sysbench压力测试MySQL(二)
- 使用sysbench压力测试MySQL(三)(r12笔记第6天)
- 解决IE响应式的解决方案css3-mediaqueries.js不生效问题
- MySQL传输表空间小结(r12笔记第2天)
- swingbench压测Oracle小记(r12笔记第20天)
- 分享最近对网站外链跳转页面代码的一些改善
- 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 数组属性和方法
- 使用代码删除SAP CRM的附件(attachment)数据
- node版本管理器:nvm 和 n区别
- Apache - Hive环境部署与快速入门
- 编译和调试openjdk8
- linux编译openjdk8
- Elasticsearch从入门到放弃:瞎说Mapping
- PostgreSQL 为什么接受大量连接到数据库需要连接池
- 一站式的开源持续测试平台---MeterSphere
- 《RabbitMQ》如何保证消息的可靠性
- Ruby 和 Java 的基础语法比较
- 聊聊面试-NoClassDefFoundError 和 ClassNotFoundException 区别
- 聊聊面试-int和Integer的区别
- 记一次Linux修改MySQL配置不生效的问题
- VBA解析复合文档03——解析扇区链表
- C++核心准则E.17:不要试图在所有函数中捕捉所有异常