欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

keepalived+nginx实现搭建双机主备+双主热备

程序员文章站 2022-05-07 15:51:19
...

准备工作

两台虚拟机 一台是192.168.31.210、一台是192.168.31.211、

keepalived+nginx实现搭建双机主备+双主热备keepalived+nginx实现搭建双机主备+双主热备

安装nginx 修改index 好分辨

keepalived+nginx实现搭建双机主备+双主热备keepalived+nginx实现搭建双机主备+双主热备

 

一、安装Keepalived

两台都需要安装Keepalived 唯一不同的就是 keepalived配置文件

https://keepalived.org/

 

keepalived+nginx实现搭建双机主备+双主热备

 

下载 解压

tar -zxvf keepalived-2.0.18.tar.gz

进入 keepalived-2.0.18

执行

./configure --prefix=/usr/local/keepalived --sysconf=/etc

安装和编译

make && make install

 如果报 这个错 install libnl/libnl-3

需要提前安装在执行

yum -y install libnl-devel

 

这个用systemctl启动  如果你想直接进入 keepalived  直接启动也可以

./keepalived 

 

 

当前目录 进入

cd keepalived-2.0.18/keepalived/etc

 把keepalived的配置放到etc中

cp init.d/keepalived /etc/init.d/ &&
cp sysconfig/keepalived /etc/sysconfig/

 重新加载配置文件

systemctl daemon-reload

 启动keeplived

systemctl start keepalived.service

 

另一台服务器做相同操作

 

二、双机主备

原理通过虚拟ip访问 一旦主机挂了,就使用备机

坏处是 备机 不做其他事情,非常浪费资源

keepalived+nginx实现搭建双机主备+双主热备

配置keepalived核心配置文件

192.168.31.210服务器

check_nginx_alive_or_not.sh 是自动启动nginx shell脚本

keepalived.conf是keepalived核心配置文件

 

keepalived+nginx实现搭建双机主备+双主热备

 

1、vim check_nginx_alive_or_not.sh

这里的/usr/local/nginx/sbin/nginx 根据自己nginx路径修改

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
	/usr/local/nginx/sbin/nginx
	# 等待一小会在此检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
	sleep 3
	if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
		killall keepalived
	fi
fi

2、然后chmod +x check_nginx_alive_or_not.sh 添加权限

3、vim keepalived.conf

这里的网卡配置interface ens33 用ip addr 查看

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keeplived节点主机的标识符,全局唯一
   router_id keep_nginx1
}

#执行nginx启动判断脚本
vrrp_script check_nginx_alive {
	script "/etc/keepalived/check_nginx_alive_or_not.sh"
	interval 2 #每隔两秒运行上一行脚本
	weight 10	#如果脚本运行成功,则升级权重+10
	#weight -10	#如果脚本运行失败,则降低权重-10
}

#计算机节点
vrrp_instance VI_1 {
    
    #标识的状态,当前nginx的主节点,MASTER/BACKUP
    state MASTER
    #当前实例绑定的网卡
    interface ens33
    
    #保证主备节点一致
    virtual_router_id 51
    
    #优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    
    #主备之间同步检查的时间间隔,默认1s
    advert_int 1

    #认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }

	#调用脚本
    track_script {
	check_nginx_alive #追踪  nginx脚本
    }
 
    #这里的是虚拟ip 字段要和自己的服务器在同一字段 比如我的服务器ip是 192.168.31.210 
    #所有前面三个要一样 192.168.31.
    virtual_ipaddress {
        192.168.31.161
    }
}

主机就配置好了

备机的配置和上面一样  唯一不同的是权重和状态

 另一台192.168.31.211服务器配置

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keeplived节点主机的标识符,全局唯一
   router_id keep_nginx2
}

vrrp_script check_nginx_alive {
	script "/etc/keepalived/check_nginx_alive_or_not.sh"
	interval 2 #每隔两秒运行上一行脚本
	weight 10	#如果脚本运行成功,则升级权重+10
	#weight -10	#如果脚本运行失败,则降低权重-10
}

#计算机节点
vrrp_instance VI_1 {
    
    #标识的状态,当前nginx的主节点,MASTER/BACKUP
    state BACKUP
    #当前实例绑定的网卡
    interface ens33
    
    #包装主备节点一致
    virtual_router_id 51
    
    #优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    
    #主备之间同步检查的时间间隔,默认1s
    advert_int 1

    #认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 
    track_script {
        check_nginx_alive #追踪  nginx脚本
    }
   
    virtual_ipaddress {
        192.168.31.161
    }
}

 

 

三、 双主热备

他弥补了双主机的缺点,可以两台都进行运行

用户访问之后,DNS访问轮训,随机访问那个虚拟ip

这里用了两个虚拟ip 一个虚拟ip绑定两个nginx 当一个keepalived挂了之后另一个绑定两个

就可以实现两个服务器都没有浪费资源

keepalived+nginx实现搭建双机主备+双主热备

 

192.168.31.210 服务器配置 

多了一个VI_2

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keeplived节点主机的标识符,全局唯一
   router_id keep_nginx1
}

vrrp_script check_nginx_alive {
	script "/etc/keepalived/check_nginx_alive_or_not.sh"
	interval 2 #每隔两秒运行上一行脚本
	weight 10	#如果脚本运行成功,则升级权重+10
	#weight -10	#如果脚本运行失败,则降低权重-10
}

#计算机节点
vrrp_instance VI_1 {
    
    #标识的状态,当前nginx的主节点,MASTER/BACKUP
    state MASTER
    #当前实例绑定的网卡
    interface ens33
    
    #包装主备节点一致
    virtual_router_id 51
    
    #优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    
    #主备之间同步检查的时间间隔,默认1s
    advert_int 1

    #认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
   
    #调用脚本
    track_script {
	check_nginx_alive #追踪  nginx脚本
    }
   
    virtual_ipaddress {
        192.168.31.161
    }
}

#计算机节点
vrrp_instance VI_2 {

    #标识的状态,当前nginx的主节点,MASTER/BACKUP
    state BACKUP
    #当前实例绑定的网卡
    interface ens33

    #包装主备节点一致
    virtual_router_id 52

    #优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80

    #主备之间同步检查的时间间隔,默认1s
    advert_int 1

    #认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    #调用脚本
    track_script {
        check_nginx_alive #追踪  nginx脚本
    }   
    
    virtual_ipaddress {
        192.168.31.162
    }
}

重启

systemctl restart keepalived.service

 

192.168. 31.211服务器配置

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keeplived节点主机的标识符,全局唯一
   router_id keep_nginx2
}

vrrp_script check_nginx_alive {
	script "/etc/keepalived/check_nginx_alive_or_not.sh"
	interval 2 #每隔两秒运行上一行脚本
	weight 10	#如果脚本运行成功,则升级权重+10
	#weight -10	#如果脚本运行失败,则降低权重-10
}

#计算机节点
vrrp_instance VI_1 {
    
    #标识的状态,当前nginx的主节点,MASTER/BACKUP
    state BACKUP
    #当前实例绑定的网卡
    interface ens33
    
    #包装主备节点一致
    virtual_router_id 51
    
    #优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    
    #主备之间同步检查的时间间隔,默认1s
    advert_int 1

    #认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 
    track_script {
        check_nginx_alive #追踪  nginx脚本
    }
   
    virtual_ipaddress {
        192.168.31.161
    }
}


vrrp_instance VI_2 {

    #标识的状态,当前nginx的主节点,MASTER/BACKUP
    state MASTER

    interface ens33

    #包装主备节点一致
    virtual_router_id 52

    #优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100

    #主备之间同步检查的时间间隔,默认1s
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        check_nginx_alive #追踪  nginx脚本
    }

    virtual_ipaddress {
        192.168.31.162
    }
}

重启

systemctl restart keepalived.service

 

测试模拟

访问两个虚拟ip 正在显示

keepalived+nginx实现搭建双机主备+双主热备keepalived+nginx实现搭建双机主备+双主热备

 

然后我们关闭一台 我关闭了211这台服务器

两台服务器都正常显示

但是区别 192.168.31.162 他访问的是另一台nginx的内容 所以 我们这里模拟成功 没有任何问题

systemctl stop keepalived.service

keepalived+nginx实现搭建双机主备+双主热备keepalived+nginx实现搭建双机主备+双主热备

keepalived+nginx实现搭建双机主备+双主热备

相关标签: 集群部署