跳到主要内容

故障演练

基础环境

主机名SID角色
master11Follower
master22Leader
node13Follower

直接删除 node1 服务数据,看会出现什么效果?

  • 删除前。
--------启动 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
  • 执行删除。
rm -rf /home/bigdata/module/apache-zookeeper-3.5.7-bin/data
  • 执行下面步骤看是否有影响。
create /mynode1 "Node Data"
create /mynode2 "Node Data"
create /mynode3 "Node Data"

get -s /mynode3

删除以后对基本操作看着没有影响,然后进行集群的关闭重启。

 --------停止 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
--------停止 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
--------停止 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... no zookeeper to stop (could not find file /home/bigdata/module/apache-zookeeper-3.5.7-bin/data/zookeeper_server.pid)

由于刚才node1删除了data,data下面有zookeeper_server.pid,导致node1没有关闭,那么手动关闭下。

netstat -tulnp | grep 2181

kill -9 15952

然后重启集群。

 --------启动 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

恢复步骤

  1. 同步其他没有挂的节点数据到node1。
./node1xsync.sh /home/bigdata/module/apache-zookeeper-3.5.7-bin/data
  1. 修改 node 的 myid。
echo "3" > myid
  1. 启动 node1。
./zkServer.sh start
  1. 查看集群的状态。
 --------启动 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
create /mynode5 "Node Data"
create /mynode6 "Node Data"
create /mynode7 "Node Data"

get -s /mynode7

恢复成功。

直接删除Leader节点,看会出现什么情况?

  • 没有删除前。
 --------启动 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
  • 删除Leader节点。
rm -rf /home/bigdata/module/apache-zookeeper-3.5.7-bin/data
rm -rf /home/bigdata/module/apache-zookeeper-3.5.7-bin/log
  • 客户端执行 sync 以后删除的数据没有落到磁盘。
[zk: localhost:2181(CONNECTED) 6] sync /
  • 现在重启集群。可以看到leader变化了。
 --------启动 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

恢复步骤

  • 还是上面删除node1的操作同步以后数据以后,修改myid重启集群,可以看到还是恢复成功了。
 --------启动 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

现在删除一个 follower 和 一个 leader 情况会怎么样?

  • 可以发现集群已经启动不了了。
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

恢复步骤

同步最后有数据的data目录到所有的节点。

./xsync.sh /home/bigdata/module/apache-zookeeper-3.5.7-bin/data
  • 修改myid。
echo "2" > myid
echo "3" > myid

可以看到启动成功

 --------启动 master1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
--------启动 master2 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
--------启动 node1 zookeeper-------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/module/apache-zookeeper-3.5.7-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

获取节点数据

get /mynode5
get /mynode6
get /mynode7

可以看到数据还是可以访问的。

[zk: localhost:2181(CONNECTED) 7] get /mynode5
Node Data
[zk: localhost:2181(CONNECTED) 8] get /mynode6
Node Data
[zk: localhost:2181(CONNECTED) 9] get /mynode7
Node Data
[zk: localhost:2181(CONNECTED) 10]