🧑‍🏫
liualexiang
  • Introduction
  • Azure
    • AKS Basic
    • AKS Spark
    • AZ ACR SYNC
    • Azure CMI SDWAN
    • Azure LB DeepDive
      • Azure LB DeepDive
    • Azure Service Principal Basic
    • Azure Internal VM Network Connectivity
      • Azure Internal VM Network Connectivity
    • Azure Cli Build
    • Azure Vm Memory Monitor
  • Blockchain
    • BTC
  • CRISPR
    • 使用Parallel_Cluster提升CRISPA效率
  • OpenSource
    • ElasticSearch
      • ES Get Started
      • ES Search Query
      • Kibana 可视化
      • Logstash配置
    • Ansible 基础
    • Infra As Code
      • Pulumi Get Started
      • Terraform Basic
    • ZooKeeper 基础
    • RPC与REST
    • 使用Python申请大量内存测试
    • 使用TPC_DS产生压测数据
    • Superset
      • Superset部署手册
    • 代码扫描
    • Git
      • Git Basic
      • Github Action Basic
      • Gitlab与AzureAD集成
      • Gitbook 基础教程
    • K8S
      • enter_node
      • K8s X509 Client Cert
      • K8s Basic
      • K8s Oidc
      • Docker 基础
      • helm基础
      • K8S_Secrets管理
      • 深入了解K8S
      • 混沌工程
      • Istio
      • 生态
      • CRD开发
      • k8s网络
    • Cloud_Custodian
    • Jenkins Basic
    • Nginx
    • ETCD
    • 正则
    • VictoriaMetrics
    • Kafka
  • MySQL
    • MySQL 调优
  • Linux
    • SSH Tunnel 上网
    • 内存管理
    • 在Linux系统中通过LUKS加密磁盘
    • 量子计算 Basic
    • IO多路复用
    • Iptables
    • tmux和screen
    • Systemd
    • OS 基础
    • jq基础
    • yum
    • neovim
  • Web
    • Html Css
    • Web部署
    • 缓存
  • Programming
    • 算法
      • 返回list中最大生序子序列长度
    • Python技巧
      • Python的语法糖
      • Python常用装饰器
      • AsyncIO基础
      • 自动化测试pytest
      • python中的下划线
      • 面向对象
      • Python的坑
      • Python配置文件管理
      • HTTP Stream Response
      • Python项目管理
    • 设计模式
      • 设计模式
      • 面向对象的思想
      • 编程概念
    • Go
      • Go 基础
      • Go常用功能
      • 结构体入门
    • 前端
    • Vue
    • NodeJS
  • Math
    • 多项式插值法
  • Security
    • HTTP常见攻击
    • 加密与签名
    • RSA
    • ECDSA
  • Solidity
    • Solidity基础
    • Blockchain Testnet Faucet
  • Tools
    • 视频处理ffmpeg
    • IDE配置
    • iTerm2美化
    • 密码管理
    • FRP配置
    • 工具集
由 GitBook 提供支持
在本页
  • 分布式系统常见的问题
  • ZooKeeper部署
  • 使用 zkCli.sh 连接 zookeeper
  • failover机制
  1. OpenSource

ZooKeeper 基础

分布式系统常见的问题

分布式系统的特点有以下几个

  • 扩展性

  • 分布式

  • 对等性

  • 并发性

  • 无序性

存在的问题

  • 网络通信故障

  • 网络分区(脑裂)

  • 三态 (成功,失败,超时)

  • 节点故障

ZooKeeper部署

首先要安装Java运行环境,下载解压ZooKeeper的tar包,然后修改 conf 文件夹下的 zoo.cfg文件,主要修改的有3点

dataDir=/home/alex/zk/zk-01/
clientPort=2181


server.1=localhost:2287:4487
server.2=localhost:2288:4488
server.3=localhost:2289:4489
server.4=localhost:2290:4490:observer
  • dataDir 指定Zookeeper存放数据快照的目录

  • clientPort指定Zookeeper的端口,使用 zkCli.sh 所要连接的端口.

  • server.N 指定服务器,如上图,leader会从1--3中仲裁出来,剩下2个为follower,server.4 为 observer,不参与选举(提供只读)。N 要和 myid 文件中一致,注册配置zookeeper集群,在启动时根据这个配置进行相应的选举。

  • 如果在同一个机器上模拟zookeeper多节点,如上述模拟4个节点,那么注意每一个节点的dataDir和clientPort 均不一样

  • localhost:2287:4487, 这里面的第一个端口号2287指的是 leader和 follower通信的端口,第二个端口号4487指的是选举的端口号

除了修改 zoo.cfg 文件之外,还需要在 zookeeper 的根目录下创建一个 myid 的文件,server.1 的 myid 内容输入 1, server.2 的 myid 内容输入2,以此类推

启动服务 bin/zkServer.sh start 查看服务状态 bin/zkServer.sh status 停止服务 bin/zkServer.sh stop

注意:只启动一台 zookeeper 服务,那么检查状态依然没启动,除 observer 外,至少2台才可以启动成功 ( observer 可以不启动)

使用 zkCli.sh 连接 zookeeper

示例: 使用zkCli连接,通过ip和端口号可以指定连到哪个节点, 连接成功之后,使用 create 创建节点,ls 列出节点, get 查看节点

./zkCli.sh -server localhost:2181

create /zk "1"
ls /
get /zk
stat /zk

扩展资料 : https://www.cnblogs.com/yangzhenlong/p/8271151.html

failover机制

zookeeper 选举原则为:过半原则,即:3台机器的情况下,只要启动2台,就可以选举成功。4台机器参与选举,那么需要有3台启动成功,角色才能选定。

observer 的机器不参与选举,但提供了水平扩展功能(选举也会消耗一部分性能, observer的机器可以同步数据并提供读取功能)

因此 zookeeper 要部署成 单数 节点模式

上一页Terraform Basic下一页RPC与REST

最后更新于3年前