当前位置: 首页 > article >正文

nginx+keepalived实现高可用负载均衡

本文介绍了nginx反向代理多虚拟主机节点服务器配合keepalived实现高可用和负载均衡,keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。采用 nginx+keepalived,它是一个高性能的服务器高可用或者热备解决方案,Keepalived主要来防止服务器 单点故障的发生问题,可以通过其与Nginx的配合实现Web服务器端的高可用。使用keepalived可以保 证nginx的高可用,他能监控nginx的健康状态,当nginx出现宕机时自动主备切换

配置有点像:基于keepalived实现haproxy高可用站点-CSDN博客

环境准备:

4台Linux Rocky8.10虚拟机,两台提供nginx的web服务器:192.168.118.131/129。本项目采用非keepalived的非抢占模式,两台keepalived的互为backup服务器:192.168.118.128/130

配置nginx服务器

下载:

yum install nginx -y

配置:vim /etc/nginx/conf.d/vhost.conf

server {
        listen 80;
        server_name bbs.test.com;
        location /{
                root /usr/share/nginx/html/bbs;
                index index.html index.htm;
        }
        access_log /usr/share/nginx/html/bbs/logs/access_bbs.log main;
}

server {
        listen 80;
        server_name www.test.com;
        location /{
                root /usr/share/nginx/html/www;
                index index.html index.htm;
        }
        access_log /usr/share/nginx/html/www/logs/access_www.log main;
}

 关闭selinux和防火墙:setenforce 0 && systemctl stop firewalld

在两台服务器上面执行以下命令:

mkdir -p /usr/share/nginx/html/{www,bbs}
touch /usr/share/nginx/html/www/index.html
touch /usr/share/nginx/html/bbs/index.html
echo "bbs: This is a test page which from: IP:$(hostname -I)" > /usr/share/nginx/html/bbs/index.html
echo "www: This is a test page which from: IP:$(hostname -I)" > /usr/share/nginx/html/www/index.html

touch  /usr/share/nginx/html/bbs/logs/access_bbs.log
touch  /usr/share/nginx/html/www/logs/access_www.log
chown -R nginx:nginx /usr/share/nginx/

 拓扑结构:

[root@localhost ~]# tree /usr/share/nginx/html/
/usr/share/nginx/html/
├── 404.html
├── 50x.html
├── bbs
│   ├── index.html
│   └── logs
│       └── access_bbs.log
├── index.html
├── nginx-logo.png
├── poweredby.png
└── www
    ├── index.html
    └── logs
        └── access_www.log

 启动nginx:systemctl start nginx

测试

echo "192.168.118.129  www.test.com  bbs.test.com" >> /etc/hosts

 [root@localhost conf.d]# curl www.test.com
www: This is a test page which from 192.168.118.129
[root@localhost conf.d]# curl bbs.test.com
bbs: This is a test page which from 192.168.118.129

配置nginx代理

vim /etc/nginx/conf.d/vtest.conf

upstream server_pools {
        server 192.168.118.129:80 weight=1;                                                   
        server 192.168.118.131:80 weight=1;
}                                                                                                                                                                           server {                                                                                      
        listen  80;                                                                           
        server_name www.test.com;
        location / {
                proxy_pass http://server_pools;                                                             
                #传递原始的host头部信息
                proxy_set_header Host $host;
        }
}                                                                                                                                                                           server {
        listen  80;                                                                           
        server_name bbs.test.com;
        location / {
                proxy_pass http://server_pools;
                #传递原始的host头部信息
                proxy_set_header Host $host;
        }
}

 在这段配置中,当请求的server_name匹配到bbs.test.com或者www.test.com时,location /会捕获所有对www.test.com或者bbs.test.com的请求,无论请求的URL是什么。这些请求都会被转发到上游服务器池server_pools中

 然后在/etc/hosts中写入域名

#130主机
[root@localhost conf.d]# tail -1 /etc/hosts
192.168.118.130 www.test.com bbs.test.com
#128主机
[root@localhost conf.d]# tail -1 /etc/hosts
192.168.118.128 www.test.com bbs.test.com

测试

[root@localhost ~]# for ((i=1;i<=4;i++));do curl www.test.com;done
www: This is a test page which from 192.168.118.129
www: This is a test page which from 192.168.118.131
www: This is a test page which from 192.168.118.129
www: This is a test page which from 192.168.118.131
[root@localhost ~]# for ((i=1;i<=4;i++));do curl bbs.test.com;done
bbs: This is a test page which from 192.168.118.129
bbs: This is a test page which from 192.168.118.131
bbs: This is a test page which from 192.168.118.129
bbs: This is a test page which from 192.168.118.131

 配置keepalived

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   router_id LVS_1
}
vrrp_script chk_nginx {
    script "killall -0 nginx"#检查是否开启了nginx代理
}

vrrp_instance VI_1 {
    state BACKUP#备份模式
    interface ens160
    mcast_src_ip 192.168.118.130#基于这个源IP的健康检查
    nopreempt#非抢占模式
    virtual_router_id 51
    priority 100#优先级
    advert_int 1#间隔时间
    authentication {#认证
        auth_type PASS
        auth_pass 1111
    }
    track_script {#调用脚本
        chk_nginx
}
    virtual_ipaddress {#VIP
        192.168.118.110
    }
}

 systemctl start keepalived

效果

 单开两个进程去时刻检查日志:tail -f /var/log/messages

当拥有VIP的一方停止nginx服务时,立刻就会移除VIP,另一方获得VIP

 当其恢复时,VIP也不会回到自己这台主机上面,减少主从交换频率,提高稳定性。这就是非抢占模式

 最后测试是否依旧可以通过这个虚拟IP访问:curl -H表示携带head信息

以上访问被分流,且更具访问的URL到不同页面


http://www.kler.cn/a/567655.html

相关文章:

  • 【K8S】Kubernetes 中的基本组成部分介绍,一文了解 K8S 中的所有概念
  • javaScript-系统知识点【同步 和 异步】
  • 2025文学研究生复试面试问题汇总 文学专业知识问题很全! 文学试全流程攻略 文学考研复试调剂真题汇总
  • ESP32+Mixly+温湿度传感器DHT11
  • ollama 提供给外部访问
  • Sqlserver安全篇之_TLS的证书概念
  • Python:列表的定义和增删改查,推导式与嵌套
  • 无服务边缘融合架构:重新定义云原生应用边界
  • 纯电动商用车核心性能评价方法实现
  • DeepSeek、Grok 和 ChatGPT 对比分析:从技术与应用场景的角度深入探讨
  • C++ 的编译和链接
  • 数据库 复习
  • selenium如何实现,开启浏览器的开发者工具模式
  • Flutter系列教程之(8)——CheckBox多选框及动态更改多选框
  • 基于Kerberos认证对接华为云Elasticsearch
  • 筑牢安全防线:工商业场所燃气泄漏防护新方案
  • 【Framework系列之Client】DataManager介绍
  • 【LeetCode】739.每日温度
  • 算法实战练习
  • 小红书湖仓架构的跃迁之路