Nginx负载配合keepalive实现高可用
使用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的安装和配置,可以进行高可用性测试了。以下是测试步骤
在主服务器上,停止Nginx服务,可以使用以下命令:
sudo systemctl stop nginx
检查另一台服务器上的Nginx服务是否接管了虚拟IP地址。可以使用以下命令:
ip addr show eth0 | grep inet
如果输出中显示了虚拟IP地址192.168.1.100
,则说明此服务器已接管虚拟IP地址,成为了主服务器。
在主服务器上启动Nginx服务,可以使用以下命令:
sudo systemctl start nginx
检查虚拟IP地址是否已经被转移回主服务器。可以使用以下命令:
ip addr show eth0 | grep inet
如果输出中显示了虚拟IP地址192.168.1.100
,则说明虚拟IP地址已经被转移回了主服务器。
通过以上测试步骤,您可以验证您的高可用性配置是否正常工作。当主服务器发生故障时,备份服务器将接管虚拟IP地址,并继续提供服务,以确保您的应用程序的可用性。一旦主服务器恢复正常,虚拟IP地址将会转移回主服务器,以确保系统的高可用性和负载均衡。