后端开发之Keepalived篇----Keepalived入门

Keepalive入门

安装keepalived

将下载后的keepalived的tar包上传至你的服务器上
然后解压,解压后的是源码包,需要我们编译和安装

tar -zxvf keepalived-2.0.18.tar.gz

进入源码包中,进行配置

./configure --prefix=/usr/local/keepalived --sysconf=/etc
  • prefix: keepalived安装的位置
  • sysconf: keepalived核心配置文件所在的位置,固定路径,改成其他路径 keepalived启动不了,/var/log/message中会报错

ps:配置过程中可能会出现警告信息,如下

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

需要安装libnl/libnl-3依赖

yum -y install libnl libnl-devel  

然后重新configure就可以了,接着安装

make && make install

完成后,在/usr/local/keepalived上就是启动目录,而/etc/keepalived就是配置文件的目录

配置Keepalived 主

针对master状态的Nginx,在这台机器上配置keepalived。
编辑/etc/keepalived/keepalived.conf这个文件,文件中有些内容是不需要的,下面是主要的参数例子

global_defs {
	# 路由id:当前安装keepalived的节点主机识别符,要保证全局唯一,所有keepalived的都要不同
	router_id keep_171
}

vrrp_instance VI_1 {
	# 表示状态是MASTER主机还是备用机BACKUP
	state MASTER
	# 给示例绑定的网卡,可以使用ifconfig来查看
	interface ens33
	# 保证主备节点一致即可
	virtual_router_id 51
	# 权重,master权重一般高于backup,如果是多个,就谁的权重大谁线上
	priority 100
	# 主备之间同步
	advert_int 2
	# 认证权限密码,防止非法节点进入
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	# 虚拟出来的ip,可以有多个
	virtual_ipaddress {
		192.168.1.161
	}
}

启动keepalived

/usr/local/keepalived/sbin/keepalived

这个时候你在使用ifconfig查看就会看到你的ens33网卡下多了一个ip地址

将keepalived注册 成系统服务

进入keepalived解压后的源码包中的keepalived/etc/,里面有两个子目录
init.d和sysconfig,执行下面的命令

cp init.d/keepalived /etc/init.d
cp sysconfig/keepalived /etc/sysconfig
# 重新配置系统服务
systemctl daemon-reload
# 启动keepalived服务
systemctl start keepalived.service

配置Keepalived 备

同样将keepalived的tar包上传到配用nginx所在的节点,解压安装步骤同上
进入到keepalived.conf配置文件

扫描二维码关注公众号,回复: 10072265 查看本文章
global_defs {
	router_id keep_172
}

vrrp_instance VI_1 {
	# 备用机设置为BACKUP
	state BACKUP
	interface ens33
	virtual_router_id 51
	# 权重低于MASTER
	priority 80
	advert_int 2
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		# 注意:主备两台的vip都是一样的,绑定到同一个vip
		192.168.1.161
	}
}

启动keepalived后,使用ifconfig查看,这时这台backup的机器上网卡下还不会多出一个192.168.1.161的ip,当master的机器挂掉后,就自动出现了

Keepalived配置Nginx自动重启功能

其实,这个时候我们的主备Nginx已经正常运行了,但有个不太好的地方就是,主要当主节点挂点或者宕机导致了主节点上的keepalived服务无法执行时backup节点上的nginx才能开启服务,如果仅仅是master节点上的nginx服务挂掉后是不能执行主备切换的,这样nginx服务也就挂点了无法继续执行了,也就是我们的主备配置没有用

因此,我们需要配置keepalived对nginx的自动重启,如果不能自动重启就杀掉master节点的keepalived服务,这样就能使备用nginx接替master节点工作了

首先,我们需要自己写一个Nginx重启检测脚本

vi /etc/keepalived/check_nginx_alive_or_not.sh

脚本代码如下

#!/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

需要为上面的脚本添加执行权限

配置keepalived监听nginx脚本,在keepalived.conf脚本中添加下面代码

# 定义一个类似于方法的指令块
vrrp_script check_nginx_alive {
	script "/etc/keepalived/check_nginx_alive_or_not.sh"
	interval 2 # 每隔两秒运行上一行脚本
	weight 10 # 如果机哦啊笨运行成功,则升级权重+10
}

在vrrp_instance中新增上面的指令块

track_script {
	check_nginx_alive # 指令块的名称
}

重启keepalived是的配置文件生效

实现Keepalived双主热备机制

其实,上面的配置基本能满足生产上的需要了。但是,如果使用上面的配置机制的话,需要两台硬件性能基本一致的机器,同时因为有一台是主节点,主要主节点是正常的,Nginx所接的所有请求都是通过主节点发送的,那么备用节点就一直空闲在那了,只有等主节点挂了它才替换上场,等主节点重新开启后,备用节点又被主节点替换下来了。

所以我们需要将两个节点互为主备,然后将我们的域名解析到两个vip上,这样由DNS服务器来实现对两个Nginx节点进行负载均衡,当某一个节点过掉了,那么两个vip都将请求流量导向另外一台正常的机器上。

规则:以一个vip分组归位同一个路由
主节点配置

global_defs {
	router_id keep_171
}

vrrp_instance VI_1 {
	state MASTER
	interface ens33
	virtual_router_id 51
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.1.161
	}
}

vrrp_instance VI_2 {
	state BACKUP
	interface ens33
	virtual_router_id 52
	priority 80
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.1.162
	}
}

备用节点配置

global_defs {
	router_id keep_172
}

vrrp_instance VI_1 {
	state BACKUP
	interface ens33
	virtual_router_id 51
	priority 80
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.1.161
	}
}

vrrp_instance VI_2 {
	state MASTER
	interface ens33
	virtual_router_id 52
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.1.162
	}
}

重启两个keepalived就可以了
同时要实现上面的功能需要将你的域名的DNS云解析配置成上面的两个VIP,然后对两个VIP的权重进行设置,如果是1:1就是请求流量对半分了,这些都可以在阿里云或者腾讯云上面完成的。我这里设置的两个vip都是基于我本地局域网来设的,仅供参考。

发布了118 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/104656688