搭建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高可用负载均衡服务器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享