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

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   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
众所周知,NGINX 是一个广受好评的 web 服务器,也可以用作反向代理,负载均衡器和 HTTP 缓存。keepalive 工作在虚拟路由器冗余协议 vrrp (Virtual Router Redundancy Protocol)...【详细内容】
2023-03-17  Tags: Nginx  点击:(0)  评论:(0)  加入收藏
本篇带给大家 Nginx 配置文件中常用的指令和参数,通过对这些指令和参数的设置,可以对 Nginx 服务器进行灵活、高效、安全的配置。 Nginx 是一款高性能的 Web 服务器软件,同时...【详细内容】
2023-03-13  Tags: Nginx  点击:(7)  评论:(0)  加入收藏
Nginx是一个高性能的Web服务器,它可以用来进行反向代理和负载均衡。在本文中,我们将深入探讨Nginx反向代理和负载均衡的概念、作用以及实现方式。一、什么是Nginx反向代理?在理...【详细内容】
2023-02-24  Tags: Nginx  点击:(18)  评论:(0)  加入收藏
本文分享自华为云社区《【高并发】使用Nginx实现限流》,作者:冰 河。Nginx作为一款高性能的Web代理和负载均衡服务器,往往会部署在一些互联网应用比较前置的位置。此时,我们就可...【详细内容】
2023-02-06  Tags: Nginx  点击:(27)  评论:(0)  加入收藏
背景开发有一个服务部署在阿里云上,依赖阿里云的CLB(传统型负载均衡)暴露服务,因特殊要求,CLB和后端服务之间需要通过自建Nginx做代理,拓扑图如下,应用拓扑操作客户端的请求经过了...【详细内容】
2023-02-03  Tags: Nginx  点击:(31)  评论:(0)  加入收藏
HTTPS 请求跳转如下面的配置:location /test {proxy_pass http://www.baidu.com/;在访问 URI 为 /test 时会跳转到百度,但此时浏览器中的 URL 也会发生变化。这是因为:向 http:...【详细内容】
2023-01-29  Tags: Nginx  点击:(107)  评论:(0)  加入收藏
nginx作为反向代理服务器时,报错: upstream timed out (110: Connection timed out)……经过百度,google看到都是修改nginx配置,解决超时问题,比如:large_client_head...【详细内容】
2023-01-10  Tags: Nginx  点击:(77)  评论:(0)  加入收藏
1.问题背景项目组最近新开了一个项目,规模还比较大,目前正在开发第一版本的功能。其中涉及到一个mp3文件上传至阿里云oss的逻辑,后端接口开发好了以后,并通过一个简陋的上传页面...【详细内容】
2023-01-10  Tags: Nginx  点击:(222)  评论:(0)  加入收藏
写在前面 分享一些 Nginx 用户认证、SSL 加密配置的笔记 博文内容涉及 Nginx 用户认证、SSL 加密配置 Demo通过 OpenSSL 生成使用 SSL 证书、私钥和 CSR Demo 理解不足小伙...【详细内容】
2022-12-27  Tags: Nginx  点击:(13)  评论:(0)  加入收藏
‬架构如上图所示Lua-resty-ffi提供了一个高效和通用的API,用于使用主流语言(go、Python、java、Rust等)进行开放式编程。因为是通过c扩展直接调用因此可以保证性能,对于任何...【详细内容】
2022-12-03  Tags: Nginx  点击:(84)  评论:(0)  加入收藏
▌简易百科推荐
众所周知,NGINX 是一个广受好评的 web 服务器,也可以用作反向代理,负载均衡器和 HTTP 缓存。keepalive 工作在虚拟路由器冗余协议 vrrp (Virtual Router Redundancy Protocol)...【详细内容】
2023-03-17    网易号  Tags:Nginx   点击:(0)  评论:(0)  加入收藏
作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!前言介绍 本章节我们模仿微信聊天页面,开发一个基于Netty搭建WebSocket通信案例。Netty的应...【详细内容】
2023-03-17  bugstack虫洞栈  微信公众号  Tags:WebSocket   点击:(3)  评论:(0)  加入收藏
REST、GraphQL 和 gRPC 是现代 Web 应用程序中最流行的 3 种 API 开发技术。那么在做技术选型时,三者要如何选择呢?在本文中,我们将一起对比 REST、GraphQL 和 gRPC 的特性和用...【详细内容】
2023-03-17  迷路的架构师  今日头条  Tags:REST   点击:(4)  评论:(0)  加入收藏
服务器时间不正确可能有多种原因,下面列举几个常见的原因: 硬件时钟故障:硬件时钟是计算机上的一块小型芯片,它用于跟踪系统时间。如果硬件时钟故障,可能导致服务器时间不正确。 ...【详细内容】
2023-03-17  数据库干货铺  今日头条  Tags:服务器   点击:(3)  评论:(0)  加入收藏
1 安装NTPyum -y install ntp直接yum安装即可2 相关配置修改ntp.conf配置vim /etc/ntp.conf但可以分如下2种限制: 2.1 只允许192.168.100.0网段的客户机进行时间同步在rest...【详细内容】
2023-03-17  数据库干货铺    Tags:服务器   点击:(3)  评论:(0)  加入收藏
本篇带给大家 Nginx 配置文件中常用的指令和参数,通过对这些指令和参数的设置,可以对 Nginx 服务器进行灵活、高效、安全的配置。 Nginx 是一款高性能的 Web 服务器软件,同时...【详细内容】
2023-03-13  数据库干货铺  今日头条  Tags:Nginx   点击:(7)  评论:(0)  加入收藏
使用用户账号进行 ssh 连接认证有密码被泄露的风险,为了规避这个风险,可以使用密钥的方式进行身份认证。使用密钥就需要将公钥添加到服务器,我们今天介绍一下如何将公钥添加到...【详细内容】
2023-03-13   TIAP  微信公众号  Tags:ssh   点击:(9)  评论:(0)  加入收藏
这里就不麻烦地建 Web 项目了,用一个最原始的 Java 项目来模拟高 CPU 场景。打开 IDEA,创建一个 Java 项目,里面写一个死循环,循环里面不断地创建对象。相比于一大堆复杂的 JVM...【详细内容】
2023-03-06  飞天小牛肉  微信公众号  Tags:CPU   点击:(13)  评论:(0)  加入收藏
如今越来越多的网站已经开始安装SSL证书,只要安装ssl证书之后,可以保障网站的数据安全,关于ssl证书的内容,之前已经介绍过很多了,今天为大家讲解的是Nginx 301永久重定向配置以及...【详细内容】
2023-03-03  沃通WoTrus  今日头条  Tags:Ngnix   点击:(15)  评论:(0)  加入收藏
ChatGPT发布之后,引发了全球范围的关注和讨论,国内各大厂商相继宣布GPT模型开发计划。据各公司官网,2023年2月7日,百度宣布将推出ChatGPT类似产品“文心一言”,预计今年3月展开内...【详细内容】
2023-03-02  架构师技术联盟    Tags:ChatGPT   点击:(15)  评论:(0)  加入收藏
站内最新
站内热门
站内头条