概述
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
功能:
- 管理LVS负载均衡软件
- 实现LVS集群节点的健康检查中
- 作为系统网络服务的高可用性(failover)
原理:
- Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。
- Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
- VRRP ,全称Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。
VRRP的工作原理:
- VRRP的出现是为了解决静态路由的单点故障
- VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的
- VRRP用 P多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信
- 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
- VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码
Keepalived的工作原理:
- Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
- 在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
1.keepalived配置
这里使用docker compose实现nginx的主备模式,docker部署Keepalived一定要给容器最高的权限,因为Keepalived对网络权限要求比较高。
--privileged 指定容器是否是特权容器。这里开启特权模式。
--cap-add SYS_ADMIN 添加系统的权限。
1.创建nginx_check.sh
#!/bin/bash
A=`ps -ef | grep nginx: | grep -v grep | wc -l`
if [ $A -eq 0 ];then
nginx -c /etc/nginx/conf/nginx.conf
sleep 2
if [ `ps -ef | grep nginx: | grep -v grep | wc -l` -eq 0 ];then
#killall keepalived
ps -ef|grep keepalived|grep -v grep|awk '{print $2}'|xargs kill -9
fi
fi
2. 创建master的keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2 #指定脚本执行的间隔。单位是秒。默认为1s。
weight -20 #调整优先级。默认为2.如果脚本执行失败(退出状态码为非0),weight小于0,则priority减少。
fall 3 #执行失败多少次才认为失败。
rise 3 #执行成功多少次才认为是成功。
user root #加上用户名,使用root用户登录的话,
}
vrrp_instance VI_1 {
state MASTER #指定该keepalived节点的初始状态
interface eth0 #设置实例绑定的网卡
virtual_router_id 2
priority 101 #指定优先级,优先级高的将成为MASTER
advert_int 2 #检查间隔,默认1秒
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.0.100/16 #设置VIP地址
}
track_script {
chk_nginx
}
}
3. 创建backup的keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2 #指定脚本执行的间隔。单位是秒。默认为1s。
weight -20 #调整优先级。默认为2.如果脚本执行失败(退出状态码为非0),weight小于0,则priority减少。
fall 3 #执行失败多少次才认为失败。
rise 3 #执行成功多少次才认为是成功。
user root #加上用户名,使用root用户登录的话,
}
vrrp_instance VI_1 {
state BACKUP #指定该keepalived节点的初始状态
interface eth0 #设置实例绑定的网卡
virtual_router_id 2
priority 99 #指定优先级,优先级高的将成为MASTER
advert_int 2 #检查间隔,默认1秒
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.0.100/16 #设置VIP地址
}
track_script {
chk_nginx
}
}
2.构建docker
直接使用dockefile构建镜像,首先需要安装nginx和keepalived,nginx使用apt-get进行安装,keepalived使用make方式安装。
1.配置dockerfile
keepalived下载:https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
#基于ubuntu构建的镜像
from ubuntu
user root
#nginx install
run apt-get install -y nginx
run mkdir /etc/nginx/conf
run mkdir /etc/nginx/servers
run mkdir /etc/nginx/html
run mkdir /etc/nginx/logs
copy nginx.conf /etc/nginx/conf
copy index.html /etc/nginx/html
run mv /etc/apt/sources.list /etc/apt/alibaba_sources.list
run mv /etc/apt/ubuntu_sources.list /etc/apt/sources.list
run apt-get update
#keepalived install
run apt-get install -y gcc make libssl-dev
run apt-get install -y iproute2 rsyslog
add keepalived/keepalived-2.2.7.tar.gz /
workdir /keepalived-2.2.7
run ./configure --prefix=/usr/local/keepalived
run make && make install
run mkdir /etc/keepalived
run mkdir /etc/sysconfig/
run cp /keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/init.d/
run cp /keepalived-2.2.7/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
run cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
copy keepalived/nginx_check.sh /etc/keepalived
copy keepalived/keepalived.conf /etc/keepalived
run chmod 644 /etc/keepalived/keepalived.conf
run chmod +x /etc/keepalived/nginx_check.sh
#set start shell script
run echo "#!/bin/bash" > /startup.sh
run echo "nohup rsyslogd &" >> /startup.sh
run echo "sleep 2" >> /startup.sh
# run echo "nginx -c /etc/nginx/conf/nginx.conf" >> /startup.sh
run echo "nohup keepalived &" >> /startup.sh
run chmod +x /startup.sh
run chmod 644 /etc/nginx/conf/nginx.conf
workdir /
cmd /startup.sh && tail -f /dev/null
2.docker build
docker build -t docker_nginx ./ -f docker_nginx
3.配置docker-composes
因为上面的构建的nginx镜像只有maser的keepalived.conf,所以当backup的nginx容器启动完成后就需要将backup的keepalived.conf拷贝到backup的nginx容器上。
version: "3.0"
volumes:
nginxbackup-data:
external: true
networks:
mynetwork:
external: true
services:
nginxservice:
image: docker_nginx
container_name: docker_nginx
networks:
- mynetwork
volumes:
- C:/MyTemp/mydocker/nginx/conf:/etc/nginx/conf
cap_add:
- NET_ADMIN
nginxservice_backup:
image: docker_nginx
container_name: docker_backup
networks:
- mynetwork
volumes:
- C:/MyTemp/mydocker/nginx/backup_conf:/etc/nginx/conf
- nginxbackup-data:/etc/keepalived
cap_add:
- NET_ADMIN
4.启动
#启动创建容器
docker-compose -f cloud-nginx.yml up -d
#拷贝bakckup
docker-compose -f cloud-nginx.yml cp keepalived_backup.conf nginxservice_backup:/etc/keepalived/keepalived.conf
docker-compose -f cloud-nginx.yml exec nginxservice_backup chmod 644 /etc/keepalived/keepalived.conf
启动完成之后查看msater容器的ip信息,可以看到vvip已经绑定上
然后请求nginx,可以看到确实master的nginx在运行,访问172.18.0.100:8080/returnok/的接口
然后停止master的容器,可以看到vvip已经从master转到backup上了
再次访问172.18.0.100:8080/returnok/
参考:
docker 下keepalived Nginx配置 - 知乎
keepalived配置和使用_我是甲乙丙的博客-CSDN博客_keepalived配置
keepalived部署与配置 - 日行一善g - 博客园
最后
以上就是柔弱鲜花为你收集整理的Nginx 安装keepalived1.keepalived配置2.构建docker3.配置docker-composes4.启动的全部内容,希望文章能够帮你解决Nginx 安装keepalived1.keepalived配置2.构建docker3.配置docker-composes4.启动所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复