手把手教你nginx生产环境下高可用环境搭建

简介: 手把手教你nginx生产环境下高可用环境搭建

在开篇之前让我们先来了解下:什么是nginx?什么是nginx高可用?什么是nginx反向代理?nginx高可用是怎么做到得。带着等等一系列问题,开始我们今天得环境搭建。


nginx介绍


Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。


1,开篇之前准备工作:


1.1 服务器:


192.168.177.134

192.168.177.136


这里准备了两台虚拟机,安装了nginx


1.2 nginx版本


nginx version: nginx/1.20.1


2,nginx安装


2.1 nginx下载地址


wget http://nginx.org/download/nginx-1.20.1.tar.gz


2.2 解压nginx并安装


--进入服务安装包目录,这里放到了home/server
cd /home/server/
--解压tar包
tar -zxvf nginx-1.20.1.tar.gz
--进入解压nginx目录
cd nginx-1.20.1
--执行configure进行配置,这里配置可以根据自己项目需要进行自定义配置
./configure --prefix=/usr/local/nginx  --with-http_ssl_module
--执行安装
make && make install
2.3 编译安装在执行./configure步骤报错,是因为缺少环境变量


checking for C compiler … not found
./configure: error: C compiler cc is not found
解决方法
yum -y install gcc
yum -y install gcc-c++
2.4 PCRE报错问题


./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre= option.
解决方法
yum -y install openssl openssl-devel
安装过程中需要安装相关依赖,安装报错得可以看下另一篇博客nginx安装教程,那里面有详细得安装过程,这个不是我们这篇得主题,以上操作安装之后就开始我们下面高可用之旅。


3 什么是高可用?


高可用HA(HighAvailability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。


3.1 本教程要解决的问题


在生产环境上很多时候是以Nginx来做反向代理对外提供服务,服务运行过程中Nginx难免会遇到故障,如:服务器宕机,服务不可用。当Nginx宕机那么所有对外提供的接口都将导致无法访问。

虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧发生,今天我们主角keepalived,使用keepalived来实现Nginx的高可用。


3.2 双机热备


双机热备是国内企业中最为普遍的一种高可用方案之一,双机热备其实就是指一台服务器在提供服务,另一台为某服务的备用状态,当一台服务器不可用另外一台就会顶替上去。


3.3 keepalived介绍


Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High

Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,它与HeartBeat

RoseHA

实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成


3.4 keepalived是什么?


keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。


后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy

Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied

一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA

cluster功能,关于VRRP协议实现的过程。可以查看keepalived官方文档


3.5 故障转移机制


Keepalived高可用服务之间的故障切换转移,是通过VRRP 来实现的。 在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。


而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。


3.6 keepalived官方文档


文档地址: https://www.keepalived.org/manpage.html

3.7 keepalived安装

yum -y install keepalived

1.png


3.7.1 修改主机(192.168.177.134)keepalived配置文件


yum方式安装的会生产配置文件在/etc/keepalived下:

1.png

vi keepalived.conf
#检测脚本
vrrp_script check_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66    # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        check_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.177.135/32            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

virtual_ipaddress 里面可以配置vip,在线上通过vip来访问服务。

interface 需要根据服务器网卡进行设置通常查看方式ip addr

authentication 配置授权访问后备机也需要相同


3.7.2修改备机(192.168.177.135)keepalived配置文件


vi keepalived.conf

keepalived.conf:

#检测脚本
vrrp_script check_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66    # 虚拟路由编号,主从要一直
    priority 99            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        check_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.177.135/32            # 定义虚拟ip(VIP),可多设,每行一个
    }
}


3.7.3 检测脚本:

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                    
      /usr/local/nginx/sbin/nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
              killall keepalived                    
      fi
fi

创建完脚本进行授权:chmod 775 check_nginx_pid.sh

说明check_nginx_pid脚本需要授权,不然没有权限调用,在这里我们两台服务器执行,我们在生产环境是直接通过vip来访问服务。


3.8 启动keepalived


systemctl start keepalived.service


4,模拟nginx服务器故障


通过模拟nginx服务器故障来测试环境搭建是否成功


4.1 模拟nginx故障:

4.1.1 第一步我们通过修改两台服务器nginx得html页面来进行测试:

4.1.2 访问192.168.177.134来查看效果:

1.png

4.1.3 访问192.168.177.136来查看效果:

1.png

4.1.4 通过192.168.177.135 vip进行访问,查看效果:

1.png

访问192.168.177.135,通过vip进行访问,页面显示得192.168.177.136;这说明当前是由136服务器对外提供服务。


4.1.5 登录192.168.177.136服务器执行命令:

/usr/local/nginx/sbin/nginx -s stop

1.png

再次访问 192.168.177.135 发现这个时候页面显示的还是: 192.168.177.136 ,这是脚本里面自动重启。


4.1.6 现在直接将 192.168.177.136 服务器关闭

1.png

再次访问192.168.177.135现在发现页面显示192.168.177.134这个时候keepalived就自动故障转移了,一套企业级生产环境的高可用方案就次就搭建好了。

以上就是我们今天的教程,如果本文对你有所帮助,欢迎关注点赞,分享给您身边的朋友。您的鼓励就是对我的最大动力。

相关文章
|
2月前
|
应用服务中间件 PHP 开发工具
Nginx解析环境搭建及实战
Nginx解析环境搭建及实战
26 0
|
2月前
|
负载均衡 应用服务中间件 Linux
高可用系列文章之三 - NGINX 高可用实施方案
高可用系列文章之三 - NGINX 高可用实施方案
|
5月前
|
消息中间件 缓存 应用服务中间件
Nginx系列教程(02) - 高可用与高并发介绍
Nginx系列教程(02) - 高可用与高并发介绍
54 0
|
6月前
|
应用服务中间件 nginx
服务搭建篇(四) 搭建基于Nginx + keepalived的高可用服务
比如我这里虚拟IP+nginx端口是 : 192.168.154.10:80 , 我直接访问 , 出来的是192.168.154.134服务器上的nginx , 因为我刚刚做了区分 , 所以这个时候就可以知道访问的是哪个机器的Nginx , 然后我们把134的Nginx停掉 , 然后再次访问 , 仍然可以使用 , 此时 ,出现的135的页面 , 也就是访问的是192.168.154.135的Nginx
92 0
|
8月前
|
tengine 负载均衡 应用服务中间件
Nginx+Keepalived高可用集群部署详细文档
Nginx+Keepalived高可用集群部署详细文档
|
3月前
|
负载均衡 网络协议 前端开发
Nginx环境搭建与系统参数配置
Nginx环境搭建与系统参数配置
55 0
|
4月前
|
负载均衡 前端开发 应用服务中间件
NGINX高可用之keepalived+nginx主从模式+主主模式配置实践
NGINX高可用之keepalived+nginx主从模式+主主模式配置实践
137 1
|
5月前
|
应用服务中间件 Shell nginx
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(二)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
|
5月前
|
负载均衡 NoSQL 应用服务中间件
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(一)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
|
5月前
|
Kubernetes 应用服务中间件 Linux
suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
58 0