keepalived 实现高可用
前言: 互联网行业的三高
高可用 高性能 高并发 所以基于第一点,高可用。nginx作为高性能的,反向代理服务器。如果只有一个节点就无法做到高可用,假如就一个节点。 如果这个时候因为一些特殊情况,这个节点挂了。导致我们后端和前台提供的服务用户不可用。这个时候无论我们后端架构和前端架构做的在优秀也于事无补,因为用户根本访问不到。 所以基本上部署两个节点,主节点和备用节点。这个时候问题就来了。就算部署了两个节点,前端访问的时候,总不可能让前端调用两个地址把!所以基于这一点,使用keepalived的 vrrp 协议进行设置 虚拟ip。然后前端只需要知道这个虚拟ip即可,具体使用的是哪个nginx,完全由keepalived决定。
环境准备
-
两台2核心2G的虚拟机 ,系统 centos 8
- master 主节点虚拟机
- slave 备用节点虚拟机
-
ip
- master 192.168.96.124
- slave 192.168.96.122
- vip 192.168.96.250 // 虚拟ip,用于访问nginx 使用
-
软件环境
- nginx
- keepalived
安装nginx
-
修改yum 镜像源
vim /etc/yum.repos.d/nginx.repo
# nginx.repo(删除原理的镜像源,把下面的复制进去) [nginx] name=nginx baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 -
更新镜像源
yum update
安装nginx-master
install
yum install nginx -y
启动
systemctl start nginx
安装nginx-Slave
install
yum install nginx -y
启动
systemctl start nginx
默认配置文件位置:(主,备配置文件一致,都是在下面这个位置)
- 可执行文件:/usr/sbin/nginx
- 配置文件nginx.conf:/etc/nginx
- 用户自定义配置文件:/etc/nginx/conf.d
- 默认主页:/usr/share/nginx/html
安装keepalived
Master(主)
install
yum -y install keepalived
启动
systemctl start keepalived
config(修改配置)
-
keepalived.conf(默认抢占式)
1 查询网卡名称 ip addr 2 vim /etc/keepalived/keepalived.conf 3 添加nginx 状态检查脚本 vrrp_script chk_http_ port { script "/usr/local/src/nginx_check.sh" #检测脚本,这个脚本在下面第二步进行创建 interval 1 # (检测脚本执行的间隔)1s weight -21 #权重,如果这个脚本检测为真,服务器权重+2 } 4 修改 varrp_instance_VI_1的内容,为下面内容 vrrp_instance VI_1 { state MASTER # 主节点MASTER interface ens33 # ip addr 查询到的网卡信息 virtual_router_id 51 priority 100 # 权重信息默认 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.96.250 # 设置虚拟ip } # 监听nginx 脚本 track_script { chk_http_ port } } -
检查nginx状态配置
1 cd /usr/local/src //切换到src目录下,执行下面vim 创建脚本 vim nginx_check.sh # 复制如下内容到 nginx_check.sh 里面 A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then # 当nginx 关闭,就立刻关闭 keepalived,用于转移虚拟ip到备用机上。 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then systemctl stop keepalived fi fi 2 更改 nginx_check.sh 执行权限 chmod +x nginx_check.sh重启keepalived
systemctl restart keepalived
Slave(备)
install
yum -y install keepalived
启动
systemctl start keepalived
config(修改配置)
-
keepalived.conf(默认抢占式)
1 询网卡名称 ip addr 2vim /etc/keepalived/keepalived.conf 3 添加nginx 状态检查脚本 vrrp_script chk_http_ port { script "/usr/local/src/nginx_check.sh" #检测脚本,这个脚本和master 一样。参考下面步骤 5 把文件复制到当前机器 interval 1 # (检测脚本执行的间隔)1s weight -21 #权重,如果这个脚本检测为真,服务器权重+2 } 4 修改 varrp_instance_VI_1的内容,为下面内容 vrrp_instance VI_1 { state BACKUP # 备节点 BACKUP interface ens33 # ip addr 查询到的网卡信息 virtual_router_id 51 priority 90 # 降低权重 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.96.250 # 设置虚拟ip } # 监听nginx 脚本 track_script { chk_http_ port } } 5 从新登录mast机器上,切到如下目录 cd /usr/local/src/ 执行如下命令,进行把当前目录下的检查nginx 状态脚本复制到备用机器上 scp ./nginx_check.sh root@192.168.96.124:/usr/local/src/ 6 改 nginx_check.sh 执行权限 chmod +x nginx_check.sh重启keepalived
systemctl restart keepalived
效果
正常访问虚拟ip
Master 宕机访问
关闭maser nginx
systemctl stop nginx
自动切换到备用机上
Master 恢复,访问再次被抢回(这就是抢占式)
-
启动nginx
systemctl start nginx
-
启动keepalived
systemctl start keepalived
再次访问nginx-已经切回master节点
感谢阅读~本次关于nginx+keepalived(抢占式)实现服务高可用,总结到此结束。