一、keepalive简介
目前互联网主流的实现web网站及数据库服务高可用软件包括:
keepalived
、heartbeat
等。heartbeat
是比较早期的实现高可用软件,而keepalived
是目前轻量级的管理方便、易用的高可用软件解决方案,得到互联网公司it人的青睐。keepalived是一个类似于工作在layer 3, 4 & 7交换机制的软件,keepalived软件有两种功能,分别是健康检查、vrrp冗余协议,keepalived是模块化设计,不同模块负责不同的功能。
keepalived的
作用
是检测服务器的状态,如果有一台web服务器、mysql服务器宕机,或工作出现故障,keepalived将检测到后,会将有故障的web服务器或者mysql服务器从系统中剔除,当服务器工作正常后keepalived自动将web、mysql服务器加入到服务器群中。
keepalived + nginx 实现双机主备高可用:
在使用 nginx 实现双机主备高可用(ha)架构时,结合 keepalive,可以有效地提高系统的可靠性和可用性。以下是实现这一架构的基本步骤和要点:
架构概述
主备节点:有两台 nginx 服务器,一台作为主节点,另一台作为备节点。当主节点出现故障时,流量会自动切换到备节点。
keepalived:通过 keepalived 机制维持主备节点之间的心跳检测,确保在主节点故障时能够及时切换。
二、实现步骤
1. 环境准备
确保两台 nginx 服务器已经安装并配置好,并且网络可以互通。
2. 安装 keepalived
在两台服务器上安装 keepalived,keepalived 是一种用于实现高可用性的工具,能够通过 vrrp 协议管理主备节点的 ip 地址。
1、下载链接: https://www.keepalived.org/download.html
2、上传后,进行解压
tar -zxvf keepalived-2.0.20.tar.gz
3、先进入keepalived目录,然后输入配置命令进行配置(--prefix
:指明keepalived的安装位置,--sysconf
:指明keepalived配置文件存放位置,必须放在/etc下面,为了后续keepalived启动关闭不报错)
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived --sysconf=/etc
如果出现了下面的错误,运行
yum -y install libnl libnl-devel yum -y install openssl-devel
4、编译和安装
make && make install
3. 配置 keepalived 双机主备集群架构
在主节点和备节点上配置 keepalived。
1、建立check_nginx脚本(/etc/keepalived/check_nginx.sh)如上配置还需要建立check_nginx脚本,用于检查本地nginx是否存活,如果不存活,则kill keepalived实现切换。其中check_nginx.sh脚本内容如下
#!/bin/bash killall -0 /usr/local/nginx/sbin/nginx if [[ $? -ne 0 ]]; then service keepalived stop exit 1 else exit 0 fi
添加可操作权限
chmod +x check_nginx.sh
2、主节点配置(/etc/keepalived/keepalived.conf):
global_defs { #路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_129 } vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx.sh" #每隔2秒运行上一行的脚本 interval 2 #权重 weight 2 } vrrp_instance vi_1 { # 表示的状态,当前的129服务器为nginx的主节点,master/backup state master # 当前实例绑定的网卡 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type pass auth_pass 123456 } track_script { # 追踪 nginx脚本 check_nginx_alive } virtual_ipaddress { 192.168.121.120 } }
3、备节点配置(/etc/keepalived/keepalived.conf):
global_defs { #路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_128 } vrrp_instance vi_1 { # 表示的状态,当前的128服务器为nginx的主节点,master/backup state backup # 当前实例绑定的网卡 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 80 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type pass auth_pass 123456 } virtual_ipaddress { 192.168.121.120 } }
4. 配置 nginx
在两台 nginx 上配置相同的站点,以确保在主节点故障时备节点可以无缝接管。
示例 nginx 配置(/etc/nginx/nginx.conf):
http { upstream backend { server 127.0.0.1:8080; # 假设应用运行在本地的8080端口 } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } } }
访问原ip
5. 启动keepalived
cd /usr/local/keepalived/sbin/ # 启动命令 ./keepalived systemctl start keepalived.service systemctl status keepalived.service # 查看状态,可查看是否有问题
6. 测试高可用性
- 确保主节点正常工作,访问虚拟 ip 地址(192.168.121.120)。
- 停止主节点上的 nginx, keepalived会自动停止,检查流量是否自动切换到备节点。
- 重新启动主节点,确认其恢复后是否接管虚拟 ip 地址。
- 虚拟ip要跟你是同一个网段的,可以访问的,虚拟ip其实也是ip,只是没有设备
访问虚拟ip 192.168.121.120
7. 配置keepalived 双主热备集群架构
nginx+keepalived主备模式,始终存在一台服务器处于空闲状态,如何更好的把两台服务器利用起来呢,可以借助nginx+keepalived双主架构来实现,如图23-2所示,将架构改成双主架构,也即同时两台对外两个vip地址,同时接收用户的请求。
1、192.168.2.128的keepalived.conf配置文件代码:
global_defs { #路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_128 } vrrp_instance vi_1 { # 表示的状态,当前的128服务器为nginx的主节点,master/backup state master # 当前实例绑定的网卡 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type pass auth_pass 1111 } virtual_ipaddress { 192.168.2.120 } } vrrp_instance vi_2 { # 表示的状态,当前的128服务器为nginx的主节点,master/backup state backup # 当前实例绑定的网卡 interface ens33 # 保证主备节点一致 virtual_router_id 52 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 80 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type pass auth_pass 1111 } virtual_ipaddress { 192.168.2.121 } }
2、192.168.2.129的keepalived.conf配置文件代码:
! configuration file for keepalived global_defs { #路由id:当前安装keepalived节点主机的标识符,全局唯一 router_id keep_129 } vrrp_instance vi_1 { # 表示的状态,当前的129服务器为nginx的主节点,master/backup state backup # 当前实例绑定的网卡 interface ens33 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 80 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type pass auth_pass 1111 } virtual_ipaddress { 192.168.2.120 } } vrrp_instance vi_2 { # 表示的状态,当前的129服务器为nginx的主节点,master/backup state master # 当前实例绑定的网卡 interface ens33 # 保证主备节点一致 virtual_router_id 52 # 优先级/权重,谁的优先级高,在master挂掉以后,就能成为master priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type pass auth_pass 1111 } virtual_ipaddress { 192.168.2.121 } }
注意点:
- keepalived主配置文件必须设置不同的vrrp名称,同时优先级和vip设置也各不相同;
- nginx网站总访问量为两台nginx服务器之和,可以写脚本自动统计访问量;
- 两台nginx为master,存在两个vip地址,用户从外网访问vip,
需配置域名映射到两个vip上方
。 - 通过外网dns映射不同vip的方法也称为dns负载均衡模式;
三、虚拟ip
虚拟 ip 和真实 ip 之间的区别主要在于它们的用途和管理方式:
真实 ip
- 定义:真实 ip 是指分配给设备的唯一的、可在互联网或局域网中直接访问的 ip 地址。
- 特性:
- 每个真实 ip 地址在网络中都是唯一的。
- 真实 ip 可以直接与设备通信,比如访问某台服务器。
- 真实 ip 地址通常由互联网服务提供商(isp)分配。
虚拟 ip
- 定义:虚拟 ip 是一个逻辑 ip 地址,它并不直接分配给某个特定的设备,而是可以在多个设备之间共享。
- 特性:
- 虚拟 ip 常用于高可用性和负载均衡,允许多个服务器通过一个共同的 ip 地址对外提供服务。
- 虚拟 ip 可以在不同的物理服务器之间动态切换,以实现故障转移。
- 虚拟 ip 通常与网络协议(如 vrrp、carp)结合使用,管理虚拟 ip 的分配和切换。
应用场景
- 真实 ip:适用于需要被直接访问的服务器或设备,如网页服务器、数据库服务器等。
- 虚拟 ip:常用于负载均衡器、集群环境和高可用性设置,确保即使某台服务器故障,服务仍然可用。
总结真实 ip 是指设备的实际地址,而虚拟 ip 是用于在多个设备之间实现共享和故障转移的逻辑地址。
虚拟 ip 地址并不是可以随便设定的,设定虚拟 ip 时需要遵循一些原则和规定:
- ip 地址范围
- 虚拟 ip 应该在你的网络地址范围内,避免与已有的真实 ip 地址冲突。
- 网络配置
- 在设置虚拟 ip 时,需要确保网络设备(如路由器、交换机、负载均衡器)支持虚拟 ip 的配置。
- 使用协议
- 配置虚拟 ip 通常需要使用特定的网络协议(如 vrrp、carp 等)来管理和切换虚拟 ip 的所有权。
- 环境一致性
- 在多台服务器上使用虚拟 ip 时,确保它们在同一个子网内,并且配置相同的网络参数,以确保正常通信。
- 避免冲突
- 虚拟 ip 必须确保在整个网络中唯一,避免与其他设备或服务的 ip 地址发生冲突。
结论
虽然技术上可以在网络中设置虚拟 ip,但实际操作时需要遵循上述原则,以确保网络的正常运行和稳定性。如果不小心设置了不合适的虚拟 ip,可能会导致网络问题。
到此这篇关于keepalived+nginx实现网站高可用性的文章就介绍到这了,更多相关keepalived nginx网站高可用性内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论