---
title: Zookeeper 能不能靠服务发现完成自重配置
date: '2015-04-22 21:39:50'
draft: false
summary: 如果 Zookeeper 节点挂掉重建后还要手工改全体配置，那它就很难真正成为自动化系统的一部分。
slug: zookeeper-self-reconfig-via-service-discovery
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/3834543981668612
tags:
- zookeeper
- service-discovery
- automation
topics:
- infra
type: post
---

为了自动发现服务，部署 `Zookeeper` 往往会变成一个有点尴尬的事情。

`Zookeeper` 一般要部署 `3` 到 `5` 个节点。如果其中某个节点挂了，重新部署之后，常见做法还是回到老路上：

1. 改所有节点的配置文件。
2. 让整个集群重新认识这个新节点。

这就引出一个很直接的问题：

> 如果 `Zookeeper` 自己都需要人工改配置，那它怎么成为更大自动化系统里的基础设施？

换句话说，`Zookeeper` 节点挂掉重建之后，能不能自动完成配置调整，而不是让运维再手工把所有节点改一遍？

我当时就是顺着这个问题往下做，于是有了一个围绕 `zookeeper + exhibitor` 的尝试，也顺手做了对应的 Docker 镜像。

这个方向让我越来越强烈地感觉到：当系统开始追求自动发现、自动重建、自动扩缩容之后，许多基础设施也必须跟着一起“自描述化”和“自重配置化”。

否则你表面上是在做自动化，核心节点一出问题，最后还是得靠人工回到每台机器上改配置。那整个系统其实并没有真的跨过那条线。

系统做到这里，会有一种“盗梦空间”式的感觉：你为了自动化一个服务，不得不再引入一层负责自动化这个服务本身的机制。
