搭建Keepalived+Nginx高可用负载均衡服务器

2022/2/7 7:15:40

本文主要是介绍搭建Keepalived+Nginx高可用负载均衡服务器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、服务器搭建策略

单机模式: 只有一台应用服务器,组成一个单机模式
优点:简单方便(搭建、运营、维护)
缺点:不能出故障(停电、断网、系统崩溃、硬件老化、性能瓶颈)
应用场景:小型项目(几十个人)
集群(cluster)模式:
有一个应用服务器集群(cluster),由很多应用服务器组成一个集群

二、服务器三高

高可用: 服务器能否能24*365不间断提供服务,服务器容灾性高
高并发: 同一时间上,服务器能够同时容纳的用户连接数
高性能: 服务器处理用户请求的速度,服务器的计算能力

三、服务器升级

纵向升级(对单台服务器做配置提升):
eg:换更强的cpu,加大内存和磁盘,加大网络带宽……
横向升级(堆服务器的数量):
节约成本,很廉价的机器都可以推入到集群(更受欢迎)

四、如何解决负载均衡高可用问题?

做备份
当主负载均衡服务器没有问题时,处于备用;当其出现问题时,备用服务器能够第一时间内顶替主负载均衡服务器的位置
难点:备份很容易,但是ip地址如何快速切换?

五、Keepalived实现备用机无缝顶替主机的原理:

多台nginx-----keepalived集群
keepalived集群中至少有两台机器
两台:一主一从
三台:一主二从…以此类推
为keepalived集群设置一个唯一的虚拟IP,虚拟IP默认会与master机器绑定在一起
即master机器将会有两个ip地址,一个是自己的源ip,一个是keepalived给的虚拟IP地址
非抢占模式下:
当master机器出现故障时,keepalived第一时间收回虚拟IP地址并分配给slave机器,此时相当于slave机器升级为master机器,此时用户只需要记住keepalived的虚拟IP地址即可
若master机器恢复正常,则不会被分配虚拟IP地址,直到slave机器出现故障后,master才会被分配虚拟IP地址

六、搭建Keepalived+Nginx高可用负载均衡服务器

1、设置keepalived负载均衡服务器
准备2台Nginx (一主一从),分别安装keepalived

yum -y install keepalived

查看网卡名字
在这里插入图片描述
打开配置文件

vim etc/keepalived/keepalived.conf

找到第19行
在这里插入图片描述
设置一主一从,设置对应优先级(主>备),设置虚拟IP
在这里插入图片描述
在这里插入图片描述
删除这两行, 否则虚拟IP会绑定失败

 13 vrrp_skip_check_adv_addr
 14 vrrp_strict

启动keepalived, 得到虚拟IP地址

 systemctl start keepalived

在这里插入图片描述
在这里插入图片描述
重启

 systemctl restart keepalived

停止, 则会收回虚拟IP地址

 systemctl stop keepalived

在这里插入图片描述
在这里插入图片描述
2、让keepalived监视nginx运行状态
在/etc/keepalived目录中编写一个可执行的脚本check_nginx.sh让keepalived监视nginx运行状态

#!/bin/bash
	A=`ps -C nginx --no-header |wc -l`        
	if [ $A -eq 0 ];then                            
	    /usr/local/nginx/sbin/nginx                
	    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
	        exit 1
	    else
	        exit 0
	    fi
	else
	    exit 0
	fi

检查nginx是否已经启动(ps任务管理器中是否有nginx进程)
IF nginx已经启动,keepalived认为当前机器没有问题,exit 0
IF nginx未启动,keepalived尝试去启动nginx
IF 能够启动成功nginx,keepalived认为当前机器没有问题,exit 0
IF 不能启动成功nginx,keepalived认为当前机器有问题,exit 1

此时nginx不需要我们自己启动,交给keepalived帮助我们去启动它
直接执行脚本显示权限不够
在这里插入图片描述
需要授予权限,绿色代表有执行权限
在这里插入图片描述
在执行执行check_nginx.sh脚本之前,nginx未启动
在这里插入图片描述
在执行check_nginx.sh脚本之后,则nginx已经被启动了
在这里插入图片描述
打开keepalived.conf

 16 vrrp_script check_nginx {   #定义一个策略,策略名为"check_nginx"
 17    script "/etc/keepalived/check_nginx.sh" #执行一次/etc/keepalived/check_nginx.sh脚本文件
 18    interval 1  #每隔1秒钟
 19    weight -20  #如果发现nginx启动失败了,将当前的机器的priority-20
 20 }
 21 vrrp_instance VI_1 {
 22     state MASTER
 23     interface ens33
 24     virtual_router_id 51
 25     priority 100
 26     advert_int 1
 27     authentication {
 28         auth_type PASS
 29         auth_pass 1111
 30     }
 31     track_script {   #指定keepalived跟踪策略为 "check_nginx"
 32         check_nginx
 33     }
 34     virtual_ipaddress {
 35         192.168.20.100
 36     }
 37 }

先同时启动nginx

check_nginx.sh

再同时启动keepalived 虚拟IP默认在MASTER机器

systemctl stop keepalived
systemctl start keepalived

在这里插入图片描述
在这里插入图片描述

七、设置nginx和tomcat开机自动启动

nginx启动命令

/usr/local/nginx/sbin/nginx
./nginx                       # ./代表从当前目录找nginx

nginx停止命令

/usr/local/nginx/sbin/nginx -s quit
./nginx -s quit

tomcat启动命令

/usr/local/tomcat/bin/startup.sh
./startup.sh

tomcat停止命令

/usr/local/tomcat/bin/shutdown.sh
./shutdown.sh

设置nginx和tomcat开机自动启动要告诉操作系统nginx启动命令在哪,tomcat启动命令在哪
1、设置可以在任何目录中使用 systemctl [操作] nginx 来操作 nginx 程序
创建nginx.service服务文件/lib/systemd/system/nginx.service

cd /lib/systemd/system   //存放由操作系统管理的启动程序
vim nginx.service     //创建一个nginx服务文件

写入以下内容

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建好这个服务文件后,启动nginx就可以在任何目录中使用
systemctl [操作] nginx.service/nginx

systemctl stop nginx        #停止
systemctl restart nginx    #重启
systemctl status nginx     #状态
systemctl enable nginx     #允许开机自动启动
systemctl disable nginx    #禁止开机自动启动(默认)

在这里插入图片描述
2、设置可以在任何目录中使用 systemctl [操作] tomcat 来操作 tomcat 程序
创建tomcat.service服务文件/lib/systemd/system/tomcat.service

cd /lib/systemd/system   //存放由操作系统管理的启动程序
vim tomcat.service     //创建一个tomcat服务文件

写入以下内容

[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建好这个服务文件后,启动tomcat就可以在任何目录中使用
systemctl [操作] tomcat.service/tomcat

systemctl stop tomcat       #停止
systemctl restart tomcat    #重启
systemctl status tomcat     #状态
systemctl enable tomcat     #允许开机自动启动
systemctl disable tomcat    #禁止开机自动启动(默认)

八、yum是什么?

全称 Yellow dog Updater,Modified 是一个RedHat和Fedora在Centos系统中创建的软件安装包管理器
在 /etc/yum.repos.d 这个目录中有yum源文件
eg: Centos-Base.repo 文件中有很多mirror地址,即yum的远程仓库地址

yum search 搜索软件安装包名
yum -y install 安装软件安装包名

注:使用yum指令需要联网

九、为什么keepalived (双机热备服务)可以直接使用systemctl 操作 keepalived?

因为 keepalived 是使用yum -y install keepalived进行安装的程序,使用yum安装程序,会自动帮你安装好程序和写程序的服务文件/lib/systemd/system/keepalived.service,而nginx、tomcat是我们自己手动下载安装包进行安装的程序
在这里插入图片描述
在这里插入图片描述
为什么network (网卡服务)可以直接使用systemctl 操作 network?
为什么firewalld (防火墙服务)可以直接使用systemctl 操作 firewalld?
systemctl stop firewalld 关闭防火墙 = 开放了所有的端口 ≠ 外界可以从任意端口进入系统(还要看是否有服务程序正在监听该端口)
防火墙这种服务的关闭并不是永久关闭,开机后会自动启动(默认)



这篇关于搭建Keepalived+Nginx高可用负载均衡服务器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程