1. 架构设计说明 1.1 集群拓扑
1.2 通信关系 graph TD
C[Client] --> ZK1[ZooKeeper-1]
C --> ZK2[ZooKeeper-2]
C --> ZK3[ZooKeeper-3]
ZK1 <--> ZK2
ZK2 <--> ZK3
ZK1 <--> ZK3
2. 目录结构规划 1 2 3 4 5 6 7 8 zookeeper/ ├── docker-compose.yml ├── zk1/ │ └── data/ ├── zk2/ │ └── data/ ├── zk3/ │ └── data/
说明:
myid 会自动写入 data/myid
日志与快照统一放在 /data
3. docker-compose.yml
⚠️:3.3 ZOO_SERVERS要加上;2181
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 networks: apps: external: true services: zk1: image: zookeeper:3.3 container_name: zk1 hostname: zk1 restart: always ports: - "2181:2181" environment: ZOO_MY_ID: 1 ZOO_SERVERS: > server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 ZOO_MAX_CLIENT_CNXNS: 1000 JVMFLAGS: "-Xms512m -Xmx512m" volumes: - ./zk1/data:/data - ./zk1/log:/log - ./zk1/datalog:/datalog networks: - apps zk2: image: zookeeper:3.3 container_name: zk2 hostname: zk2 restart: always ports: - "2182:2181" environment: ZOO_MY_ID: 2 ZOO_SERVERS: > server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 ZOO_MAX_CLIENT_CNXNS: 1000 JVMFLAGS: "-Xms512m -Xmx512m" volumes: - ./zk2/data:/data - ./zk2/log:/log - ./zk2/datalog:/datalog networks: - apps zk3: image: zookeeper:3.3 container_name: zk3 hostname: zk3 restart: always ports: - "2183:2181" environment: ZOO_MY_ID: 3 ZOO_SERVERS: > server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 ZOO_MAX_CLIENT_CNXNS: 1000 JVMFLAGS: "-Xms512m -Xmx512m" volumes: - ./zk3/data:/data - ./zk3/log:/log - ./zk3/datalog:/datalog networks: - apps
4. 启动与验证 4.1 启动
4.2 查看状态
4.3 验证角色(Leader / Follower) 1 2 3 4 5 6 7 8 9 10 11 mac@GaGa ~ % for id in 1 2 3; do docker exec -it zk${id} bash -c "./bin/zkServer.sh status" ; done JMX enabled by default Using config: /conf/zoo.cfg Mode: follower JMX enabled by default Using config: /conf/zoo.cfg Mode: follower JMX enabled by default Using config: /conf/zoo.cfg Mode: leader
你应该看到:
1 个 Mode: leader
2 个 Mode: follower
5. 生产级优化建议 5.1 JVM 内存限制 1 2 environment: JVMFLAGS: "-Xms512m -Xmx512m"
5.2 磁盘 IO 分离 1 2 3 volumes: - ./zk1/data:/data - ./zk1/datalog:/datalog
并加:
1 ZOO_DATA_LOG_DIR: /datalog
5.3 Tick & 会话调优 1 2 3 4 ZOO_TICK_TIME: 2000 ZOO_INIT_LIMIT: 10 ZOO_SYNC_LIMIT: 5 ZOO_MAX_CLIENT_CNXNS: 200