Keepalived+nginx实现双主高可用负载均衡
1、Nginx+keepalived 主从配置
这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠,所以本次不予采用。
2、Nginx+keepalived 双主配置
这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境,故本次采用此方案对网站进行高可用架构。
下面我们以第二种配置演示实现双主高可用负载均衡。
第一组
VIP1:192.168.36.100
主nginx:192.168.36.99
备nginx:192.168.36.86
第二组
VIP2:192.168.36.100
主nginx:192.168.36.86
备nginx:192.168.36.99
web服务:
web1:192.168.36.215
web2:192.168.36.80
一、nginx配置(安装省略)
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; upstream web1 { server 192.168.36.215:80 max_fails=3 fail_timeout=3s; } upstream web2 { server 192.168.36.80:80 max_fails=3 fail_timeout=3s; } server { listen 88; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://web1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 99; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://web2; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
web1
http://192.168.36.86:88/
http://192.168.36.99:88/
web2
http://192.168.36.86:99/
http://192.168.36.99:99/
二、安装、配置keepalived(安装省略)
1)192.168.36.86配置
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { monitor@3evip.cn #failover@firewall.loc } notification_email_from tianwei7518@163.com smtp_server smtp.163.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/chk_nginx.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 100 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.36.100 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 200 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.36.200 } }
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { monitor@3evip.cn #failover@firewall.loc } notification_email_from tianwei7518@163.com smtp_server smtp.163.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/chk_nginx.sh" interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.36.100 } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 200 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 192.168.36.200 } }
vi /etc/keepalived/chk_nginx.sh
#!/bin/sh #description: # 如果启动失败,则停止keepalived status=$( ps -C nginx --no-heading| wc -l) if [ "${status}" = "0" ]; then /usr/local/nginx/sbin/nginx status2=$( ps -C nginx --no-heading| wc -l) if [ "${status2}" = "0" ]; then service keepalived stop fi fi
三、启动、测试
分别启动nginx和keepalived: /usr/local/nginx/sbin/nginx
service keepalived start
访问:
web1
http://192.168.36.100:88/
http://192.168.36.200:88/
web2
http://192.168.36.100:99/
http://192.168.36.200:99/
可以正常访问。
我们可以试一下,关闭一个keepalived。关闭192.168.36.86上的keepalived
service keepalived stop
查看日志:
tail -f /var/log/messages
192.168.36.86日志:
Feb 7 00:39:05 slave-d Keepalived[5738]: Stopping Keepalived v1.2.15 (02/07,2015) Feb 7 00:39:05 slave-d Keepalived_vrrp[5741]: VRRP_Instance(VI_2) sending 0 priority Feb 7 00:39:05 slave-d Keepalived_vrrp[5741]: VRRP_Instance(VI_2) removing protocol VIPs. Feb 7 00:39:05 slave-d Keepalived_healthcheckers[5740]: Netlink reflector reports IP 192.168.36.200 removed Feb 7 00:39:05 slave-d avahi-daemon[1823]: Withdrawing address record for 192.168.36.200 on eth0.
Feb 7 00:39:11 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) Transition to MASTER STATE Feb 7 00:39:12 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) Entering MASTER STATE Feb 7 00:39:12 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) setting protocol VIPs. Feb 7 00:39:12 slave-c Keepalived_healthcheckers[25102]: Netlink reflector reports IP 192.168.36.200 added Feb 7 00:39:12 slave-c avahi-daemon[1832]: Registering new address record for 192.168.36.200 on eth0.IPv4. Feb 7 00:39:12 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 192.168.36.200 Feb 7 00:39:17 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 192.168.36.200
192.168.36.86日志:
Feb 7 00:40:42 slave-d Keepalived[6004]: Starting Keepalived v1.2.15 (02/07,2015) Feb 7 00:40:42 slave-d Keepalived[6005]: Starting Healthcheck child process, pid=6007 Feb 7 00:40:42 slave-d Keepalived[6005]: Starting VRRP child process, pid=6008 Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Netlink reflector reports IP 192.168.36.86 added Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Netlink reflector reports IP fe80::20c:29ff:fe6a:66ff added Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Registering Kernel netlink reflector Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Registering Kernel netlink command channel Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Registering gratuitous ARP shared channel Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Opening file '/etc/keepalived/keepalived.conf'. Feb 7 00:40:42 slave-d Keepalived_healthcheckers[6007]: Netlink reflector reports IP 192.168.36.86 added Feb 7 00:40:42 slave-d Keepalived_healthcheckers[6007]: Netlink reflector reports IP fe80::20c:29ff:fe6a:66ff added Feb 7 00:40:42 slave-d Keepalived_healthcheckers[6007]: Registering Kernel netlink reflector Feb 7 00:40:42 slave-d Keepalived_healthcheckers[6007]: Registering Kernel netlink command channel Feb 7 00:40:42 slave-d Keepalived_healthcheckers[6007]: Opening file '/etc/keepalived/keepalived.conf'. Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Configuration is using : 44182 Bytes Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: Using LinkWatch kernel netlink reflector... Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: VRRP_Instance(VI_1) Entering BACKUP STATE Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)] Feb 7 00:40:42 slave-d Keepalived_healthcheckers[6007]: Configuration is using : 7257 Bytes Feb 7 00:40:42 slave-d Keepalived_healthcheckers[6007]: Using LinkWatch kernel netlink reflector... Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: VRRP_Instance(VI_2) Transition to MASTER STATE Feb 7 00:40:42 slave-d Keepalived_vrrp[6008]: VRRP_Instance(VI_2) Received lower prio advert, forcing new election Feb 7 00:40:43 slave-d Keepalived_vrrp[6008]: VRRP_Instance(VI_2) Entering MASTER STATE Feb 7 00:40:43 slave-d Keepalived_vrrp[6008]: VRRP_Instance(VI_2) setting protocol VIPs. Feb 7 00:40:43 slave-d avahi-daemon[1823]: Registering new address record for 192.168.36.200 on eth0.IPv4. Feb 7 00:40:43 slave-d Keepalived_vrrp[6008]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 192.168.36.200 Feb 7 00:40:43 slave-d Keepalived_healthcheckers[6007]: Netlink reflector reports IP 192.168.36.200 added Feb 7 00:40:48 slave-d Keepalived_vrrp[6008]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 192.168.36.200
Feb 7 00:40:47 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) Received higher prio advert Feb 7 00:40:47 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) Entering BACKUP STATE Feb 7 00:40:47 slave-c Keepalived_vrrp[25103]: VRRP_Instance(VI_2) removing protocol VIPs. Feb 7 00:40:47 slave-c Keepalived_healthcheckers[25102]: Netlink reflector reports IP 192.168.36.200 removed Feb 7 00:40:47 slave-c avahi-daemon[1832]: Withdrawing address record for 192.168.36.200 on eth0.
关闭nginx后,可以看到nginx立即有启动。
参考文章:
CentOS6.5 keepalived详解及实现Nginx服务的高可用性
用NginX+keepalived实现高可用的负载均衡
Keepalived+Nginx实现高可用和双主节点负载均衡
nginx+keepalived实现nginx双主高可用的负载均衡
以上就介绍了Keepalived+nginx实现双主高可用负载均衡,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

Docker 容器启动步骤:拉取容器镜像:运行 "docker pull [镜像名称]"。创建容器:使用 "docker create [选项] [镜像名称] [命令和参数]"。启动容器:执行 "docker start [容器名称或 ID]"。检查容器状态:通过 "docker ps" 验证容器是否正在运行。

可以通过以下步骤查询 Docker 容器名称:列出所有容器(docker ps)。筛选容器列表(使用 grep 命令)。获取容器名称(位于 "NAMES" 列中)。

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

在 Docker 中创建容器: 1. 拉取镜像: docker pull [镜像名] 2. 创建容器: docker run [选项] [镜像名] [命令] 3. 启动容器: docker start [容器名]

在云服务器上配置 Nginx 域名的方法:创建 A 记录,指向云服务器的公共 IP 地址。在 Nginx 配置文件中添加虚拟主机块,指定侦听端口、域名和网站根目录。重启 Nginx 以应用更改。访问域名测试配置。其他注意事项:安装 SSL 证书启用 HTTPS、确保防火墙允许 80 端口流量、等待 DNS 解析生效。

可以查询 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打开 Nginx 错误页,查看页面的标题。

当 Nginx 服务器宕机时,可执行以下故障排除步骤:检查 nginx 进程是否正在运行。查看错误日志以获取错误消息。检查 nginx 配置语法正确性。确保 nginx 具有访问文件所需的权限。检查文件描述符打开限制。确认 nginx 正在侦听正确的端口。添加防火墙规则以允许nginx流量。检查反向代理设置,包括后端服务器可用性。如需进一步帮助,请联系技术支持。
