设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 846|回复: 2

keepalived+nginx实现网站高可用性

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
28
主题
22
精华
0
金钱
82
积分
50
注册时间
2023-9-30
最后登录
2025-8-29

发表于 2025-2-20 00:08:59 | 显示全部楼层 |阅读模式
目录


  • 一、keepalive简介
  • 二、实现步骤

    • 1. 环境准备
    • 2. 安装 Keepalived
    • 3. 配置 Keepalived 双机主备集群架构
    • 4. 配置 Nginx
    • 5. 启动Keepalived
    • 6. 测试高可用性
    • 7. 配置keepalived 双主热备集群架构

  • 三、虚拟ip
  • 结论

一、keepalive简介


  • 目前互联网主流的实现WEB网站及数据库服务高可用软件包括:
    1. keepalived
    复制代码
    1. heartbeat
    复制代码
    等。
    1. Heartbeat
    复制代码
    是比较早期的实现高可用软件,而
    1. keepalived
    复制代码
    是目前轻量级的管理方便、易用的高可用软件解决方案,得到互联网公司IT人的青睐。
  • Keepalived是一个类似于工作在layer 3, 4 & 7交换机制的软件,Keepalived软件有两种功能,分别是健康检查、VRRP冗余协议,keepalived是模块化设计,不同模块负责不同的功能。
  • Keepalived的
    1. 作用
    复制代码
    是检测服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中。
keepalived + nginx 实现双机主备高可用:
1.png

在使用 Nginx 实现双机主备高可用(HA)架构时,结合 Keepalive,可以有效地提高系统的可靠性和可用性。以下是实现这一架构的基本步骤和要点:
架构概述

  • 主备节点:有两台 Nginx 服务器,一台作为主节点,另一台作为备节点。当主节点出现故障时,流量会自动切换到备节点。
  • Keepalived:通过 Keepalived 机制维持主备节点之间的心跳检测,确保在主节点故障时能够及时切换。

二、实现步骤


1. 环境准备

确保两台 Nginx 服务器已经安装并配置好,并且网络可以互通。

2. 安装 Keepalived

在两台服务器上安装 Keepalived,Keepalived 是一种用于实现高可用性的工具,能够通过 VRRP 协议管理主备节点的 IP 地址。
1、下载链接: https://www.keepalived.org/download.html
2.png

2、上传后,进行解压
  1. tar -zxvf keepalived-2.0.20.tar.gz
复制代码
3、先进入Keepalived目录,然后输入配置命令进行配置(
  1. --prefix
复制代码
:指明Keepalived的安装位置,
  1. --sysconf
复制代码
:指明Keepalived配置文件存放位置,必须放在/etc下面,为了后续Keepalived启动关闭不报错)
  1. cd keepalived-2.0.20
复制代码
  1. ./configure --prefix=/usr/local/keepalived --sysconf=/etc
复制代码
如果出现了下面的错误,运行
  1. yum -y install libnl libnl-devel
  2. yum -y install openssl-devel
复制代码
3.png

4、编译和安装
  1. make && make install
复制代码
3. 配置 Keepalived 双机主备集群架构

在主节点和备节点上配置 Keepalived。
1、建立check_nginx脚本(/etc/keepalived/check_nginx.sh)如上配置还需要建立check_nginx脚本,用于检查本地Nginx是否存活,如果不存活,则kill keepalived实现切换。其中check_nginx.sh脚本内容如下
  1. #!/bin/bash
  2. killall -0 /usr/local/nginx/sbin/nginx
  3. if [[ $? -ne 0 ]]; then
  4.     service keepalived stop
  5.     exit 1
  6. else
  7.     exit 0
  8. fi
复制代码
添加可操作权限
  1. chmod +x check_nginx.sh
复制代码
2、主节点配置(/etc/keepalived/keepalived.conf):
  1. global_defs {
  2.    #路由id:当前安装keepalived节点主机的标识符,全局唯一
  3.    router_id keep_129
  4. }

  5. vrrp_script check_nginx_alive {
  6.    script "/etc/keepalived/check_nginx.sh"
  7.    #每隔2秒运行上一行的脚本
  8.    interval 2
  9.    #权重
  10.    weight 2
  11. }

  12. vrrp_instance VI_1 {
  13.     # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
  14.     state MASTER
  15.     # 当前实例绑定的网卡
  16.     interface ens33
  17.     # 保证主备节点一致
  18.     virtual_router_id 51
  19.     # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
  20.     priority 100
  21.     # 主备之间同步检查的时间间隔,默认1s
  22.     advert_int 1
  23.     # 认证授权的密码,防止非法节点的进入
  24.     authentication {
  25.         auth_type PASS
  26.         auth_pass 123456
  27.     }
  28.     track_script {
  29.       # 追踪 nginx脚本
  30.       check_nginx_alive
  31.     }
  32.     virtual_ipaddress {
  33.         192.168.121.120
  34.     }
  35. }
复制代码
3、备节点配置(/etc/keepalived/keepalived.conf):
  1. global_defs {
  2.    #路由id:当前安装keepalived节点主机的标识符,全局唯一
  3.    router_id keep_128
  4. }

  5. vrrp_instance VI_1 {
  6.     # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
  7.     state BACKUP
  8.     # 当前实例绑定的网卡
  9.     interface ens33
  10.     # 保证主备节点一致
  11.     virtual_router_id 51
  12.     # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
  13.     priority 80
  14.     # 主备之间同步检查的时间间隔,默认1s
  15.     advert_int 1
  16.     # 认证授权的密码,防止非法节点的进入
  17.     authentication {
  18.         auth_type PASS
  19.         auth_pass 123456
  20.     }
  21.     virtual_ipaddress {
  22.         192.168.121.120
  23.     }
  24. }
复制代码
4. 配置 Nginx

在两台 Nginx 上配置相同的站点,以确保在主节点故障时备节点可以无缝接管。
示例 Nginx 配置(/etc/nginx/nginx.conf):
  1. http {
  2.     upstream backend {
  3.         server 127.0.0.1:8080;  # 假设应用运行在本地的8080端口
  4.     }

  5.     server {
  6.         listen 80;
  7.         server_name example.com;

  8.         location / {
  9.             proxy_pass http://backend;
  10.         }
  11.     }
  12. }
复制代码
访问原ip
4.png

5.png


5. 启动Keepalived
  1. cd /usr/local/keepalived/sbin/
  2. # 启动命令
  3. ./keepalived

  4. systemctl start keepalived.service
  5. systemctl status keepalived.service   # 查看状态,可查看是否有问题
复制代码
6. 测试高可用性


  • 确保主节点正常工作,访问虚拟 IP 地址(192.168.121.120)。
  • 停止主节点上的 Nginx, Keepalived会自动停止,检查流量是否自动切换到备节点。
  • 重新启动主节点,确认其恢复后是否接管虚拟 IP 地址。
  • 虚拟ip要跟你是同一个网段的,可以访问的,虚拟ip其实也是ip,只是没有设备
访问虚拟ip 192.168.121.120
6.png


7. 配置keepalived 双主热备集群架构

Nginx+keepalived主备模式,始终存在一台服务器处于空闲状态,如何更好的把两台服务器利用起来呢,可以借助Nginx+keepalived双主架构来实现,如图23-2所示,将架构改成双主架构,也即同时两台对外两个VIP地址,同时接收用户的请求。
7.png

1、192.168.2.128的keepalived.conf配置文件代码:
  1. global_defs {
  2.    #路由id:当前安装keepalived节点主机的标识符,全局唯一
  3.    router_id keep_128
  4. }

  5. vrrp_instance VI_1 {
  6.     # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
  7.     state MASTER
  8.     # 当前实例绑定的网卡
  9.     interface ens33
  10.     # 保证主备节点一致
  11.     virtual_router_id 51
  12.     # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
  13.     priority 100
  14.     # 主备之间同步检查的时间间隔,默认1s
  15.     advert_int 1
  16.     # 认证授权的密码,防止非法节点的进入
  17.     authentication {
  18.         auth_type PASS
  19.         auth_pass 1111
  20.     }
  21.     virtual_ipaddress {
  22.         192.168.2.120
  23.     }
  24. }

  25. vrrp_instance VI_2 {
  26.     # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
  27.     state BACKUP
  28.     # 当前实例绑定的网卡
  29.     interface ens33
  30.     # 保证主备节点一致
  31.     virtual_router_id 52
  32.     # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
  33.     priority 80
  34.     # 主备之间同步检查的时间间隔,默认1s
  35.     advert_int 1
  36.     # 认证授权的密码,防止非法节点的进入
  37.     authentication {
  38.         auth_type PASS
  39.         auth_pass 1111
  40.     }
  41.     virtual_ipaddress {
  42.         192.168.2.121
  43.     }
  44. }
复制代码
2、192.168.2.129的keepalived.conf配置文件代码:
  1. ! Configuration File for keepalived

  2. global_defs {
  3.    #路由id:当前安装keepalived节点主机的标识符,全局唯一
  4.    router_id keep_129
  5. }

  6. vrrp_instance VI_1 {
  7.     # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
  8.     state BACKUP
  9.     # 当前实例绑定的网卡
  10.     interface ens33
  11.     # 保证主备节点一致
  12.     virtual_router_id 51
  13.     # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
  14.     priority 80
  15.     # 主备之间同步检查的时间间隔,默认1s
  16.     advert_int 1
  17.     # 认证授权的密码,防止非法节点的进入
  18.     authentication {
  19.         auth_type PASS
  20.         auth_pass 1111
  21.     }
  22.     virtual_ipaddress {
  23.         192.168.2.120
  24.     }
  25. }

  26. vrrp_instance VI_2 {
  27.     # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
  28.     state MASTER
  29.     # 当前实例绑定的网卡
  30.     interface ens33
  31.     # 保证主备节点一致
  32.     virtual_router_id 52
  33.     # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
  34.     priority 100
  35.     # 主备之间同步检查的时间间隔,默认1s
  36.     advert_int 1
  37.     # 认证授权的密码,防止非法节点的进入
  38.     authentication {
  39.         auth_type PASS
  40.         auth_pass 1111
  41.     }
  42.     virtual_ipaddress {
  43.         192.168.2.121
  44.     }
  45. }
复制代码
注意点:

  • Keepalived主配置文件必须设置不同的VRRP名称,同时优先级和VIP设置也各不相同;
  • Nginx网站总访问量为两台Nginx服务器之和,可以写脚本自动统计访问量;
  • 两台Nginx为Master,存在两个VIP地址,用户从外网访问VIP,
    1. 需配置域名映射到两个VIP上方
    复制代码

  • 通过外网DNS映射不同VIP的方法也称为DNS负载均衡模式;

三、虚拟ip

虚拟 IP 和真实 IP 之间的区别主要在于它们的用途和管理方式:
  1. 真实 IP
复制代码

  • 定义:真实 IP 是指分配给设备的唯一的、可在互联网或局域网中直接访问的 IP 地址。
  • 特性

    • 每个真实 IP 地址在网络中都是唯一的。
    • 真实 IP 可以直接与设备通信,比如访问某台服务器。
    • 真实 IP 地址通常由互联网服务提供商(ISP)分配。

  1. 虚拟 IP
复制代码

  • 定义:虚拟 IP 是一个逻辑 IP 地址,它并不直接分配给某个特定的设备,而是可以在多个设备之间共享。
  • 特性

    • 虚拟 IP 常用于高可用性和负载均衡,允许多个服务器通过一个共同的 IP 地址对外提供服务。
    • 虚拟 IP 可以在不同的物理服务器之间动态切换,以实现故障转移。
    • 虚拟 IP 通常与网络协议(如 VRRP、CARP)结合使用,管理虚拟 IP 的分配和切换。

  1. 应用场景
复制代码

  • 真实 IP:适用于需要被直接访问的服务器或设备,如网页服务器、数据库服务器等。
  • 虚拟 IP:常用于负载均衡器、集群环境和高可用性设置,确保即使某台服务器故障,服务仍然可用。
总结真实 IP 是指设备的实际地址,而虚拟 IP 是用于在多个设备之间实现共享和故障转移的逻辑地址。
虚拟 IP 地址并不是可以随便设定的,设定虚拟 IP 时需要遵循一些原则和规定:

  • IP 地址范围


  • 虚拟 IP 应该在你的网络地址范围内,避免与已有的真实 IP 地址冲突。


  • 网络配置


  • 在设置虚拟 IP 时,需要确保网络设备(如路由器、交换机、负载均衡器)支持虚拟 IP 的配置。


  • 使用协议


  • 配置虚拟 IP 通常需要使用特定的网络协议(如 VRRP、CARP 等)来管理和切换虚拟 IP 的所有权。


  • 环境一致性


  • 在多台服务器上使用虚拟 IP 时,确保它们在同一个子网内,并且配置相同的网络参数,以确保正常通信。


  • 避免冲突


  • 虚拟 IP 必须确保在整个网络中唯一,避免与其他设备或服务的 IP 地址发生冲突。

结论

虽然技术上可以在网络中设置虚拟 IP,但实际操作时需要遵循上述原则,以确保网络的正常运行和稳定性。如果不小心设置了不合适的虚拟 IP,可能会导致网络问题。
到此这篇关于keepalived+nginx实现网站高可用性的文章就介绍到这了,更多相关keepalived nginx网站高可用性内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
13
积分
6
注册时间
2022-12-29
最后登录
2022-12-29

发表于 2025-3-9 04:41:12 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
12
积分
4
注册时间
2023-11-11
最后登录
2023-11-11

发表于 昨天 11:53 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表