前言
在互联网的高可用性 服务中,单一的服务节点往往无法满足业务对稳定性和可用性的要求。双机热备是一种常见的高可用性解决方案,它通过两台服务器同时运行相同的服务,并使用 keepalived 来实现故障转移,确保在主服务器发生故障时,备服务器能够立即接管服务,从而保证服务的连续性。本文将详细介绍如何在 nginx 环境中部署双机热备方案。
环境准备
- 两台 linux 服务器(本文以 centos 7 为例)
- nginx 服务器软件
- keepalived 软件
- 一个可用的 ipv4 地址段(本文假设为 192.168.1.0/24)
- 两个不同的虚拟 ip 地址(vip,本文假设为 192.168.1.100 和 192.168.1.101)
步骤概览
- 在两台服务器上安装 nginx 和 keepalived。
- 配置 nginx 以提供相同的服务。
- 配置 keepalived 以实现故障转移。
- 测试双机热备功能。
安装 nginx 和 keepalived
# 安装 nginx yum install nginx -y # 启动 nginx 并设置开机自启 systemctl start nginx systemctl enable nginx # 安装 keepalived yum install keepalived -y
配置 nginx
在两台服务器上配置相同的 nginx 服务,例如,提供一个简单的 http 服务:
# nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { server { listen 80; server_name _; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ =404; } } }
确保两台服务器的 nginx 配置文件完全相同,包括文件路径和配置项。
配置 keepalived
keepalived 通过 vrrp(虚拟路由器冗余协议)来实现故障转移。下面是 keepalived 的配置示例:
# keepalived.conf ! configuration file for keepalived # 定义两个虚拟路由器,对应两个 vip vrrp_instance vi_1 { state master # 主服务器设置为 master interface eth0 # 网卡接口 virtual_router_id 51 # 虚拟路由器 id,两台服务器必须相同 priority 100 # 优先级,主服务器的优先级应高于备服务器 advert_int 1 # 通告间隔,单位秒 virtual_ipaddress { 192.168.1.100 # 第一个 vip } } vrrp_instance vi_2 { state backup # 备服务器设置为 backup interface eth0 virtual_router_id 51 priority 90 advert_int 1 virtual_ipaddress { 192.168.1.101 # 第二个 vip } }
在主服务器上,将 state master
设置为 state backup
,并将 priority
值降低以表明它是备服务器。
启动 keepalived
# 启动 keepalived 并设置开机自启 systemctl start keepalived systemctl enable keepalived
测试双机热备
在测试时,你可以通过在主服务器的 keepalived 配置中手动设置 state
为 backup
来模拟故障转移。如果一切配置正确,当主服务器发生故障时,备服务器应该能够接管 vip,并提供服务。
总结
通过 nginx 和 keepalived 的结合使用,我们可以在实际的网络服务和负载均衡场景中,nginx 常被用作 http 和反向代理服务器,而 keepalived 则用于实现高可用性(ha)的解决方案。以下是一个简单的示例,展示了如何在 nginx 和 keepalived 的配合下实现双机热备。
首先,你需要安装 nginx 和 keepalived 服务。这个示例假设你已经有了两个服务器,我们称之为 server a 和 server b,它们都运行着 nginx,并且你想要通过 keepalived 来实现它们的双机热备。
nginx 配置
nginx 的配置非常简单,你只需要确保 nginx 在两个服务器上正常运行即可。以下是 nginx 配置的一个基本示例:
http { server { listen 80; location / { # 这里是你的应用逻辑 # 例如,返回一个简单的 "hello world" return 200 'hello world'; } } }
keepalived 配置
keepalived 的配置稍微复杂一些,你需要在两个服务器上配置不同的角色(vrrp_instance 中的 master 或 backup),并且确保它们能够通过 vip(virtual ip address)进行通信。以下是一个简单的 keepalived 配置示例:
server a 的 keepalived 配置(作为 master)
# 确保在两个服务器上的配置文件路径相同 [root@server-a ~]# vim /etc/keepalived/keepalived.conf # 配置文件内容 ! configuration file for keepalived # 定义一个虚拟路由器id(vrid),例如10 vrrp_instance vi_1 { state master # 设置为master interface eth0 # 指定接口 virtual_router_id 10 # 虚拟路由器id priority 200 # 优先级,决定了哪个节点成为主节点 advert_int 1 # 通告间隔,单位秒 # 虚拟ip地址,这是客户端访问的ip virtual_ipaddress { 192.168.1.100 # 假设这是你的vip } } # 启动 keepalived systemctl start keepalived
server b 的 keepalived 配置(作为 backup)
# 确保在两个服务器上的配置文件路径相同 [root@server-b ~]# vim /etc/keepalived/keepalived.conf # 配置文件内容 ! configuration file for keepalived # 定义一个虚拟路由器id(vrid),例如10 vrrp_instance vi_1 { state backup # 设置为backup interface eth0 # 指定接口 virtual_router_id 10 # 虚拟路由器id priority 100 # 优先级,低于 server a 的配置 advert_int 1 # 通告间隔,单位秒 # 虚拟ip地址,这是客户端访问的ip virtual_ipaddress { 192.168.1.100 # 假设这是你的vip } } # 启动 keepalived systemctl start keepalived
配置说明
- 在 keepalived 中,master 节点会一直持有 vip,直到它不可用或者降级为 backup 节点。
- backup 节点会监控 master 节点,如果 master 节点不可用,backup 节点会接管 vip 并成为新的 master。
- priority 值决定了节点的优先级,值越高,成为 master 的可能性越大。
- virtual_ipaddress 段定义了 vip,这是客户端实际访问的 ip 地址。
注意事项
- 确保两台服务器的 keepalived.conf 文件同步更新,特别是在修改配置后。
- 确保 nginx 在两个服务器上都是正常运行的,并且配置相同,以便在 failover 时服务可以无缝切换。
- 定期测试 failover,以确保 keepalived 配置正确,并且能够在需要时顺利切换。
请注意,这只是一个基本的示例,实际的部署可能需要根据你的网络环境、负载均衡需求和安全要求进行调整。在生产环境中,你可能还需要考虑配置健康检查、安全认证、日志记录等因素。在nginx+keepalived的双机热备架构中,您需要配置两个nginx服务器,以及一个keepalived实例来管理它们。以下是一个简化的配置示例,包括nginx配置和keepalived配置。
nginx配置
nginx的配置通常包括以下几个部分:
- 主配置文件:nginx.conf,它包含所有nginx服务器的全局配置。
- 虚拟主机配置文件:通常位于conf.d或sites-available目录中,每个文件对应一个虚拟主机。
下面是一个简单的nginx虚拟主机配置示例:
在这个配置中,我们定义了一个名为backend的上游服务器组,其中包括两个nginx服务器。然后我们定义了一个监听在80端口的虚拟主机,它将所有的请求代理到backend服务器组。
keepalived配置
keepalived是一个基于vrrp(虚拟路由器冗余协议)的高可用性解决方案。在nginx+keepalived的双机热备中,keepalived用于管理nginx服务器的健康状态,并确保只有一个nginx服务器作为主服务器接受客户端请求,而另一个作为备用服务器等待切换。
下面是一个简单的keepalived配置示例:
# 假设这个配置文件位于/etc/keepalived/keepalived.conf vrrp_instance vi_1 { state master; # 设置当前节点为master virtual_router_id 51; priority 101; # 设置优先级,高于备用节点 advert_int 1; virtual_ipaddress { 192.168.1.10; # 虚拟ip地址,即客户端访问的ip } }
在这个配置中,我们定义了一个名为vi_1的vrrp实例,它将当前节点配置为master。我们设置了一个虚拟ip地址192.168.1.10,这是客户端访问的ip地址,实际上是分配给master节点的。
配置文件的位置和权限
确保nginx配置文件位于nginx配置目录下,例如/etc/nginx/conf.d/,并且拥有正确的权限(通常是root:root)。keepalived配置文件通常位于/etc/keepalived/keepalived.conf,同样需要有正确的权限。
启动和监控
配置完成后,您需要重新启动nginx和keepalived服务。使用以下命令来启动和停止服务:
systemctl start nginx systemctl start keepalived systemctl stop nginx systemctl stop keepalived systemctl status nginx systemctl status keepalived
使用systemctl status命令可以检查服务的运行状态。
健康检查和故障转移
keepalived通过发送vrrp通告来确定节点的健康状态。如果master节点出现故障,keepalived会自动将备用节点提升为master。您可以在keepalived配置中添加健康检查脚本,以确保只有健康的nginx服务器才能成为master。
# 假设这个配置文件位于/etc/keepalived/keepalived.conf ... check_script chk_nginx { script "killall -0 nginx || exit 1"; interval 2; weight 2; } vrrp_instance vi_1 { ... track_script { chk_nginx; } }
在这个例子中,我们定义了一个名为chk_nginx
的健康检查脚本,它通过
到此这篇关于nginx+keepalived双机热备技术实践的文章就介绍到这了,更多相关nginx keepalived双机热备内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论