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

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到不同页面

相关文章:

  • Python中文自然语言处理库SnowNLP
  • 建筑兔零基础人工智能自学记录34|深度学习与神经网络2
  • 【单点登录】SSO单点登录sa-token接入流程详解
  • Linux服务器Ubuntu系统环境中安装Jupyter Notebook并且配置内核以便在网页端调用
  • TCP通讯与基于C#TCP通讯,跨窗收发消息Demo
  • JavaScript 内存管理:利用数据结构优化内存使用
  • Linux系统中proc是做什么的?
  • MySQL索引深度剖析:从数据结构到实际应用
  • 【MySQL篇】数据类型
  • 01 计算机系统层次结构和冯·诺依曼计算机
  • thinkphp think-captcha 前后端分离 图形验证码
  • 兴起的Spring Ai框架【详解 搭建Spring Ai项目,以及简单的ai大模型智能体应用,附有图文+示例代码】
  • 前缀和与差分算法
  • DeepSeek 1.5B蒸馏模型的J6部署(Llama方式)
  • 【QGIS二次开发】
  • C# 牵手DeepSeek:打造本地AI超能力
  • Hue Load Balance配置
  • Flutter 学习之旅 之 flutter 使用 fluttertoast 的 toast 实现简单的 Toast 效果
  • Word快速替换修改学术论文所有中的中括号引用未上标格式
  • XML 编辑器:全面指南与最佳实践
  • 自己做的网站怎么设置信息必填/百度引擎的搜索方式是什么
  • 企业网站维护存在问题/sem是什么岗位
  • wordpress 站点地址 wordpress地址/网站优化+山东
  • 学习css网站开发/常州百度seo排名
  • mp6 wordpress 静态/宁波正规优化seo价格
  • 成都企业网站建设哪家专业/宁波seo的公司联系方式