如何使用Docker搭建ZooKeepe集群
1、拉取镜像
# docker pull zookeeper:3.7.1
2、创建网络
Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。在实际部署中,需要指定容器ip,不允许其自行分配ip,尤其在搭建集群时。可以通过docker network create指令创建自己的bridge网络 ,在创建容器时指定网络和ip即可。
# 创建自定义网络
# docker network create --driver bridge --subnet=172.168.0.0/16 --gateway=172.168.1.1 mynet
# 查看所有网络
# docker network ls
3、配置文件
a、创建目录
创建用于存放各个zookeeper节点配置文件的config
# mkdir -p /usr/local/zk_cluster/{node1/conf,node2/conf,node3/conf}
b、创建文件
# zookeeper 节点1 配置
# vi /usr/local/zk_cluster/node1/conf/zoo.cfg# zookeeper 节点2 配置
# vi /usr/local/zk_cluster/node2/conf/zoo.cfg# zookeeper 节点3 配置存放目录
# vi /usr/local/zk_cluster/node3/conf/zoo.cfg
内容:
# Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里
dataDir=/data# 事物日志存储地点,如果没提供的话使用的则是 dataDir
dataLogDir=/datalog# 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位
tickTime=2000# 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=5# 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)
syncLimit=2# 默认值为3,不支持以系统属性方式配置。用于配置Zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。此参数的最小值为3,如果配置的值小于3会自动调整到3
autopurge.snapRetainCount=3# 默认值为0,单位为小时,不支持以系统属性方式配置。用于配置Zookeeper进行历史文件自动清理的频率。如果配置为0或负数,表示不需要开启定时清理功能
autopurge.purgeInterval=0# 默认为60,不支持以系统属性方式配置。从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以ip地址来进行连接数的限制。
# 如果设置为0,表示不做任何限制。仅仅是单台客户端与单个Zookeeper服务器连接数的限制,不能控制所有客户端的连接数总和
maxClientCnxns=60# 3.5.0中的新功能:当设置为false时,可以在复制模式下启动单个服务器,单个参与者可以使用观察者运行,并且群集可以重新配置为一个节点,并且从一个节点。
# 对于向后兼容性,默认值为true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通过将“standaloneEnabled = false”或“standaloneEnabled = true”添加到服务器的配置文件来设置它。
standaloneEnabled=false# 内嵌的管理控制台,停用这个服务
admin.enableServer=false# 开启四字命令,将所有命令添加到白名单中
4lw.commands.whitelist=*# 集群中服务的列表
server.1=172.168.0.1:2888:3888;2181
server.2=172.168.0.2:2888:3888;2181
server.3=172.168.0.3:2888:3888;2181
5、集群启动
节点1启动
# docker run -d --restart always \
--name zk-node1 \
--network mynet \
--ip 172.168.0.1 \
-p 2181:2181 \
-e ZOO_MY_ID=1 \
-v /usr/local/zk_cluster/node1/conf/zoo.cfg:/conf/zoo.cfg \
-v /usr/local/zk_cluster/node1/data:/data \
-v /usr/local/zk_cluster/node1/datalog:/datalog \
-v /usr/local/zk_cluster/node1/logs:/logs \
zookeeper:3.7.1
说明:
/usr/local/zk_cluster/node1/data:指定存放zookeeper数据的目录,若该目录不存在,则自动生成;
/usr/local/zk_cluster/node1/datalog:指定存放zookeeper数据日志目录,若该目录不存在,则自动生成;
/usr/local/zk_cluster/node1/logs:指定存放zookeeper日志目录,若该目录不存在,则自动生成;
节点2启动
# docker run -d --restart always \
--name zk-node2 \
--network mynet \
--ip 172.168.0.2 \
-p 2182:2181 \
-e ZOO_MY_ID=2 \
-v /usr/local/zk_cluster/node2/conf/zoo.cfg:/conf/zoo.cfg \
-v /usr/local/zk_cluster/node2/data:/data \
-v /usr/local/zk_cluster/node2/datalog:/datalog \
-v /usr/local/zk_cluster/node2/logs:/logs \
zookeeper:3.7.1
节点3启动
# docker run -d --restart always \
--name zk-node3 \
--network mynet \
--ip 172.168.0.3 \
-p 2183:2181 \
-e ZOO_MY_ID=3 \
-v /usr/local/zk_cluster/node3/conf/zoo.cfg:/conf/zoo.cfg \
-v /usr/local/zk_cluster/node3/data:/data \
-v /usr/local/zk_cluster/node3/datalog:/datalog \
-v /usr/local/zk_cluster/node3/logs:/logs \
zookeeper:3.7.1
6、集群状态
# 在容器 zk-node1 中开启一个交互模式的终端
[root@localhost ~]# docker exec -it zk-node1 /bin/bash
# 查看 zookeeper 状态 node1为follower
root@dce8441d0178:/apache-zookeeper-3.7.1-bin# bin/zkServer.sh statusZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@dce8441d0178:/apache-zookeeper-3.7.1-bin# exit
exit# 在容器 zk-node2 中开启一个交互模式的终端
[root@localhost ~]# docker exec -it zk-node2 /bin/bash
# 查看 zookeeper 状态 node2为leader
root@969650dede5a:/apache-zookeeper-3.7.1-bin# bin/zkServer.sh statusZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
root@969650dede5a:/apache-zookeeper-3.7.1-bin# exit
exit# 在容器 zk-node3 中开启一个交互模式的终端
[root@localhost ~]# docker exec -it zk-node3 /bin/bash
# 查看 zookeeper 状态 node3为follower
root@9a0ca305754a:/apache-zookeeper-3.7.1-bin# bin/zkServer.sh statusZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@9a0ca305754a:/apache-zookeeper-3.7.1-bin# exit
exit
7、开放端口
# firewall-cmd --add-port=2181/tcp --add-port=2182/tcp --add-port=2183/tcp --permanent
# firewall-cmd --reload
相关文章:
如何使用Docker搭建ZooKeepe集群
1、拉取镜像 # docker pull zookeeper:3.7.12、创建网络 Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。在实际部署中,需要指定容器ip,不允许其自行分配ip,尤其在搭建集群时。可以通过docker netw…...
【javaweb】学习日记Day3 - Ajax 前后端分离开发 入门
目录 一、Ajax 1、简介 2、Axios (没懂 暂留) (1)请求方式别名 (2)发送get请求 (3)发送post请求 (4)案例 二、前端工程化 1、Vue项目-目录结构 2、…...
SQL注入漏洞复现:探索不同类型的注入攻击方法
这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 准备环境 sqlilabs靶场 安装:详细安装sqlmap详细教程_sqlmap安装教程_mingzhi61的博客-CSDN博客 一、基于错误的注入 注入讲解 介绍 基于错误的注入(Err…...
大彩串口屏使用记录
写在最前面 屏幕型号 DC10600M070 IDE VisualTFT(官方) VSCode(lua编程) 用之前看一下官方那个1小时的视频教程就大概懂控件怎么用了,用官方的软件VisualTFT很简单 本文只是简单记录遇到的一些坑 lua编辑器 VisualTF…...
Qt http 的认证方式以及简单实现
http 的认证方式 基本认证(Basic Authentication): 基本认证是最简单的HTTP认证方式。客户端在请求头中使用Base64编码的用户名和密码进行身份验证由于仅使用Base64编码,基本认证并不安全,因此建议与HTTPS一起使用,以…...
【图像分割】实现snake模型的活动轮廓模型以进行图像分割研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【MongoDB系列】1.MongoDB 6.x 在 Windows 和 Linux 下的安装教程(详细)
本文主要介绍 MongoDB 最新版本 6.x 在Windows 和 Linux 操作系统下的安装方式,和过去 4.x 、5.x 有些许不同之处,供大家参考。 Windows 安装 进入官网下载 Mongodb 安装包,点此跳转,网站会自动检测当前操作系统提供最新的版本&…...
5.网络原理之初识
文章目录 1.网络发展史1.1独立模式1.2网络互连1.3局域网LAN1.3.1基于网线直连1.3.2基于集线器组建1.3.3基于交换机组建1.3.4基于交换机和路由器组建1.3.4.1路由器和交换机区别 1.4广域网WAN 2.网络通信基础2.1IP地址2.2端口号2.3认识协议2.4五元组2.5 协议分层2.5.1 分层的作用…...
【Linux】进程状态|僵尸进程|孤儿进程
前言 本文继续深入讲解进程内容——进程状态。 一个进程包含有多种状态,有运行状态,阻塞状态,挂起状态,僵尸状态,死亡状态等等,其中,阻塞状态还包含深度睡眠和浅度睡眠状态。 个人主页ÿ…...
ASEMI快恢复二极管APT80DQ60BG特点应用
编辑-Z APT80DQ60BG参数描述: 型号:APT80DQ60BG 最大峰值反向电压(VRRM):600V 最大直流阻断电压VR(DC):600V 平均整流正向电流(IF):80A 非重复峰值浪涌电流(IFSM):600A 工作接点温度和储存温度(TJ, …...
【Python爬虫】使用代理ip进行网站爬取
前言 使用代理IP进行网站爬取可以有效地隐藏你的真实IP地址,让网站难以追踪你的访问行为。本文将介绍Python如何使用代理IP进行网站爬取的实现,包括代理IP的获取、代理IP的验证、以及如何把代理IP应用到爬虫代码中。 1. 使用代理IP的好处 在进行网站爬…...
识别图片中的文字
前言 PearOCR 是一款免费无限制网页版文字识别工具。 优点如下: 免费:完全免费,没有任何次数、大小限制,可以无限使用; 安全:全部数据本地运算,所有图片均不会被上传; 智能…...
第七章:借阅管理【基于Servlet+JSP的图书管理系统】
借阅管理 1. 借书卡 1.1 查询借书卡 借书卡在正常的CRUD操作的基础上,我们还需要注意一些特殊的情况。查询信息的时候。如果是管理员则可以查询所有的信息,如果是普通用户则只能查看自己的信息。这块的控制在登录的用户信息 然后就是在Dao中处理的时候需…...
算法 for GAMES
栈 #include <iostream> #include <stack>int main() {std::stack<int> intStack;// 压入元素到堆栈intStack.push(5);intStack.push(10);intStack.push(15);// 查看堆栈顶部元素std::cout << "Top element: " << intStack.top() <…...
自研分布式IM-HubuIM RFC草案
HubuIM RFC草案 消息协议设计 基本协议 评估标准 【性能】协议传输效率,尽可能降低端到端的延迟,延迟高于200ms用户侧就会有所感知 【兼容】既要向前兼容也要向后兼容 【存储】减少消息包的大小,降低空间占用率,一个字节在亿…...
tableau基础学习1:数据源与绘图
文章目录 读取数据常用绘图方法1. 柱状图2. 饼图3. 散点图4. 热力图 第一部分是一些较容易上手的内容,以及比较常见的可视化内容,包括:柱状图、饼图、散点图与热力图 读取数据 打开界面后,选择数据源之后就可以导入数据…...
探索经典算法问题与解决方案
探索经典算法问题与解决方案 在计算机科学领域,有许多经典算法问题需要我们思考和解决。本文将深入介绍一些著名的经典算法问题,包括旅行商问题、背包问题的变种、N皇后问题、钢条切割问题、最大子数组和问题、最长公共子串问题以及矩阵连乘问题&#x…...
【Linux】DNS系统,ICMP协议,NAPT技术
遏制自己内心的知识优越感,才能让你发自内心的去尊重他人,避免狂妄自大,才能让你不断的丰富自己的内心。 文章目录 一、DNS系统1.DNS服务器返回域名对应的ip2.使用dig工具分析DNS过程3.浏览器中输入url后发生的事情? 二、ICMP协议…...
BI技巧丨Window应用之同环比
白茶曾介绍过OFFSET可以用来解决同环比的问题,其实微软最近推出的开窗函数WINDOW也可以用来解决同环比。 WINDOW函数基础语法 WINDOW ( from[, from_type], to[, to_type][, <relation>][, <orderBy>][, <blanks>][, <partitionBy>][, &l…...
【Mac】编译Spring 源码和Idea导入
今天我们开始Spring源码的阅读之旅。阅读Spring的源码的第一步当然是编译Spring源码。首先我们要去GitHub上将spring源码给clone下来。 笔者编译环境如下: Spring版本:5.28 https://github.com/spring-projects/spring-framework/tree/v5.2.8.RELEASE …...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
