## 七 zk选举模式和伪分布式集群搭建

- zk集群可以实现 主从节点的数据同步 , 心跳机制 , 选举模式

![](img/zk2.png)

- 集群搭建注意事项
  - 最少3个节点
  - 配置数据文件 myid 1/2/3 对应 server.1/2/3

- 通过./zkCli.sh -server [ip]:[port] 检测集群是否配置成功

- 伪分布式集群搭建

  - conf/zoo.cfg 中添加

  ``` shell
  server.1=192.168.199.126:2888:3888
  server.2=192.168.199.126:2889:3889
  server.3=192.168.199.126:2880:3880
  
  #前面的端口负责数据传输 后面的端口负责节点选举
  ```

  - dataDir对应的路径下添加myid，并在myid上添加内容

- 测试数据同步

  - 连接集群中任意一个节点, 修改数据, 修改的结果会同步到集群所有机器

- 测试集群选举

  - 退出leader节点 剩下的两个follower会自动选举出一个新的leader

详细步骤：

1，拷贝zookeeper，为三个zookeeper

```
cp -r zookeeper-3.4.0* zk1

cp -r zookeeper-3.4.0* zk2

cp -r zookeeper-3.4.0* zk3
```

2，进入zk1的conf目录，修改配置文件zoo.cfg

```

dataDir=/tmp/zookeeper1
dataLogDir=/tmp/zookeeper1


clientPort=2182


server.1=192.168.199.126:2888:3888
server.2=192.168.199.126:2889:3889
server.3=192.168.199.126:2880:3880
```

3，载/tmp/zookeeper1目录下编辑myid文件，添加内容为1

4，同理修改zk2和zk3，注：对应的目录和端口要不同。

5，分别进入zk1,zk2,zk3的bin目录，启动zkServer.sh

测试数据同步：

zkCli.sh -server localhost:2181



和集群搭建的不同之处：

zk1，zk2，zk3在不同的节点上，clientPort可以相同，

`server.1=192.168.199.126:2888:3888`这个配置中的id需要根据节点的ip进行设置