docker 安装keepalive

news2024/11/18 6:28:51

docker 安装keepalive

1.Keepalived 简介

Keepalived 是 Linux 下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,

它与 HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat 是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,

与 HeartBeat 相比,Keepalived 主要是通过虚拟路由冗余来实现高可用功能,虽然它没有 HeartBeat 功能强大,但是 Keepalived 部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。

Keepalived 的高可用通过虚拟ip(vip)来实现,虚拟 ip 可以漂移。

2.Keepalived 配置文件

global_defs {                                     #全局定义部分
    notification_email {                          #设置报警邮件地址,可设置多个
        acassen@firewall.loc                      #接收通知的邮件地址
    }
    notification_email_from test0@163.com         #设置 发送邮件通知的地址
    smtp_server smtp.163.com                      #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)
    smtp_connect_timeout 30                       #设置 连接 smtp server的超时时间
    router_id LVS_DEVEL                           #主机标识,用于邮件通知
    vrrp_skip_check_adv_addr
    vrrp_strict                                   #严格执行VRRP协议规范,此模式不支持节点单播
    vrrp_garp_interval 0
    vrrp_gna_interval 0
    script_user keepalived_script                 #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用root
    enable_script_security                        #如果路径为非root可写,不要配置脚本为root用户执行。
}

vrrp_script chk_nginx_service {                   #VRRP 脚本声明
    script "/etc/keepalived/chk_nginx.sh"         #周期性执行的脚本
    interval 3                                    #运行脚本的间隔时间,秒
    weight -20                                    #权重,priority值减去此值要小于备服务的priority值
    fall 3                                        #检测几次失败才为失败,整数
    rise 2                                        #检测几次状态为正常的,才确认正常,整数
    user keepalived_script                        #执行脚本的用户或组
}

vrrp_instance VI_1 {                              #vrrp 实例部分定义,VI_1自定义名称
    state MASTER                                  #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
    interface ens33                               #网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
    virtual_router_id 51                          #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
    priority 100                                  #定义优先级,数字越大,优先级越高。
    advert_int 1                                  #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
    authentication {                              #设置验证类型和密码,两个节点必须一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                           #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.119.130
    }
    track_script {                                #脚本监控状态
        chk_nginx_service                         #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
    }
    notify_master "/etc/keepalived/start_haproxy.sh start"  #当前节点成为master时,通知脚本执行任务
    notify_backup "/etc/keepalived/start_haproxy.sh stop"   #当前节点成为backup时,通知脚本执行任务
    notify_fault  "/etc/keepalived/start_haproxy.sh stop"   #当当前节点出现故障,执行的任务;
}

## 虚拟服务器virtual_server定义块 ,虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。 该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块。
virtual_server 192.168.119.130 80  {          #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
    delay_loop 6                              #每隔6秒查询realserver状态
    lb_algo rr                                #后端调试算法(load balancing algorithm)
    lb_kind DR                                #LVS调度类型NAT/DR/TUN
    #persistence_timeout 60                   同一IP的连接60秒内被分配到同一台realserver
    protocol TCP                              #用TCP协议检查realserver状态
    real_server 192.168.119.120 80 {
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }
    }
    real_server 192.168.119.121 80 {
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }
    }
}

3.keepalive搭建

节点网卡主备节点Vip
192.168.56.100enp0s3主节点192.168.56.120
192.168.56.101enp0s3备用节点192.168.56.120

默认安装了docker 和docker-compose

2台机器都执行 开启防火墙新增目录

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"

firewall-cmd --reload
firewall-cmd --list-all
systemctl restart docker

3.1.简单搭建

3.1.1 主节点搭建
docker run -d \
--name keepalived-master \
--net=host \
-e KEEPALIVED_INTERFACE="enp0s3" \
-e KEEPALIVED_PRIORITY=100 \
-e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['192.168.56.100', '192.168.56.101']" \
-e KEEPALIVED_VIRTUAL_IPS="192.168.56.120" \
-e KEEPALIVED_STATE="MASTER" \
--privileged=true \
osixia/keepalived:stable --loglevel debug
3.1.2 备用节点搭建
docker run -d \
--name keepalived-backup \
--net=host \
-e KEEPALIVED_INTERFACE="enp0s3" \
-e KEEPALIVED_PRIORITY=50 \
-e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['192.168.56.100', '192.168.56.101']" \
-e KEEPALIVED_VIRTUAL_IPS="192.168.56.120" \
-e KEEPALIVED_STATE="BACKUP" \
--privileged=true \
osixia/keepalived:stable --loglevel debug

3. 2. 创建配置文件搭建

3.2.1 主节点搭建
# 1. 创建配置文件
mkdir -p /home/keepalived/conf/ && \
cat > /home/keepalived/conf/keepalived.conf<<EOF
global_defs {
  default_interface enp0s3
}

vrrp_instance VI_1 {
  interface enp0s3

  state MASTER
  virtual_router_id 51
  priority 100
  nopreempt

  unicast_peer {
    192.168.56.100
    192.168.56.101
  }

  virtual_ipaddress {
     192.168.56.120
  }

  authentication {
    auth_type PASS
    auth_pass d0cker
  }

  notify "/container/service/keepalived/assets/notify.sh"
}
EOF

# 2. docker启动
docker run -d \
--name keepalived-master \
-v /home/keepalived/conf/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
--net=host \
--privileged=true \
osixia/keepalived:stable --loglevel debug --copy-service

日志

在这里插入图片描述

使用 ip a 命令,发现 enp0s3网卡多了个 ip。

在这里插入图片描述

3.2.2 备用节点搭建
# 1. 创建配置文件
mkdir -p /home/keepalived/conf/ && \
cat > /home/keepalived/conf/keepalived.conf<<EOF
global_defs {
  default_interface enp0s3
}

vrrp_instance VI_1 {
  interface enp0s3

  state BACKUP
  virtual_router_id 51
  priority 100
  nopreempt

  unicast_peer {
    192.168.56.100
    192.168.56.101
  }

  virtual_ipaddress {
     192.168.56.120
  }

  authentication {
    auth_type PASS
    auth_pass d0cker
  }

  notify "/container/service/keepalived/assets/notify.sh"
}
EOF


# 2. docker启动
docker run -d \
--name keepalived-backup \
-v /home/keepalived/conf/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
--net=host \
--privileged=true \
osixia/keepalived:stable --loglevel debug --copy-service

日志

在这里插入图片描述

此时通过 ip a 命令查看,发现并没有 vip。

在这里插入图片描述

3.3. 故障模拟

通过在主节点上模拟 keepalived 故障,使用命令 docker stop keepalived-master,可以看见 vip 漂移到备用节点。

在这里插入图片描述

4.其他说明

  • 镜像说明

osixia/keepalived 镜像的源码地址:docker-keepalived

  • vip 不释放问题

如果出现两个节点都存在 vip ,且程序退出后都不自动释放 vip,使用命令 ip addr del 192.168.56.120/24 dev enp0s3 进行删除。

  • 当使用脚本检测时执行,节点故障后需要关闭keepalived
cat > check8080.sh << EOF
#!/bin/bash
count=`netstat -apn | grep 8080 | wc -l`
if [ $count -gt 0 ]; then
    exit 0
else
   sleep 2 
   count=`netstat -apn | grep 8080 | wc -l`
   if [ $count -gt 0 ]; then
   pkill keepalived
   fi 
   exit 1
fi
EOF




cat > keepalived.conf << EOF

global_defs {
  default_interface enp0s3
}

vrrp_script check8081
{
    script "/checksh/check8081.sh" 
	# 这个地址写的事容器内脚本路径
    interval 2
    weight -30
}
vrrp_instance VI_1 {
  interface enp0s3

  state BACKUP
  virtual_router_id 51
  priority 100
  nopreempt
  advert_int 1
  
  virtual_ipaddress {
     192.168.56.120
  }
  authentication {
    auth_type PASS
    auth_pass d2cker
  }
  track_script {
    script "/checksh/check8080.sh" 
  }
  notify "/container/service/keepalived/assets/notify.sh"
}

EOF


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1309221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stateflow之广播时间及案例分析

目录 前言 1.何谓广播事件&#xff1f;作用是啥&#xff1f; 2.本地广播事件 3.直接广播事件 前言 虽然广播时间官方文档以及好多博主已经做出介绍&#xff0c;但个人在阅读的时候总是觉得费解&#xff0c;要么直接按官方内容陈述&#xff0c;要么缺少案例分析讲解&#xf…

节流防抖:提升前端性能的秘密武器(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

flex布局,flex-direction, justify content, align-content

目录 flex-direction justify content&#xff1a; flex-wrap align-items align-content flex-flow flex:1 align-self order属性定义项目排列顺序 已知html文件为&#xff1a; <div class"given"><span>1</span><span>2</span…

大数据云计算——Docker环境下部署Hadoop集群及运行集群案列

大数据云计算——Docker环境下部署Hadoop集群及运行集群案列 本文着重介绍了在Docker环境下部署Hadoop集群以及实际案例中的集群运行。首先&#xff0c;文章详细解释了Hadoop的基本概念和其在大数据处理中的重要性&#xff0c;以及为何选择在Docker环境下部署Hadoop集群。接着&…

Ps:认识 RGB 曲线

曲线 Curves本质上是用于调整通道的命令&#xff0c;因此在不同的颜色模式&#xff08;比如&#xff0c;RGB、CMYK、Lab、灰度、双色调等&#xff09;下有着不同的表现和操作方式。颜色模式的不同影响了曲线的坐标系、可调整的通道以及可实现的效果。 在 RGB 颜色模式下的曲线&…

Vue之Computed(计算属性)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

IDEA之设置项目包的结构层级为eclipse默认样式

idea默认项目包的结构层级如下: 想修改成eclipse默认的那种样式&#xff0c;设置步骤如下: 1.点击下图中红框图标进行设置 2.选择 Tree Appearance&#xff0c;取消勾选 Compact Middle Packages 3.勾选红框里的两个选项&#xff0c;Flatten Packages 和 Hide Empty Middle Pa…

Python数据科学视频讲解:Python序列的概念及通用操作

2.10 Python序列的概念及通用操作 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解2.10节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;…

机器学习算法新手入门指南

AI算法的种类在人工智能领域中非常丰富&#xff0c;而且多样化&#xff0c;AI算法利用数学、统计学和计算机科学等领域的原理和方法&#xff0c;通过模拟人类智能和学习能力来解决各种复杂的问题。 在监督学习领域&#xff0c;我们有经典的线性回归和逻辑回归算法&#xff0c;…

YOLOv8算法改进【NO.93】使用resnet18网络作为主干特征提取网络

前 言 YOLO算法改进系列出到这&#xff0c;很多朋友问改进如何选择是最佳的&#xff0c;下面我就根据个人多年的写作发文章以及指导发文章的经验来看&#xff0c;按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通&#xff1a; 第一…

Jave EE 文件操作和IO

文章目录 1. 什么是文件&#xff1f;1.1 树型结构组织 和 目录1.2 文件路径1.3 文件类型 2. java 操作文件2.1 File 概述 3. 文件内容的读写 数据流3.1 Reader3.2 Writer3.3 InputStream3.4 OutputStream3.5 字节流转字符流 4. 小程序示例练习 1. 什么是文件&#xff1f; 所谓…

银河麒麟重置密码

桌面版银河麒麟重置密码 1.选择界面按e 出现银河麒麟系统选择的页面&#xff0c;我们点击键盘上的“e”键&#xff0c;进入电脑启动项编辑页 2.编辑启动页 在启动项编辑页面&#xff0c;我们将光标移动到linux这一行的最后&#xff0c;然后输入“init/bin/bash consoletty0”…

功率信号源指标参数有哪些

功率信号源是指可以提供一定功率输出的信号源装置&#xff0c;常用于实验室、测试仪器、通信设备等领域。功率信号源的性能参数对于评估其工作质量和适用范围非常重要。下面是功率信号源的一些常见指标参数。 功率输出是衡量功率信号源性能的重要参数。功率输出指的是信号源能够…

关于面试总结--接口测试面试题

前言 接口测试最近几年被炒的火热了&#xff0c;越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢&#xff1f; 主要是平常的功能点点点&#xff0c;大家水平都一样&#xff0c;是个人都能点&#xff0c;面试时候如果问你平常在公司怎么测试的&#xff…

力扣每日一题:2132. 用邮票贴满网格图(2023-12-14)

力扣每日一题 题目&#xff1a;2132. 用邮票贴满网格图 日期&#xff1a;2023-12-14 用时&#xff1a;38 m 32 s 思路&#xff1a;使用前缀和&#xff0b;差分&#xff0c;只是往常是一维&#xff0c;现在变二维了&#xff0c;原理差不多 时间&#xff1a;22ms 内存&#xff1…

7+乳酸化+分型+实验,怎么贴合热点开展实验,这篇文章给你思路

今天给同学们分享一篇生信文章“Identification of lactylation related model to predict prognostic, tumor infiltrating immunocytes and response of immunotherapy in gastric cancer”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解…

玩转大数据17:数据采集与实时流处理的架构设计

引言 随着大数据技术的不断发展&#xff0c;数据采集与实时流处理成为了许多企业和组织的核心需求。本文将介绍一种数据采集与实时流处理的架构设计&#xff0c;包括数据采集、实时流处理、数据存储和数据分析等方面。 一、数据采集 数据采集是整个架构的基础&#xff0c;它…

振弦采集仪:工程安全监测的“智能助手”

振弦采集仪&#xff1a;工程安全监测的“智能助手” 振弦采集仪是一种用于工程安全监测的设备&#xff0c;它可以被视为工程安全监测的“智能助手”。振弦采集仪通过测量结构物振动的频率和振幅来判断结构物的安全性&#xff0c;并实时监测结构物的变化。 振弦采集仪可以广泛…

Maven 项目报java 找不到符号

这个问题困扰了很久,之前找了很多篇博客,有一篇要清除掉maven,然后再重新加回来,之前管用,后续又不管用了 解决方案 // 看了看提示的代码,都是lombok的Slf4j 注解报错,我尝试升级了lombok的依赖版本就解决了

Linux/Android之od以字符格式、2进制、8进制、10进制、16进制显示文件内容(三十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…