docker 安装keepalived

docker 安装keepalived

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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录 | mac打开终端时报错:login: /opt/homebrew/bin/zsh: No such file or directory [进程已完成]

mac打开终端时报错&#xff1a;login: /opt/homebrew/bin/zsh: No such file or directory [进程已完成]&#xff0c;导致终端没有办法使用的情况 说明 zsh 没有安装或者是安装路径不对 可以看看 /bin 下有没有 zsh&#xff0c;若没有&#xff0c;肯定是有 bash 那就把终端默…

[算法基础 ~排序] Golang 实现

文章目录 排序什么是排序排序的分类1. 冒泡1.1 冒泡排序1.2. 快速排序 2. 选择2.1 简单选择排序2.2 堆排序 3. 插入3.1 直接插入3.2 折半插入3.3 希尔排序 4. 归并排序代码实现 5. 基数排序 排序图片就不贴了吧 排序 什么是排序 以下部分动图来自CSDN ::: tip 稳定性的概念 …

后端接口开发-web前台请求接口对后台数据库增删改查-实例

一、后端接口开发的逻辑是&#xff1a; 1.Application项目启动 2.前台接口Url请求后台 3.Controller控制拿到前台请求参数&#xff0c;传递给中间组件Service 4.Service调用Mapper.java 5. mapper.java映射到mapper.xml中的mybatis语句&#xff0c;类似Sql语句操作数据库 6.其…

【C语言(十二)】

数据在内存中的存储 一、整数在内存中的存储 整数的2进制表示方法有三种&#xff0c;即 原码、反码和补码 有符号的整数&#xff0c;三种表示方法均有符号位和数值位两部分&#xff0c;符号位都是用0表示“正”&#xff0c;用1表示“负”&#xff0c;最高位的⼀位是被当做符号…

利用svm进行模型训练

一、步骤 1、将文本数据转换为特征向量 &#xff1a; tf-idf 2、使用这些特征向量训练SVM模型 二、代码 from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import SVC from sklearn.m…

Android : SensorManager 传感器入门 简单应用

功能介绍&#xff1a;转动手机 图片跟着旋转 界面&#xff1a; activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/andr…

SpringSecurity 手机号登录

一、工作流程 1.向手机发送验证码&#xff0c;第三方短信发送平台&#xff0c;如阿里云短信。 2.手机获取验证码后&#xff0c;在表单中输入验证码。 3.使用自定义过滤器​SmsCodeValidateFilter​。 4.短信校验通过后&#xff0c;使用自定义手机认证过滤器​SmsCodeAuthentic…

ROS2 Control分析讲解

ROS2 Control 文章目录 前言简述组成安装 框架Controller ManagerResource ManagerControllersUser Interfaces Hardware ComponentsURDF中的硬件描述机器人运行框架 总结 前言 ros2_control是一个使用&#xff08;ROS 2&#xff09;进行机器人&#xff08;实时&#xff09;控…

如何用开关电源测试系统测试电源峰值电流?

一、用万用表、示波器测量峰值电流 首先将待测电路输入信号线分别连接到测试电路的输入端和地端。待测电路的电源端连接电源。然后将示波器设置为AC耦合模式&#xff0c;通道1连接待测电路输入端&#xff0c;通道2连接待测电路地端。调整数字万用表为电流测量模式。打开电源&am…

使用VeryFL【02】python环境安装

新建虚拟环境 conda create --name vfl python3.7激活新建的虚拟环境 conda activate vfl安装pytorch 安装Brownie pip install eth-brownie -i https://pypi.tuna.tsinghua.edu.cn/simple

一款计算机顶会爬取解析系统 paper info

一款计算机顶会爬取解析系统 paper info 背景项目实现的功能 技术方案架构设计项目使用的技术选型 使用方法本地项目部署使用ChatGPT等大模型创建一个ChatGPT助手使用阿里云 顶会数据量 百度网盘pfd文件json文件 Q&A github链接 &#xff1a;https://github.com/codebricki…

Nginx+Tomcat实现负载均衡和动静分离

目录 前瞻 动静分离和负载均衡原理 实现方法 实验&#xff08;七层代理&#xff09; 部署Nginx负载均衡服务器(192.168.75.50:80) 部署第一台Tomcat应用服务器&#xff08;192.168.75.60:8080&#xff09; 多实例部署第二台Tomcat应用服务器&#xff08;192.168.75.70:80…

LOF基金跟股票一样吗?

LOF基金&#xff0c;全称为"上市型开放式基金"&#xff0c;是一种可以在上海证券交易所认购、申购、赎回及交易的开放式证券投资基金。投资者可以通过上海证券交易所场内证券经营机构或场外基金销售机构进行认购、申购和赎回基金份额。 LOF基金的特点是既可以像股票…

DataGrip连接Hive以及MySQL

如果连接失败&#xff0c;是因为useSSL ,改成NO或者False;

Spring Cloud + Vue前后端分离-第5章 单表管理功能前后端开发

Spring Cloud Vue前后端分离-第5章 单表管理功能前后端开发 完成单表的增删改查 控台单表增删改查的前后端开发&#xff0c;重点学习前后端数据交互&#xff0c;vue ajax库axios的使用等 通用组件开发:分页、确认框、提示框、等待框等 常用的公共组件:确认框、提示框、等待…

时序分解 | Matlab实现DBO-VMD基于蜣螂优化算法优化VMD变分模态分解时间序列信号分解

时序分解 | Matlab实现DBO-VMD基于蜣螂优化算法优化VMD变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现DBO-VMD基于蜣螂优化算法优化VMD变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.利用蜣螂优化算法优化VMD中的参数k、a&…

【PostgreSQL】从零开始:(四)使用PgAdmin4连接数据库,及工具使用

登陆pgAdmin4 连接数据库 填写连接名称 填写连接信息 错误信息如下 解决办法 1.登陆数据库服务器切换到postgres用户 [rootpostgre-sql ~]# su - postgres 上一次登录&#xff1a;三 12月 13 18:10:00 CST 2023pts/0 上 [postgrespostgre-sql ~]$ 2.查看数据库进程 [postgre…

Linux——MySQL备份与恢复

一、数据库备份概述 1、数据备份的重要性 在企业中数据的价值至关重要&#xff0c;数据保障了企业业务的正常运行。因此&#xff0e;数据的安全性及数据的可靠性是运维的重中之重&#xff0c;任何数据的丢失都可能对企业产生严重的后果。通常情况下造成数据丢失的原因有如下几种…

JVM 详解(JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路)

目录 JVM 详解&#xff08;JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路&#xff09;1、概念&#xff1a;什么是 JVM ?JVM 的作用&#xff1f; 2、JVM 的主要组成部分&#xff1f;类加载器&#xff08;Class Loader&#xff09;&#xff1a;简单…

ECharts实现数据可视化入门教程

ECharts介绍 Apache ECharts ECharts是一个使用 JavaScript 实现的开源可视化库 入门教程 第一步&#xff1a;下载echarts.js文件 下载地址&#xff1a;下载 - Apache ECharts 点击Dist 点击echarts.min.js并保存 将下载好的.js文件引入到项目的js文件中 第二步&#xff1a;…