欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > nginx+keepalived实现高可用负载均衡

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

2025/6/18 22:08:35 来源:https://blog.csdn.net/ashina_01/article/details/145947922  浏览:    关键词: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.htmltouch  /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 ens160mcast_src_ip 192.168.118.130#基于这个源IP的健康检查nopreempt#非抢占模式virtual_router_id 51priority 100#优先级advert_int 1#间隔时间authentication {#认证auth_type PASSauth_pass 1111}track_script {#调用脚本chk_nginx
}virtual_ipaddress {#VIP192.168.118.110}
}

 systemctl start keepalived

效果

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

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

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

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词