前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx+keepalived搭建高可用负载均衡

nginx+keepalived搭建高可用负载均衡

作者头像
菲宇
发布2022-12-21 18:14:04
5070
发布2022-12-21 18:14:04
举报
文章被收录于专栏:菲宇菲宇

前言

如果一台Nginx服务器宕机了,那么整个网站就会挂掉,所以要实现Nginx的高可用,一台挂掉还会有另一台顶上去,从而保证网站可持续的提供服务。

高可用分为以下两种方式:

1、Nginx+keepalived 主从配置 使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。 2、Nginx+keepalived 双主配置 使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。

环境说明

服务器名称

版本

安装的服务

ip/vip

Nginx主服务器

CentOS 7

nginx+keepalived

192.168.1.115/192.168.1.155

Nginx从服务器

CentOS 7

nginx+keepalived

192.168.1.120/192.168.1.155

主备模式搭建

第一步:安装keepalived依赖的包

代码语言:javascript
复制
yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel net-snmp-devel -y

第二步:编译安装keepalived

代码语言:javascript
复制
cd /usr/local/software
下载keepalived
wget
tar -zxvf keepalived-1.3.5.tar.gz
cd keepalived-1.3.5
./configure --prefix=/usr/local/keepalived
make && make install

第三步:将 keepalived 安装成 Linux 系统服务

安装完成之后, 需要做一些工作复制默认配置文件到默认路径

代码语言:javascript
复制
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cd /usr/local/software/keepalived-1.3.5
cp ./keepalived/etc/init.d/keepalived /etc/init.d/
chmod 755 /etc/init.d/keepalived

第四步:编写nginx检测脚本

vi /etc/keepalived/nginx_check.sh

代码语言:javascript
复制
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

赋予执行权限

chmod +x /etc/keepalived/nginx_check.sh

第五步:修改keepalived的Master配置文件(192.168.1.115)

vi /etc/keepalived/keepalived.conf

代码语言:javascript
复制
! Configuration File for keepalived
# 全局配置,配置收件人
global_defs {
notification_email { ##通知机制,收件人
8888@qq.com
}
notification_email_from keepalived@domain.com ####发件人
smtp_server 192.168.1.115 ##发件服务器
smtp_connect_timeout 30 ##服务器连接超时时间
router_id LVS_DEVEL ##路由器标志
}
# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2 #检测时间间隔
weight -20 #条件成立 权重减20
}
vrrp_instance HAPROXY_HA {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state MASTER
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface eno16777736
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
#unicast_src_ip 192.168.1.115
# unicast_peer {
# 192.168.1.120
#}
# 设置优先级,确保主节点的优先级高过备用节点
priority 100
# 用于设定主备节点间同步检查时间间隔
advert_int 2
# 设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
nopreempt
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass 1234
}
# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.1.155 #虚拟ip配置完之后就用它访问
}

}

注意:如果是主备模式,要配置nopreempt 

第六步:修改keepalived的BACKUP配置文件(192.168.1.120)

代码语言:javascript
复制
    ! Configuration File for keepalived
    # 全局配置,配置收件人
    global_defs {
    notification_email { ##通知机制,收件人
    820518302@qq.com
    }
    notification_email_from keepalived@domain.com ####发件人
    smtp_server 192.168.1.120 ##发件服务器
    smtp_connect_timeout 30 ##服务器连接超时时间
    router_id LVS_DEVEL ##路由器标志
    }
    # 集群资源监控,组合track_script进行
    vrrp_script check_haproxy {
    script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
    interval 2 #检测时间间隔
    weight -20 #条件成立 权重减20
    }
    vrrp_instance HAPROXY_HA {
    # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
    state BACKUP
    # 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
    interface eno16777736
    # 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
    virtual_router_id 80
    # 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
    # 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
    # 主节点时,内容为:
    #unicast_src_ip 192.168.1.120
    # unicast_peer {
    # 192.168.1.115
    #}
    # 设置优先级,确保主节点的优先级高过备用节点
    priority 90
    # 用于设定主备节点间同步检查时间间隔
    advert_int 2
    # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
    authentication {
    auth_type PASS
    auth_pass 1234
    }
    # 集群资源监控,组合vrrp_script进行
    track_script {
    check_haproxy
    }
    # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
    # 当状态切换到BACKUP时,此IP会自动从系统中删除
    # 可以通过命令ip add查看切换后的状态
    virtual_ipaddress {
    192.168.1.155 #虚拟ip配置完之后就用它访问
    }
    }

测试高可用

第一步:启动nginx和keepalived服务

  1. 启动nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  2. 启动keepalived:keepalived

启动之后,使用ip addr(centos6之前版本使用 ifconfig) 其中一台服务器会出现虚拟ip绑定到网卡

第二步:通过虚拟ip访问服务 通过虚拟ip访问服务,会跳转到nginx的服务上。

第三步:杀掉192.168.1.120上的keepalived再次访问服务 注意:杀掉nginx是不行的,因为上面的脚本 是检测到nginx宕机 会重启nginx的

第四步:再次访问服务 会发现虚拟ip 从192.168.1.120上取消了,重新绑定到192.168.1.115上了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境说明
  • 主备模式搭建
  • 测试高可用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档