keepalived和nginx做集群

keepalived和nginx做集群

浏览次数:
信息来源: 用户投稿
更新日期: 2026-03-12
文章简介

keepalived+nginx+tomcat实现高可用web集群一、nginx的安装过程1.下载nginx安装包,安装依赖环境包 /usr/local/nginx/nginx-1.12.2

2025阿里云双十一服务器活动

keepalived+nginx+tomcat实现高可用web集群

一、nginx的安装过程

1.下载nginx安装包,安装依赖环境包

/usr/local/nginx/nginx-1.12.2

[root@localhostnginx-1.12.2]whereisnginx

[root@localhostnginx-1.12.2]#

进入nginx子目录sbin启动nginx

[root@localhostsbin]#https://www.fruan.com/post/nginx&

[root@localhostsbin]ps-aux|grepnginx

root57690.00.020484608?ss14:030:00nginx:masterprocesshttps://www.fruan.com/post/nginx

nobody57700.00.0230121620?s14:030:00nginx:workerprocess

root57960.00.0112668972pts/0r+14:070:00grep--color=autonginx

[1]+完成https://www.fruan.com/post/nginx

[root@localhostsbin]vim/etc/rc.d/init.d/nginx

#!/bin/sh

#nginx-thisscriptstartsandstopsthenginxdaemon

#description:nginxisanhttp(s)server,http(s)reverse\

#proxyandimap/pop3proxyserver

#config:/etc/nginx/nginx.conf

#config:/usr/local/nginx/conf/nginx.conf

#pidfile:/usr/local/nginx/logs/nginx.pid

./etc/rc.d/init.d/functions

#sourcenetworkingconfiguration.

#checkthatnetworkingisup.

["$networking"="no"]&&exit0

nginx="/usr/local/nginx/sbin/nginx"

nginx_conf_file="/usr/local/nginx/conf/nginx.conf"

[-f/etc/sysconfig/nginx]&&./etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

user=`$nginx-v2>&1|grep"configurearguments:"|sed's/[^*]*--user=\([^]*\).*//g'-`

if[-z"`grep$user/etc/passwd`"];then

useradd-m-s/bin/nologin$user

options=`$nginx-v2>&1|grep'configurearguments:'`

if[`echo$opt|grep'.*-temp-path'`];then

value=`echo$opt|cut-d"="-f2`

mkdir-p$value&&chown-r$user$value

[-f$nginx_conf_file]||exit6

daemon$nginx-c$nginx_conf_file

[$retval-eq0]&&touch$lockfile

[$retval-eq0]&&rm-f$lockfile

$nginx-t-c$nginx_conf_file

rh_status>/dev/null2>&1

echo$"usage:$0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

esac

为启动脚本授权并加入开机启动

[root@localhostinit.d]#chmod-r777/etc/rc.d/init.d/nginx

[root@localhostinit.d]echo'exportpath=$path:/usr/local/nginx/sbin'>>/etc/profile&&source/etc/profile

nginx命令[servicenginx(start|stop|restart)]

[root@localhostinit.d]#servicenginxstart

startingnginx(viasystemctl):[确定]

tips:快捷命令

servicenginx(start|stop|restart)

二、keepalived安装和配置

yuminstall-yopenssl-devel

2.编译keepalived并安装

[root@localhostkeepalived-1.3.9]#https://www.fruan.com/post/configure

[root@localhostkeepalived-1.3.9]mkdir/etc/keepalived

[root@localhostetc]mkdir/etc/keepalived

[root@localhostetc]#cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/

[root@localhostetc]ln-s/usr/local/keepalived/sbin/keepalived/usr/sbin/

设置keepalived开机自启动

[root@localhostsysconfig]#chkconfigkeepalivedon

注意:正在将请求转发到“systemctlenablekeepalived.service”。

createdsymlinkfrom/etc/systemd/system/multi-user.target.wants/keepalived.serviceto/usr/lib/systemd/system/keepalived.service

启动keepalived服务

[root@localhostkeepalived]killallkeepalived

三、集群规划和搭建

环境准备:

keepalivedversion1.4.0-december29,2017

nginxversion:nginx/1.12.2

虚拟机ip说明
keepalived+nginx1[master]192.168.43.101nginxserver01
keeepalived+nginx[backup]192.168.43.102nginxserver02
tomcat01192.168.43.103tomcatwebserver01
tomcat02192.168.43.104tomcatwebserver02
vip192.168.43.150虚拟漂移ip

1.更改tomcat默认欢迎页面,用于标识切换web

更改tomcatserver01节点root/index.jsp信息,加入tomcatip地址,并加入nginx值,即修改节点192.168.43.103信息如下:

<h1>${pagecontext.servletcontext.serverinfo}(192.168.224.103)<%=request.getheader("x-nginx")%></h1>

</div>

更改tomcatserver02节点root/index.jsp信息,加入tomcatip地址,并加入nginx值,即修改节点192.168.43.104信息如下:

<h1>${pagecontext.servletcontext.serverinfo}(192.168.224.104)<%=request.getheader("x-nginx")%></h1>

</div>

2.启动tomcat服务,查看tomcat服务ip信息,此时nginx未启动,因此request-header没有nginx信息。

3.配置nginx代理信息

1.配置master节点[192.168.43.101]代理信息

server192.168.43.103:8080weight=1;

server192.168.43.104:8080weight=1;

proxy_set_headerx-nginx"nginx-1";

}

2.配置backup节点[192.168.43.102]代理信息

server192.168.43.103:8080weight=1;

server192.168.43.104:8080weight=1;

proxy_set_headerx-nginx"nginx-2";

}

3.启动master节点nginx服务

[root@localhostinit.d]#servicenginxstart

startingnginx(viasystemctl):[确定]

此时访问192.168.43.101可以看到103和104节点tcomat交替显示,说明nginx服务已经将请求负载到了2台tomcat上。

4.同理配置backup[192.168.43.102]nginx信息,启动nginx后,访问192.168.43.102后可以看到backup节点已起到负载的效果。

4.配置keepalived脚本信息

1.在master节点和slave节点/etc/keepalived目录下添加check_nginx.sh文件,用于检测nginx的存货状况,添加keepalived.conf文件

check_nginx.sh文件信息如下:

d=`date--datetoday+%y%m%d_%h:%m:%s`

n=`ps-cnginx--no-heading|wc-l`

#如果进程为0,则启动nginx,并且再次检测nginx进程数量,

#如果还为0,说明nginx无法启动,此时需要关闭keepalived

/etc/rc.d/init.d/nginxstart

keepalived和nginx做集群

echo"$dnginxdown,keepalivedwillstop">>/var/log/check_ng.log

fi

添加完成后,为check_nginx.sh文件授权,便于脚本获得执行权限。

[root@localhostkeepalived]#chmod-r777/etc/keepalived/check_nginx.sh

2.在master节点/etc/keepalived目录下,添加keepalived.conf文件,具体信息如下:

script"/etc/keepalived/check_nginx.sh"//检测nginx进程的脚本

statemaster#标示状态为master备份机为backup

interfaceens33#设置实例绑定的网卡(ipaddr查看,需要根据个人网卡绑定)

virtual_router_id51#同一实例下virtual_router_id必须相同

mcast_src_ip192.168.43.101

priority250#master权重要高于backup比如backup为240

advert_int1#master与backup负载均衡器之间同步检查的时间间隔,单位是秒

auth_typepass#主从服务器验证方式

virtual_ipaddress{#设置vip

192.168.43.150#可以多个虚拟ip,换行即可

}

3.在backup节点etc/keepalived目录下添加keepalived.conf配置文件

script"/etc/keepalived/check_nginx.sh"//检测nginx进程的脚本

statebackup#标示状态为master备份机为backup

interfaceens33#设置实例绑定的网卡(ipaddr查看)

virtual_router_id51#同一实例下virtual_router_id必须相同

mcast_src_ip192.168.43.102

priority240#master权重要高于backup比如backup为240

advert_int1#master与backup负载均衡器之间同步检查的时间间隔,单位是秒

auth_typepass#主从服务器验证方式

virtual_ipaddress{#设置vip

192.168.43.150#可以多个虚拟ip,换行即可

}

tips:关于配置信息的几点说明

  • state-主服务器需配成master,从服务器需配成backup

  • interface-这个是网卡名,我使用的是vm12.0的版本,所以这里网卡名为ens33

  • mcast_src_ip-配置各自的实际ip地址

  • priority-主服务器的优先级必须比从服务器的高,这里主服务器配置成250,从服务器配置成240

  • virtual_ipaddress-配置虚拟ip(192.168.43.150)

  • authentication-auth_pass主从服务器必须一致,keepalived靠这个来通信

  • virtual_router_id-主从服务器必须保持一致

  • 5.集群高可用(ha)验证

    step1启动master机器的keepalived和nginx服务

    [root@localhostkeepalived]#keepalived-d-f/etc/keepalived/keepalived.conf

    [root@localhostkeepalived]ps-aux|grepnginx

    root63900.00.020484612?ss19:130:00nginx:masterprocess/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf

    nobody63920.00.0230081628?s19:130:00nginx:workerprocess

    root69780.00.0112672968pts/0s+20:080:00grep--color=autonginx

    查看keepalived启动进程

    [root@localhostkeepalived]#ps-aux|grepkeepalived

    root64020.00.0459201016?ss19:130:00keepalived-d-f/etc/keepalived/keepalived.conf

    root64030.00.0480441468?s19:130:00keepalived-d-f/etc/keepalived/keepalived.conf

    root64040.00.0501281780?s19:130:00keepalived-d-f/etc/keepalived/keepalived.conf

    root70040.00.0112672976pts/0s+20:100:00grep--color=autokeepalived

    使用ipadd查看虚拟ip绑定情况,如出现192.168.43.150节点信息则绑定到master节点

    [root@localhostkeepalived]#ipadd

    1:lo:<loopback,up,lower_up>mtu65536qdiscnoqueuestateunknownqlen1

    link/loopback00:00:00:00:00:00brd00:00:00:00:00:00

    inet127.0.0.1/8scopehostlo

    valid_lftforeverpreferred_lftforever

    valid_lftforeverpreferred_lftforever

    2:ens33:<broadcast,multicast,up,lower_up>mtu1500qdiscpfifo_faststateupqlen1000

    link/ether00:0c:29:91:bf:59brdff:ff:ff:ff:ff:ff

    inet192.168.43.101/24brd192.168.43.255scopeglobalens33

    valid_lftforeverpreferred_lftforever

    inet192.168.43.150/32scopeglobalens33

    valid_lftforeverpreferred_lftforever

    inet6fe80::9abb:4544:f6db:8255/64scopelink

    valid_lftforeverpreferred_lftforever

    inet6fe80::b0b3:d0ca:7382:2779/64scopelinktentativedadfailed

    valid_lftforeverpreferred_lftforever

    inet6fe80::314f:5fe7:4e4b:64ed/64scopelinktentativedadfailed

    valid_lftforeverpreferred_lftforever

    3:virbr0:<no-carrier,broadcast,multicast,up>mtu1500qdiscnoqueuestatedownqlen1000

    link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff

    inet192.168.122.1/24brd192.168.122.255scopeglobalvirbr0

    valid_lftforeverpreferred_lftforever

    4:virbr0-nic:<broadcast,multicast>mtu1500qdiscpfifo_fastmastervirbr0statedownqlen1000

    link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff

    step2启动backup节点nginx服务和keepalived服务,查看服务启动情况,如backup节点出现了虚拟ip,则keepalvied配置文件有问题,此情况称为脑裂。

    [root@localhostkeepalived]#clear

    [root@localhostkeepalived]#ipadd

    1:lo:<loopback,up,lower_up>mtu65536qdiscnoqueuestateunknownqlen1

    link/loopback00:00:00:00:00:00brd00:00:00:00:00:00

    inet127.0.0.1/8scopehostlo

    valid_lftforeverpreferred_lftforever

    valid_lftforeverpreferred_lftforever

    2:ens33:<broadcast,multicast,up,lower_up>mtu1500qdiscpfifo_faststateupqlen1000

    link/ether00:0c:29:14:df:79brdff:ff:ff:ff:ff:ff

    inet192.168.43.102/24brd192.168.43.255scopeglobalens33

    valid_lftforeverpreferred_lftforever

    inet6fe80::314f:5fe7:4e4b:64ed/64scopelink

    valid_lftforeverpreferred_lftforever

    3:virbr0:<no-carrier,broadcast,multicast,up>mtu1500qdiscnoqueuestatedownqlen1000

    link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff

    inet192.168.122.1/24brd192.168.122.255scopeglobalvirbr0

    valid_lftforeverpreferred_lftforever

    4:virbr0-nic:<broadcast,multicast>mtu1500qdiscpfifo_fastmastervirbr0statedownqlen1000

    link/ether52:54:00:2b:74:aabrdff:ff:ff:ff:ff:ff

    step4关闭masterkeepalived服务和nginx服务,访问web服务观察服务转移情况

    [root@localhostkeepalived]#killallkeepalived

    [root@localhostkeepalived]#servicenginxstop

    此时强制刷新192.168.43.150发现页面交替显示103和104并显示nginx-2,vip已转移到192.168.43.102上,已证明服务自动切换到备份节点上。

    step5启动masterkeepalived服务和nginx服务

    此时再次验证发现,vip已被master重新夺回,并页面交替显示103和104,此时显示nginx-1

    四、keepalived抢占模式和非抢占模式

    keepalived的ha分为抢占模式和非抢占模式,抢占模式即master从故障中恢复后,会将vip从backup节点中抢占过来。非抢占模式即master恢复后不抢占backup升级为master后的vip。

    1>在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip

    2>节点的state都为backup两个keepalived节点都启动后,默认都是backup状态,双方在发送组播信息后,会根据优先级来选举一个master出来。由于两者都配置了nopreempt,所以master从故障中恢复后,不会抢占vip。这样会避免vip切换可能造成的服务延迟。

    以上就是如何用Keepalived+Nginx+Tomcat实现高可用Web集群的详细内容,更多请关注主机测评网其它相关文章!

    标签:
    什么是游戏服务器(什么游戏服务器赚钱)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!