为什么要使用nginx的高可用:因为nginx作为反向代理服务器时,有可能出现宕机的情况,而由于其反向代理的特性,就会导致其他服务器(tomcat等)无法被访问,这样项目就停止工作了。但是使用了高可用后,就可以避免这种现象出现。 什么是高可用:nginx的高可用简单来说就是配置了两台(或更多)的nginx服务器,当主服务器宕机时,就会自动切换到备用服务器,从而保证项目的持续运行。 高可用的原理:nginx的实现需要借助其他工具(keepalived)来实现。在keepalived中配置一个虚拟IP(VIP),同时keepalived会定时检查主服务器的工作状态(通过脚本实现)。在主服务器正常工作时,VIP就会映射到主服务器的IP,此时,虚拟ip对应的物理地址和主服务器IP对应的物理地址是相同的,所以访问虚拟IP即访问主服务器。当主服务器失效时,脚本就会监测到,从而根据预先的配置,找到优先级最高的备用服务器,并将虚拟IP映射到该备用服务器的ip,此时,这两个ip对应的物理地址时相同的。再主服务器回复正常时,又会被检测到,又会自动切换到主服务器。这样就实现了nginx的高可用。 
一个nginx高可用实现的简单案例(Docker)一、需求准备清单两台虚拟机 Nginx-MASTER(主服务器):安装在一台虚拟机的docker中。IP:192.168.1.117 Nginx-BACKUP(备用服务器):安装在另一台虚拟机docker中。IP:192.168.1.150 keepalived:虚拟IP设置:192.168.11.11
二、相关软件安装、配置**虚拟机:**虚拟机安装这里不做展示,可自行查询资料(要求能连外网,相关:) Nginx安装: 首先需要安装docker容器,( docker相关 ): #将yum更新到最新
yum update
#安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源
yum-config-manager --add-repo https://download./linux/centos/docker-ce.repo
#安装docker
yum install -y docker-ce
#查看docker版本,检验是否成功
docker -v
#systemctl start docker(管理员权限)
systemctl start docker
#开机启动docker服务
systemctl enable docker 下载nginx镜像 #搜索镜像
docker search nginx
#拉取镜像,默认最新
docker pull nginx 创建nginx容器 首先:需要准备nginx中的配置文件(docker中有两个nginx.conf、default.conf),因为docker中的文件不能直接修改,需要挂载数据卷,这里直接从nginx容器中复制过来 #创建配置文件存放位置,存放在/root/nginx/
mkdir ~/nginx
mkdir ~/nginx/conf.d
mkdir ~/nginx/html
#切换目录
cd ~/nginx/
#创建未挂载数据卷的nginx容器,只为要其中的配置文件
docker run -id --name=nginx nginx
#复制其中的文件
docker cp nginx:/etc/nginx/nginx.conf ./
docker cp nginx:/etc/nginx/conf.d/default.conf ./conf.d/ 准备好配置文件后,即可创建正式的nginx容器 #创建容器,并映射端口
docker run --name=nginx-MASTER -d -p 8000:80 -v $PWD/html:/usr/share/nginx/html -v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro -v $PWD/conf.d:/etc/nginx/conf.d nginx 再使用上面的命令在另一个虚拟机中实现注意将--name=nginx-MASTER改为nginx-BACKUP 理论上不该也行,为了好区分 ,注意开启端口8000 此时可以分别在浏览器使用虚拟机的ip 8000访问nginx,出现欢迎界面即为安装成功。 更多nginx相关配置信息见: 安装keepalived软件 keepalived软件安装在linux本地,而不是安装在docker中
#使用yum命令安装keepalived
yum install keepalived -y
#检查是否安装完成
rpm -q -a keepalived 安装位置:/etc/keepalived/keepalived.conf,后面主要修改该配置文件 修改keepalived.conf配置文件,添加注释的为重点,其他不关键 打开配置文件 vi /etc/keepalived/keepalived.conf Nginx-MASTER(主服务器)配置: global_defs {
notification_email { abc@qq.com
}
notification_email_from root@qq.com
smtp_server 182.168.1.117
smtp_connect_timeout 30
router_id 127.0.0.1 #127.0.0.1
}
vrrp_script chk_nginx {script "/etc/keepalived/nginx_pid.sh" # 检查nginx状态的脚本
interval 2 #检查时间间隔
weight 3 #权重
}
vrrp_instance VI_1 {state MASTER #备份服务器上将MASTER改为BACKUP
interface ens33 #网卡名称
virtual_router_id 66 #主备机virtual_router_id必须一致
priority 100 #备份服务上将100改为小于100,可配置成90
advert_int 1
authentication {auth_type PASS
auth_pass 1111
}
virtual_ipaddress {192.168.11.11 #有多个vip可在下面继续增加
}
track_script {chk_nginx
}
} Nginx-BACKUP(备用服务器): global_defs {
notification_email { 1826467987@qq.com
}
notification_email_from root@xuad.com
smtp_server 182.168.1.117
smtp_connect_timeout 30
router_id 127.0.0.1 #127.0.0.1
}
vrrp_script chk_nginx {script "/etc/keepalived/nginx_pid.sh" # 检查nginx状态的脚本
interval 2
weight 3
}
vrrp_instance VI_1 {state BACKUP #备份服务器上将MASTER改为BACKUP
interface ens33
virtual_router_id 66 #与master一致
priority 90 #备份服务上将100改为小于100,可配置成90
advert_int 1
authentication {auth_type PASS
auth_pass 1111
}
virtual_ipaddress {192.168.11.11 #有多个vip可在下面继续增加
}
track_script {chk_nginx
}
} 添加脚本信息 在上面的配置文件中有一行:script “/etc/keepalived/nginx_pid.sh” 即脚本位置 #转到该目录
cd /etc/keepalived/
#创建文件
touch nginx_pid.sh
#编辑文件
vi nginx_pid.sh 脚本内容: #!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl restart docker #重启docker容器
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
#如果重启失败,关闭keepalived
systemctl stop keepalived
fi
fi 两个虚拟机中都要添加
完成以上配置后分别重启两个虚拟机中的nginx和keepalived #重启nginx
docker stop nginx-MASTER
docker start nginx-MASTER
#开启keepalived
systemctl start keepalvied.service 测试,使用虚拟IP访问:http://192.168.11.11:8000,即可看到nginx欢迎界面,当关闭主nginx时: docker stop nginx-MASTER
systemctl stop keepalvied.service 该访问url依然可以访问,表示高可用实现
关于url:这里需要添加端口,因为nginx是在docker容器中,在上面也可以看到,80端口映射了宿主机的8000端口,所以要添加端口;由此推导,两个nginx的映射端口也必须一致,否则无论如何只能访问其中一个nginx
|