双机主备Keepalived配置Nginx高可用,实现7x24不间断服务

Keepalived安装部署

  1. 下载地址:点击下载:https://www.keepalived.org/download.html
  2. 把压缩包上传到服务器,再对keepalived进行解压 :tar -zxvf keepalived-2.0.18.tar.gz 得到源文件要解压编译和安装。
  3. 解压后进入到解压出来的目录,看到会有 configure文件 ,那么就可以做配置了(配置安装和nginx一模一样)
    在这里插入图片描述
  4. 配置keepalived 的安装目录和核心配置目录 ./configure --prefix=/var/temp/keepalived --sysconf=/etc prefix 为 安装目录地址 sysconf 为核心配置目录,我们keepalived的配置就到etc下。注意一定要配置到etc下,不然后期配置时可能会出现配置文件找不到等情况。
  5. 配置好后,使用make && make install 来编译和安装。
  6. 看到/var/temp/keepalived/有bin、sbin、share 和/etc/keepalived下有 keepalived.conf、samples 表示安装成功!
    在这里插入图片描述请添加图片描述

主从配置 Keepalived

配置主从时特别注意

  1. vrrp_instance 下的state 只有一个主为MASTER ,其他都是 BACKUP
  2. global_defs 下的 router_id 相当于这台机器的唯一标志,不能重复
  3. vrrp_instance 下的interface 网卡名称必须检查是否和自己网卡一样(ip addr 检查)双机主备Keepalived配置Nginx高可用,实现7x24不间断服务_第1张图片
  4. vrrp_instance 下的 priority 权重必须小于MASTER 的权重,选举谁高选谁
  5. vrrp_instance 下的 authentication 和 virtual_router_id 所有节点都保持一致即可
  6. vrrp_instance 下的 virtual_ipaddress 是虚拟ip地址,设置一个即可,它会出现在MASTER 上运行,当MASTER 宕机则会转移到权重高的BACKUP上,来维持高可用,当MASTER 恢复,虚拟ip网关转移到MASTER节点上。

下面为 Keepalived配置
通过命令 vim keepalived.conf 打开配置文件

! Configuration File for keepalived

global_defs {
     
    #其他都是邮件警告发邮件的
    #notification_email {
     
	#  [email protected]
	#  [email protected]
	#  [email protected]
	#}
	#notification_email_from [email protected]
	#smtp_server 192.168.200.1
	#smtp_connect_timeout 30
	
	# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
	router_id keepa_master_246 
	
	# vrrp_skip_check_adv_addr
	# vrrp_strict
	# vrrp_garp_interval 0
	# vrrp_gna_interval 0
}
#实例组
vrrp_instance VI_1 {
     
    ## 表示状态是MASTER主机还是备用机BACKUP
    state MASTER
    # 该实例绑定的网卡 (查询你的网卡信息 ip addr)
    interface eth0
    # 保证主备节点一致即可 
    virtual_router_id 51
   # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 100
   # 主备之间同步检查时间间隔,单位秒 心跳
    advert_int 1
   # 认证权限密码,防止非法节点进入
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
   # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
     
    	# 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.180
    }
}
#默认配置中下面还有配置删除即可
# .....

下面为 Keepalived配置 (一般为另一台服务器中重新上面的操作)
通过命令 vim keepalived.conf 打开配置文件

! Configuration File for keepalived

global_defs {
     
    #其他都是邮件警告发邮件的
    #notification_email {
     
	#  [email protected]
	#  [email protected]
	#  [email protected]
	#}
	#notification_email_from [email protected]
	#smtp_server 192.168.200.1
	#smtp_connect_timeout 30
	
	# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
	router_id keepa_backup_293 
	
	# vrrp_skip_check_adv_addr
	# vrrp_strict
	# vrrp_garp_interval 0
	# vrrp_gna_interval 0
}
vrrp_instance VI_1 {
     
    ## 表示状态是MASTER主机还是备用机BACKUP
    state BACKUP
    # 该实例绑定的网卡 (查询你的网卡信息 ip addr)
    interface ens33
    # 保证主备节点一致即可 
    virtual_router_id 51
   # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 80
   # 主备之间同步检查时间间隔,单位秒 心跳
    advert_int 1
   # 认证权限密码,防止非法节点进入
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
   # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
     
    	# 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.180
    }
}
#默认配置中下面还有配置删除即可
# .....

双机主备Keepalived配置文件完成后实现高可用

1.分别启动Keepalived
进入你的安装目录 /var/temp/keepalived/sbin 下 ./keepalived 来启动
2.检查启动成功没有
到你的MASTER服务器上输入ip addr 你会发现多了你的虚拟ip的网关,网卡也是你设置的,这说明已经成功了!,到这里已经可以完成Keepalived高可用保证。
双机主备Keepalived配置Nginx高可用,实现7x24不间断服务_第2张图片

开始使用Keepalived追踪nginx实现高可用

我们先要写一个shell脚本重启nginx 先创建vim restart_nginx.sh文件

#/var/temp/nginx/sbin/nginx 为nginx启动地址
A=`ps -C nginx --no-header |wc -l`
#判断nginx是的宕机,如果宕机了,重试重启
if [ $A -eq 0 ];then
        /var/temp/nginx/sbin/nginx
        #等待一会时间再检查是否重启了,nginx如果还没还有重启这停止keepalived,开启备用机
        sleep 3
        if [ $A -eq 0 ];then
                killall keepalived
        fi
fi

保存之后可能会出现权限不够 -bash: ./restart_nginx.sh: Permission denied
我们通过chmod +x restart_nginx.sh 赋予权限后运行试试,可以先把nginx关闭再使用脚本运行。前后测试一下是否可以启动nginx。

设置重启脚本到keepalived.conf

到keepalived添加vrrp_script 设置脚本

#vrrp_script 设置脚本
vrrp_script restart_nginx_alive{
     
	#要运行脚本地址
	script "/etc/keepalived/restart_nginx.sh"
	interval 2 #每隔两秒运行上一行脚本
	weight 10 #如果脚本运行成功,则升权 +10
	#weight -10 #如果脚本运行失败,则升权 -10
}

#vrrp_instance 中添加调用 track_script
vrrp_instance VI_1 {
     
#追踪script中脚本
	track_script{
     
		restart_nginx_alive 
	}
}

添加到配置
双机主备Keepalived配置Nginx高可用,实现7x24不间断服务_第3张图片
重启Keepalived使得配置文件生效

systemctl restart keepalived

你可以去主动尝试关闭nginx, keepalived它会自动帮你重新启动nginx.

双主热备方案更加节约资源
结构图:双机主备Keepalived配置Nginx高可用,实现7x24不间断服务_第4张图片
通过云解析dns 把虚拟ip 配置到dns上,配置二个一样的解析规则,来搭建dns轮训。

第一台服务器

! Configuration File for keepalived

global_defs {
     
	# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
	router_id keepa_293 

}
#一组实例
vrrp_instance VI_1 {
     
    ## 表示状态是MASTER主机还是备用机BACKUP
    state BACKUP
    # 该实例绑定的网卡 (查询你的网卡信息 ip addr)
    interface ens33
    # 保证主备节点一致即可 
    virtual_router_id 51
   # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 80
   # 主备之间同步检查时间间隔,单位秒 心跳
    advert_int 1
   # 认证权限密码,防止非法节点进入
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
   # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
     
    	# 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.180
    }
}

#二组实例
vrrp_instance VI_2 {
     
    ## 表示状态是MASTER主机还是备用机BACKUP
    state MASTER #改变
    # 该实例绑定的网卡 (查询你的网卡信息 ip addr)
    interface ens33 
    # 保证主备节点一致即可 
    virtual_router_id 52  #改变
   # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 100 #改变
   # 主备之间同步检查时间间隔,单位秒 心跳
    advert_int 1
   # 认证权限密码,防止非法节点进入
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
   # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
     
    	# 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.181 #改变
    }
}

第二台服务器

! Configuration File for keepalived

global_defs {
     
	# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
	router_id keepa_252
}
#一组实例
vrrp_instance VI_1 {
     
    ## 表示状态是MASTER主机还是备用机BACKUP
    state MASTER
    # 该实例绑定的网卡 (查询你的网卡信息 ip addr)
    interface ens33
    # 保证主备节点一致即可 
    virtual_router_id 51
   # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 100
   # 主备之间同步检查时间间隔,单位秒 心跳
    advert_int 1
   # 认证权限密码,防止非法节点进入
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
   # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
     
    	# 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.180
    }
}

#二组实例
vrrp_instance VI_2 {
     
    ## 表示状态是MASTER主机还是备用机BACKUP
    state BACKUP #改变
    # 该实例绑定的网卡 (查询你的网卡信息 ip addr)
    interface ens33 
    # 保证主备节点一致即可 
    virtual_router_id 52  #改变
   # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 80 #改变
   # 主备之间同步检查时间间隔,单位秒 心跳
    advert_int 1
   # 认证权限密码,防止非法节点进入
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
   # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
     
    	# 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.181 #改变
    }
}

其实就是多出来一个vrrp_instance 实例配置 二个机器实例相互互为主备关系,
如 171机器VI_1为主 ,VI_2 为备,195机器VI_1为备,VI_2 为主,dns解析配置的是这二台机器的虚拟vip进行轮训减少资源的浪费

你可能感兴趣的:(Nginx)