您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Linux + Nginx + Keepalived 高可用配置教程

时间:2023-03-17 13:21:08  来源:网易号  作者:

众所周知,Nginx 是一个广受好评的 web 服务器,也可以用作反向代理,负载均衡器和 HTTP 缓存。keepalive 工作在虚拟路由器冗余协议 vrrp (Virtual Router Redundancy Protocol) 上,它允许一个静态 IP 在两个 linux 系统之间进行故障转移。

在本文中,我们将演示如何在 Linux 中使用 keepalive 设置高可用 (HA) NGINX web 服务器。

实验准备

  • Node 1 – 192.168.1.130 – nginx1.example.com – minimal centos 8 / RHEL 8
  • Node 2 – 192.168.1.140 – nginx2.example.com – minimal CentOS 8 / RHEL 8
  • Virtual IP (VIP) – 192.168.1.150
  • sudo user pkumar
  • firewalld enbled
  • SELinux Running

 

废话不多说,让我们直接进入安装和配置步骤。

1) 安装 NGINX Web Server

For CentOS 8 / RHEL 8

NGINX 软件包在 CentOS 8 / RHEL 8 存储库默认可用,在两个节点上运行如下命令

$ sudo dnf install -y nginx

For CentOS 7 / RHEL 7

NGINX 软件包在 CentOS 7 / RHEL 7 存储库中默认不可用,我们必须启用 epel 存储库,在两个节点上运行以下命令

$ sudo yum install epel-release -y$ sudo yum install -y nginx

For Ubuntu / Debian

基于 Debian 的发行版,nginx 软件包在存储库中默认可用,在两个节点上运行如下命令

$ sudo apt update$ sudo apt install -y nginx2) 为两个节点自定义 index.html

让我们为这两个节点创建自定义 index.html,这样我们就可以很容易地识别哪个服务器在通过虚拟 IP 访问网站

在 node 1 上,执行如下命令

[pkumar@nginx1 ~]$ echo "This is NGINX Web Server from Node 1" | sudo tee /usr/share/nginx/html/index.html

在 node 2 上,执行如下命令

[pkumar@nginx2 ~]$ echo "This is NGINX Web Server from Node 2" | sudo tee /usr/share/nginx/html/index.html3) 放行 NGINX 端口并启动其服务

如果防火墙已启用,通过以下命令放行 80 端口

For CentOS / RHEL System

$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd –reload

For Ubuntu / Debian System

$ sudo ufw allow 'Nginx HTTP'

启动并启用 nginx 服务

$ sudo systemctl start nginx$ sudo systemctl enable nginx

在外部运行 curl 命令测试两个节点的 NGINX 服务器

$ curl http://192.168.1.130This is NGINX Web Server from Node 1$ curl http://192.168.1.140This is NGINX Web Server from Node 2

以上输出确认 NGINX 正在运行,并且可以从外部通过系统的 IP 地址访问。

4) 安装配置 Keepalived

在两个节点上安装配置 Keepalived

For CentOS / RHEL systems

$ sudo dnf install -y keepalived // CentOS 8/ RHEL 8$ sudo yum install -y keepalived // CentOS 7 / RHEL 7

For Ubuntu / Debian System

$ apt install -y keepalived

本文中,Node 1 作为主节点,Node 2 作为从节点。

备份配置文件

[pkumar@nginx1 ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org

编辑配置文件

[pkumar@nginx1 ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf[pkumar@nginx1 ~]$ sudo vi /etc/keepalived/keepalived.conf

复制如下内容:

global_defs {# Keepalived process identifierRouter_id nginx# script to check whether Nginx is running or notVRRP_script check_nginx {script "/bin/check_nginx.sh"interval 2weight 50# Virtual interface - The priority specifies the order in which the assigned interface to take over in a fAIlovervrrp_instance VI_01 {state MASTERinterface enp0s3virtual_router_id 151priority 110# The virtual ip address shared between the two NGINX Web Server which will floatvirtual_ipaddress {192.168.1.150/24track_script {check_nginxauthentication {auth_type AHauth_pass secret


 

现在创建一个带有以下内容的脚本,它将检查 nginx 服务是否正在运行。keepalive 将始终检查 check_nginx.sh 脚本的输出,如果它发现 nginx 服务停止或没有响应,那么它将虚拟 ip 地址指向备份节点。

[pkumar@nginx1 ~]$ sudo vi /bin/check_nginx.sh#!/bin/shif [ -z "`pidof nginx`" ]; thenexit 1fi

保存并关闭文件,设置所需权限

[pkumar@nginx1 ~]$ sudo chmod 755 /bin/check_nginx.sh

使用 scp 命令把 keepalive .conf 和 check_nginx.sh 文件从 Node 1 复制到 Node 2

[pkumar@nginx1 ~]$ scp /etc/keepalived/keepalived.conf root@192.168.1.140:/etc/keepalived/[pkumar@nginx1 ~]$ scp /bin/check_nginx.sh root@192.168.1.140:/bin/

复制完成后,登录到 Node 2,并在 keepalive .conf 文件中做一些更改。将 state 从 MASTER 更改为 BACKUP,并将 priority 设置为 100 降低优先级。


 

如果开启防火墙,执行以下命令放行 VRRP(两个节点都要执行)

For CentOS / RHEL Systems

$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent$ sudo firewall-cmd --reload

For Ubuntu / Debian Systems

在主节点 (Node 1) 上执行

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'$ sudo ufw allow from 192.168.1.140 comment 'VRRP Router'

在从节点 (Node 2) 上执行

$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'$ sudo ufw allow from 192.168.1.130 comment 'VRRP Router'

启动和开启 keepalived 服务

$ sudo systemctl start keepalived$ sudo systemctl enable keepalived

验证 keepalived 服务状态

$ sudo systemctl status keepalived


 

验证主节点上的 VIP (虚拟 ip 地址) 状态,本例中 VIP 是 192.168.1.130

$ ip add show


 

以上输出确认在主节点的 enp0s3 接口上配置了 VIP

5) Keepalive 和 NGINX 测试

使用虚拟 IP (192.168.1.150) 访问 nginx 服务器,目前它应该会显示 Node 1 页面。


 

停止 Node 1 上的 NGINX 服务,看看虚拟 IP 是否从 Node 1 切换到 Node 2,这次它应该会显示 Node 1 页面。

[pkumar@nginx1 ~]$ sudo systemctl stop nginx[pkumar@nginx1 ~]$ ip add show


 

登录到 Node 2,查看虚拟 IP 是否正确

[pkumar@nginx2 ~]$ ip add show


 

使用虚拟 IP (192.168.1.150) 访问 nginx 服务器


 

漂亮,以上证实我们已经成功地设置了高可用的 NGINX Web 服务器。



Tags:Nginx   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
为什么Nginx被称为“反向”代理呢?
Nginx(发音为"engine-x")是一款高性能、轻量级的开源Web服务器软件,也可用作反向代理服务器、负载均衡器和HTTP缓存。Nginx之所以有被称为“反向”代理,是因为它充当客户端设备...【详细内容】
2024-02-01  Search: Nginx  点击:(60)  评论:(0)  加入收藏
如何在Java环境中安装Nginx?
1. 下载Nginx:首先,前往Nginx官方网站(https://nginx.org/en/download.html)下载新版本的Nginx。选择适合您操作系统的版本,通常有Windows、Linux和Mac等不同操作系统的版本可供...【详细内容】
2024-01-22  Search: Nginx  点击:(61)  评论:(0)  加入收藏
一文教你学会使用Nginx
前段时间,了不起给大家说过如果使用 Docker 发布自己的后端项目,也就不再使用 Jar 包进行项目的发版操作,但是这其中就又涉及到了前端如何发版,为什么这么说,因为资深前端开发,可...【详细内容】
2023-12-27  Search: Nginx  点击:(88)  评论:(0)  加入收藏
Nginx 反向代理为什么叫做“反向”?
今天我们来聊聊正向代理和反向代理。01 正向代理(Forward Proxy)正向代理是位于用户设备和互联网之间的服务器。它代理的是客户端,是站在用户一方的。其真实客户端对于服务器不...【详细内容】
2023-12-06  Search: Nginx  点击:(90)  评论:(0)  加入收藏
Nginx的负载均衡实现,你学会了吗?
环境 主机 ip 用途 软件 web1 192.168.50.60 nginx-1 httpd web2 192.168.50.61 nginx-2 httpd proxy 192.168.50.62 负载...【详细内容】
2023-12-06  Search: Nginx  点击:(145)  评论:(0)  加入收藏
Nginx如何开启GZIP文件压缩,你学会了吗?
简介GZip 是一种改进web应用程序性能的技术,文件压缩后再传输可以减少传输数据,提升传输速度。在Nginx服务器上开启Gzip压缩可以有效减少网络传输流量,提升网站的访问速度和性...【详细内容】
2023-11-30  Search: Nginx  点击:(122)  评论:(0)  加入收藏
Nginx配置文件中的关键字是什么?
Nginx 是一款高性能的 Web 服务器软件,同时也是一款反向代理服务器软件。Nginx 的配置文件通常是 /etc/nginx/nginx.conf,以下是一个典型的配置文件,并对其中的关键字进行详细...【详细内容】
2023-11-22  Search: Nginx  点击:(148)  评论:(0)  加入收藏
Nginx 大揭秘:读写分离助力您轻松征服高并发
引言在构建高性能、高可用的 Web 应用时,如何有效地处理数据库的读写负担已成为一个十分重要的考虑因素。Nginx 作为一款强大的反向代理服务器,提供了简单而灵活的负载均衡配...【详细内容】
2023-11-14  Search: Nginx  点击:(53)  评论:(0)  加入收藏
Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?
k8s发布应用的两种方式: kubernetes-dashboard kubectl命令行一、Dashboard方式配置部署:包含应用名称、容器镒、pod数量、Service非常的方便,不想设置配置yaml的可以很方便的...【详细内容】
2023-11-06  Search: Nginx  点击:(370)  评论:(0)  加入收藏
掌握Nginx的高级用法,构建高性能Web应用
Nginx是一款高性能的Web服务器和反向代理服务器,它广泛用于构建高性能、可靠和安全的Web应用程序。除了基本的用法外,Nginx还提供了一些高级功能和配置选项,可以进一步优化性能...【详细内容】
2023-10-26  Search: Nginx  点击:(220)  评论:(0)  加入收藏
▌简易百科推荐
为什么Nginx被称为“反向”代理呢?
Nginx(发音为"engine-x")是一款高性能、轻量级的开源Web服务器软件,也可用作反向代理服务器、负载均衡器和HTTP缓存。Nginx之所以有被称为“反向”代理,是因为它充当客户端设备...【详细内容】
2024-02-01  coderidea  微信公众号  Tags:Nginx   点击:(60)  评论:(0)  加入收藏
哪种服务器操作系统更好呢?
在当今的IT世界中,服务器操作系统扮演着至关重要的角色。它们是确保服务器能够高效、安全地运行的关键因素。然而,对于许多人来说,服务器操作系统的种类和特点可能是一个复杂的...【详细内容】
2024-01-30    简易百科  Tags:操作系统   点击:(76)  评论:(0)  加入收藏
什么是VPS服务器
VPS服务器是一种虚拟化技术,它将一台物理服务器划分为多个虚拟的独立服务器,每个虚拟服务器都可以拥有自己的操作系统、运行环境、应用程序等。这种技术使得每个虚拟服务器可...【详细内容】
2024-01-30    简易百科  Tags:VPS服务器   点击:(70)  评论:(0)  加入收藏
VPS服务器下载速度慢?这五招帮你提速
VPS服务器下载速度慢可能会让用户感到沮丧,尤其是对于需要大量下载和上传数据的用户。幸运的是,有一些方法可以帮助您提高VPS服务器的下载速度,使您的在线体验更加顺畅。在本文...【详细内容】
2024-01-30  IDC行业观察者    Tags:VPS服务器   点击:(57)  评论:(0)  加入收藏
美国VPS和英国VPS:地理位置对服务器性能的影响
在今天的数字时代,VPS已成为在线业务和网站托管的关键组成部分。然而,选择合适的VPS主机服务时,地理位置通常被忽视,尽管它对服务器性能有着重要的影响。本文将探讨美国VPS和英...【详细内容】
2024-01-26  IDC行业观察者    Tags:服务器   点击:(55)  评论:(0)  加入收藏
如何判断服务器所需带宽:基于业务需求和流量模式的关键考量
在选择服务器时,带宽是一个重要的考虑因素。带宽的大小直接影响到网站的加载速度和用户的访问体验。那么,如何判断服务器需要多大的带宽呢?本文将为你揭示这一关键问题的答案...【详细内容】
2024-01-26  源库科技    Tags:服务器   点击:(75)  评论:(0)  加入收藏
服务器内存空间及IO操作原理解析
服务器的内存空间分为内核空间和用户空间,而我们编写的程序通常在用户空间中运行。在进行读写操作时,我们直接操作的是用户缓冲区,而用户缓冲区的内容来自于内核缓冲区。这种内...【详细内容】
2024-01-23  王建立    Tags:服务器   点击:(44)  评论:(0)  加入收藏
如何在Java环境中安装Nginx?
1. 下载Nginx:首先,前往Nginx官方网站(https://nginx.org/en/download.html)下载新版本的Nginx。选择适合您操作系统的版本,通常有Windows、Linux和Mac等不同操作系统的版本可供...【详细内容】
2024-01-22  敲代码的小动    Tags:Nginx   点击:(61)  评论:(0)  加入收藏
服务器证书和SSL证书有啥区别?
在互联网经济时代,随着越来越多的信息以及合作都是从企业官网开始的,因此绝大多数企业都会为自己的网站配置SSL证书,以提高安全性。在接触SSL证书时,也有很多人称之为服务器证书...【详细内容】
2024-01-10  安信SSL证书    Tags:服务器证书   点击:(65)  评论:(0)  加入收藏
宝塔面板怎样部署java项目?
宝塔面板怎样部署java项目?在使用宝塔面板部署Java项目之前,需要确保已经安装了Java Development Kit (JDK)。接下来,将介绍如何使用宝塔面板来部署Java项目的步骤。步骤一:安装...【详细内容】
2024-01-09  西部数码    Tags:宝塔面板   点击:(113)  评论:(0)  加入收藏
站内最新
站内热门
站内头条