前言
上章完成了通过nginx对服务器配置了负载均衡,保证了一个服务器宕机另一个服务器顶上,但是有一个问题出现了,如果nginx宕机了怎么办,这章会对这个问题进行讲解,配置集群来保证nginx宕机下一个顶上来,服务器一直能提供服务当一台服务器宕机的时候把从服务器切换为主,提供虚拟ip
一.什么是nginx 高可用
Nginx负载均衡示意图:
问题:当计算机A挂机,系统无法访问,如何保证系统的高可用?
搭建集群,增加备机,主机挂机,启用备机
问题:
-
主机备机服务器地址不一样,客户如何访问?
-
怎么检测服务器状态,确认服务器故障?
-
主机备机如何切换?
二.keepalived简介
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
2.1 为什么使用集群
-
防止单点故障;
-
负载均衡;
-
高并发(1.集群(增加服务器数量);2.线程;);
-
高可靠;
在两台nginx服务器上安装keepalived,如果一台服务器出故障,另外一台可以继续工作。
2.2 虚IP
Ip地址:计算机得唯一标识。
就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的 任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。
169.254.233.222在这里叫做虚ip,有可能在第一台服务器上,也有可能在第二台服务器上。
2.3 作用
-
检测服务器状态;
-
如果服务状态异常,通知维护人员服务状态异常,进行人工维护;
-
讲当前服务器从集群中剔除
-
使用从机作为主服务器
三. 安装keepalived
3.1 下载
命令:
yum -y install keepalived
3.2 配置
文件位置
点开这个文件 删除里面所有的内容
将下方内容复制进去
# 全局配置 global_defs { #设置报警邮件地址,可以设置多个,可以不设置 notification_email { 2@qq.com } #发送通知邮件时邮件源地址 notification_email_from 1@163.com # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现 smtp_server smtp.163.com #连接smtp连接超时时间 smtp_connection_timeout 30 #定义路由标识信息,相同局域网唯一,ip地址 router_id 192.168.5.69 script_user root } # 检测脚本 vrrp_script chk_http_port { # 脚本路径 script "/opt/keepalived/nginx_check.sh" #(检测脚本执行的间隔,单位是秒) interval 2 # 当检查失败后,将vrrp_instance的priority减小5 weight -5 # 连续监测失败3次,才认为真的健康检查失败。并调整优先级 fall 3 # 连续监测2次成功,就认为成功。但不调整优先级 rise 2 } vrrp_instance VI_1 { # 指定keepalived的角色,MASTER为主,BACKUP为备,大写 state MASTER # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) interface ens33 # 虚拟路由编号0-255,主、备机的 virtual_router_id 必须相同 virtual_router_id 51 # 主、备机取不同的优先级,主机值较大,备份机值较小 priority 100 # 检查间隔,默认为1s(vrrp组播周期秒数) advert_int 1 #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信 authentication { auth_type PASS auth_pass 1111 } # 定义虚拟ip(VIP),可多设,每行一个 virtual_ipaddress { 192.168.5.100 } # 执行检测脚本 track_script{ chk_http_port } }
根据下方图片进行改动
3.3 创建脚本
跟着一步一步来
上面配置完保存之后还需要创建一个脚本
mkdir -p /opt/keepalived
cd /opt/keepalived/
touch nginx_check.sh
打开文件编辑脚本
直接复制即可
#!/bin/bash A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then /opt/nginx/nginxserver/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then killall keepalived fi fi
给这个脚本权限
chmod 777 nginx_check.sh
到这里主nginx的keepalived已经配置好了,下面将这个服务器创立一个副本作为从nginx使用
四. 从服务器
1. 克隆服务器
过程略......
修改从服务器的ip地址,不可与主服务器一样
2.修改配置文件
4.2.1 找到文件
找到从服务器的keepalived.conf配置文件
4.2.2 修改配置文件
五. 启动
1.首先启动上章已经配好的两个springboot项目
2.启动nginx
启动刚配好的两个服务器的nginx
3.启动keepalived
4. 访问
刚才我们配的路径是192.168.5.100
所以在浏览器访问192.168.5.100
这样就配置完成了
5.测试
我们可以在FinalShell里面连接192.168.5.100
自行ip addr 可以看到我们100服务器访问的其实是192.168.5.69服务器,这也做到了使用虚拟ip的操作
这里可以看到我们实际连接到的是69服务器
下面我们模拟一下nginx宕机,关掉69服务器
这时会直接断开连接 重新连接之后会发现服务器ip变为第二个了也就是配置的备服务器99