使用nginx和keepalive进行负载均衡和高可用配置

1. 背景

在现代互联网应用中,高可用性是至关重要的。当有多个服务器提供同一种服务时,负载均衡可以让流量分布到这些服务器上,实现高可用和性能优化。本文将介绍如何使用Nginx和Keepalived来实现高可用负载均衡。

2.系统环境

1.三台主机“host1:192.168.1.101”,“host2:192.168.1.102”,“host3:192.168.1.103”

2.系统环境:centos/ubuntu/rhel

3.安装nginx和keepalive

3. 安装Nginx

在三台主机上都需要安装Nginx来实现负载均衡。以下是在Ubuntu系统上安装Nginx的步骤:

sudo apt update
sudo apt install nginx

4. 配置Nginx

在host1、host2上,创建一个新的Nginx配置文件/etc/nginx/conf.d/myapp.conf,将以下内容添加到该文件中或者直接添加到nginx.conf的http模块内:

upstream myapp {
    server 192.168.1.101:10040;
    server 192.168.1.102:10040;
    server 192.168.1.103:10040;
}

server {
    listen 20001;
    location / {
        proxy_pass http://myapp;
    }
}

在这个配置中,upstream块定义了负载均衡器将请求发送到的后端服务器。server指令定义了三个后端服务器的IP地址和端口号。server块中的第一个服务器将被视为默认服务器,并且在其他服务器失败时将被使用。server块之后的listen指令指定Nginx应监听的端口号。最后,location指令将请求代理到后端服务器。

在完成配置文件的编辑之后,执行以下命令使更改生效:

sudo systemctl restart nginx

5. 安装和配置Keepalived

Keepalived是一个高可用性软件,它可以监控负载均衡器和后端服务器,并在故障发生时自动重新路由流量。以下是在Ubuntu系统上安装和配置Keepalived的步骤:

5.1 安装Keepalived

在三台主机上都需要安装Keepalived。执行以下命令在Ubuntu系统上安装Keepalived:

sudo apt update
sudo apt install keepalived

5.2 配置Keepalived

在host1上,创建一个新的Keepalived配置文件/etc/keepalived/keepalived.conf,并将以下内容添加到该文件中:

! Configuration File for keepalived

global_defs {
   router_id loadbalancer
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    interface eth0    ##设备网卡名
    state MASTER      ##状态 MASTER主节点,BACKUP备节点
    virtual_router_id
    priority 100      ##优先级,主节点要比备节点高。
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {     ##虚拟ip
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

在这个配置中,global_defs块定义了路由器ID,用于在多个Keepalived实例之间唯一标识路由器。vrrp_script块定义了一个名为chk_nginx的脚本,该脚本用于检查Nginx是否在运行。vrrp_instance块定义了Keepalived实例的名称,以及它们之间的状态。state指令定义此实例是主服务器还是备份服务器。virtual_router_id指令定义虚拟路由器的ID。priority指令定义此实例的优先级,数字越大,优先级越高。authentication块用于定义认证类型和密码,以确保只有授权的Keepalived实例才能成为主服务器。virtual_ipaddress指令定义虚拟IP地址。最后,track_script块用于定义需要跟踪的脚本。

在host2上,创建一个新的Keepalived配置文件/etc/keepalived/keepalived.conf,并将以下内容添加到该文件中:

! Configuration File for keepalived

global_defs {
   router_id loadbalancer
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    interface eth0
    state BACKUP
    virtual_router_id 1
    priority 50
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

在这个配置中,state指令定义此实例是备份服务器。priority指令定义此实例的优先级,数字越大,优先级越高。vrrp_instance块中的其他指令与之前的配置相同。

在host1,host2上,创建一个新的脚本文件/etc/keepalived/check_nginx.sh,并将以下内容添加到该文件中:

#!/bin/bash

# 检查Nginx进程是否存在
if ! pgrep nginx > /dev/null
then
  # 启动Nginx服务
  sudo systemctl start nginx

  # 检查Nginx服务是否启动成功
  if pgrep nginx > /dev/null
  then
    echo "Nginx服务已启动成功"
    exit 0
  else
    # 如果Nginx服务启动失败,则杀死Keepalived服务
    sudo systemctl stop keepalived
    echo "Nginx服务启动失败,Keepalived服务已停止"
    exit 1
  fi
else
  echo "Nginx服务已经运行"
  exit 0
fi

在完成配置文件的编辑之后,执行以下命令使更改生效:

sudo systemctl restart keepalived

6. 测试高可用性

现在,您已经完成了Nginx和Keepalived的安装和配置,可以进行高可用性测试了。以下是测试步骤

  1. 在主服务器上,停止Nginx服务,可以使用以下命令:

sudo systemctl stop nginx
  1. 检查另一台服务器上的Nginx服务是否接管了虚拟IP地址。可以使用以下命令:

ip addr show eth0 | grep inet

如果输出中显示了虚拟IP地址192.168.1.100,则说明此服务器已接管虚拟IP地址,成为了主服务器。

  1. 在主服务器上启动Nginx服务,可以使用以下命令:

sudo systemctl start nginx
  1. 检查虚拟IP地址是否已经被转移回主服务器。可以使用以下命令:

ip addr show eth0 | grep inet

如果输出中显示了虚拟IP地址192.168.1.100,则说明虚拟IP地址已经被转移回了主服务器。

通过以上测试步骤,您可以验证您的高可用性配置是否正常工作。当主服务器发生故障时,备份服务器将接管虚拟IP地址,并继续提供服务,以确保您的应用程序的可用性。一旦主服务器恢复正常,虚拟IP地址将会转移回主服务器,以确保系统的高可用性和负载均衡。

文章作者: Administrator
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 知识武装灵魂
喜欢就支持一下吧