nginx负载均衡高可用
nginx负载均衡高可用1.高可用
一般是指2台服务器启动着相同的业务系统,如果有一台服务器死机了,另外一台服务器能快速的接管,对于用户是无感知的。2.高可用的软件
硬件
F5
软件
keepalived
heartbeat
MySQL指定的高可用软件
MGR
MHA
Redis指定的高可用软件
Redis-Cluster
Sentinel3.Keepalived概述
keepalived是一个高可用软件,可以和任何应用配合使用
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。4.keepalived实现原理
keepalived软件是基于VRRP协议实现,VRRP(虚拟路由冗余协议)主要用于解决单点故障https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185737847-1945528915.png
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
done6.keepalived安装配置
环境准备
主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点keepalivedlb0210.0.0.6172.16.1.6Backup keepalived备节点keepalived部署keepalived(lb01 lb02)
1.安装keepalived
yum install -y keepalived
2.修改master配置文件
# 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地址
}
}
# 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_idlb01lb02stateMASTERBACKUPpriority1501003.启动master和backup上的keepalived
systemctl start keepalived.service
4.查看master虚拟ip地址https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185749291-868396176.png
5.停掉master上的keepalived查看虚拟ip是否到backup服务器上
# systemctl stop keepalived.servicehttps://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185755701-2004754876.png
非抢占式配置
1、两个节点的state都必须配置为BACKUP
2、两个节点都必须加上配置 nopreempt
3、其中一个节点的优先级必须要高于另外一个节点的优先级。
# keepalived配置
# 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地址
}
}
# 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做高可用
主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点、nginx负载均衡keepalived、nginxlb0210.0.0.6172.16.1.6Backup keepalived备节点、nginx负载均衡keepalived、nginxweb0110.0.0.7172.16.1.7web网站nginx、phpweb0210.0.0.8172.16.1.8web网站nginx、php关联nginx
1.编写脚本
nginx_count=$(ps -ef|grep 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 ginx|wc -l)
#3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
if [ $nginx_count -eq 0 ];then
systemctl stop keepalived
fi
fi
简化脚本
# vim check_web.sh
# /bin/sh
nginx_count=$(ps -ef |grep ginx}|wc -l)
if [ $nginx_count -eq 0 ];then
systemctl stop keepalived
fi
2.配置两台负载均衡
# 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;
}
}
# 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配置文件
# 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 #网卡绑定接口
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.浏览器访问网站https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185815678-478416707.png
5.停掉lb01的nginx服务
systemctl stop nginx
6.继续访问网站https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185853601-1025662474.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]