nginx负载均衡高可用
时间:2022-06-23
本文章向大家介绍nginx负载均衡高可用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
nginx负载均衡高可用
1.高可用
一般是指2台服务器启动着相同的业务系统,如果有一台服务器死机了,另外一台服务器能快速的接管,对于用户是无感知的。
2.高可用的软件
硬件
F5
软件
keepalived
heartbeat
MySQL指定的高可用软件
MGR
MHA
Redis指定的高可用软件
Redis-Cluster
Sentinel
3.Keepalived概述
keepalived是一个高可用软件,可以和任何应用配合使用
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
4.keepalived实现原理
keepalived软件是基于VRRP协议实现,VRRP(虚拟路由冗余协议)主要用于解决单点故障
5.keepalived核心概念
1.选举:
通过选举投票,决定谁是主节点和备节点
2.抢占式、非抢占式:
当Master故障,Backup自动接管,那么Master恢复后夺权就是抢占式,没有夺权就是非抢占式
3.脑裂:
当两台服务器都认为自己是master,那么就会出现这种现象
脑裂的原因
1.服务器网线松动等网络故障
2.服务器硬件故障发生损坏现象而崩溃
3.主节点和备节点都开启了防火墙
## 解决脑裂故障的脚本
#!/bin/sh
vip=10.0.0.3
lb01_ip=10.0.0.5
while true;do
ping -c 2 $lb01_ip &>/dev/null
if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
echo "ha is split brain.warning."
else
echo "ha is ok"
fi
sleep 5
done
6.keepalived安装配置
环境准备
主机名 | WanIP | LanIP | 角色 | 应用 |
---|---|---|---|---|
lb01 | 10.0.0.5 | 172.16.1.5 | Master keepalived主节点 | keepalived |
lb02 | 10.0.0.6 | 172.16.1.6 | Backup keepalived备节点 | keepalived |
部署keepalived(lb01 lb02)
1.安装keepalived
yum install -y keepalived
2.修改master配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs { #全局配置
router_id lb01 #标识身份->名称
}
vrrp_instance VI_1 {
state MASTER #标识角色状态
interface eth0 #网卡绑定接口
virtual_router_id 50 #虚拟路由id
priority 150 #优先级
advert_int 1 #监测间隔时间
authentication { #认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {
10.0.0.3 #虚拟的VIP地址
}
}
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
global_defs { #全局配置
router_id lb02 #标识身份->名称
}
vrrp_instance VI_1 {
state BACKUP #标识角色状态
interface eth0 #网卡绑定接口
virtual_router_id 50 #虚拟路由id
priority 100 #优先级
advert_int 1 #监测间隔时间
authentication { #认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {
10.0.0.3 #虚拟的VIP地址
}
}
keepalived配置区别 | Master节点配置 | Backup节点配置 |
---|---|---|
router_id | lb01 | lb02 |
state | MASTER | BACKUP |
priority | 150 | 100 |
3.启动master和backup上的keepalived
systemctl start keepalived.service
4.查看master虚拟ip地址
5.停掉master上的keepalived查看虚拟ip是否到backup服务器上
[root@lb01 ~]# systemctl stop keepalived.service
非抢占式配置
1、两个节点的state都必须配置为BACKUP
2、两个节点都必须加上配置 nopreempt
3、其中一个节点的优先级必须要高于另外一个节点的优先级。
# keepalived配置
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs { #全局配置
router_id lb01 #标识身份->名称
}
vrrp_instance VI_1 {
state BACKUP #标识角色状态
interface eth0 #网卡绑定接口
nopreempt
virtual_router_id 50 #虚拟路由id
priority 150 #优先级
advert_int 1 #监测间隔时间
authentication { #认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {
10.0.0.3 #虚拟的VIP地址
}
}
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
global_defs { #全局配置
router_id lb02 #标识身份->名称
}
vrrp_instance VI_1 {
state BACKUP #标识角色状态
interface eth0 #网卡绑定接口
nopreempt
virtual_router_id 50 #虚拟路由id
priority 150 #优先级
advert_int 1 #监测间隔时间
authentication { #认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {
10.0.0.3 #虚拟的VIP地址
}
}
keepalived结合nginx做高可用
主机名 | WanIP | LanIP | 角色 | 应用 |
---|---|---|---|---|
lb01 | 10.0.0.5 | 172.16.1.5 | Master keepalived主节点、nginx负载均衡 | keepalived、nginx |
lb02 | 10.0.0.6 | 172.16.1.6 | Backup keepalived备节点、nginx负载均衡 | keepalived、nginx |
web01 | 10.0.0.7 | 172.16.1.7 | web网站 | nginx、php |
web02 | 10.0.0.8 | 172.16.1.8 | web网站 | nginx、php |
关联nginx
1.编写脚本
nginx_count=$(ps -ef|grep [n]ginx|wc -l)
#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
if [ $nginx_count -eq 0 ];then
systemctl start nginx
sleep 3
#2.等待3秒后再次获取一次Nginx状态
nginx_count=$(ps -ef|grep [n]ginx|wc -l)
#3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
if [ $nginx_count -eq 0 ];then
systemctl stop keepalived
fi
fi
简化脚本
[root@lb01 ~]# vim check_web.sh
# /bin/sh
nginx_count=$(ps -ef |grep [n]ginx}|wc -l)
if [ $nginx_count -eq 0 ];then
systemctl stop keepalived
fi
2.配置两台负载均衡
[root@lb01 ~]# vim /etc/nginx/conf.d/wordpress.jl.com.conf
upstream blog.jl.com{
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name wordpress.jl.com;
location / {
proxy_pass http://blog.jl.com;
include proxy_params;
}
}
[root@lb02 ~]# vim /etc/nginx/conf.d/wordpress.jl.com.conf
upstream blog.jl.com{
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name wordpress.jl.com;
location / {
proxy_pass http://blog.jl.com;
include proxy_params;
}
}
keepalived关联nginx
1.修改keepalived配置文件
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs { #全局配置
router_id lb01 #标识身份->名称
}
vrrp_script check_web {
script "/root/check_web.sh"
interval 5
}
vrrp_instance VI_1 {
state BACKUP #标识角色状态
interface eth0 #网卡绑定接口
nopreempt
virtual_router_id 50 #虚拟路由id
priority 150 #优先级
advert_int 1 #监测间隔时间
authentication { #认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {
10.0.0.3 #虚拟的VIP地址
}
track_script {
check_web
}
}
2.给脚本添加执行权限
chmod +x check_web
3.将域名解析到vip上
10.0.0.3 wordpress.jl.com
4.浏览器访问网站
5.停掉lb01的nginx服务
systemctl stop nginx
6.继续访问网站
原文地址:https://www.cnblogs.com/zlyj/p/16406380.html
- Python爬虫(十八)_多线程糗事百科案例
- Python爬虫(十九)_动态HTML介绍
- Python爬虫(二十)_动态爬取影评信息
- Python爬虫(二十一)_Selenium与PhantomJS
- Python爬虫(十三)_案例:使用XPath的爬虫
- Python爬虫(十四)_BeautifulSoup4 解析器
- Python爬虫(十五)_案例:使用bs4的爬虫
- Python爬虫(十六)_JSON模块与JsonPath
- 多类好米齐交易:域名776.cn近10万元结拍
- Python爬虫(八)_Requests的使用
- Python爬虫(十一)_案例:使用正则表达式的爬虫
- Python爬虫(十二)_XPath与lxml类库
- 区块链域名热度不减 健康类英文米近六位交易
- Python爬虫(九)_非结构化数据与结构化数据
- 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 数组属性和方法
- Git + Maven + Jenkins 实现自动化部署
- JFinal项目发送邮件——jfinal-mail-plugin
- Django Pagination 简单分页
- Numpy&Pandas
- 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
- 注册
- SpringBoot自定义错误页面
- React 深入系列1:React 中的元素、组件、实例和节点
- CentOS 7.2:Failed to start IPv4 firewall with iptables
- selenium+python自动化96-执行jquery报:$ is not defined
- JDK1.8源码(六)——java.util.LinkedList 类
- 23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数 上章链接: 22.C++- 继承与组合,protected访问级别
- Angular2入门体验
- 22.C++- 继承与组合,protected访问级别
- 【Keras】基于SegNet和U-Net的遥感图像语义分割