Instalação de cluster
Antes de instalar o zookeeper, você deve primeiro instalar o ambiente Java.
Este artigo Versão do ZooKeeper: 3.8.0
Baixe e descompacte
Antes de começar, você precisa baixar o pacote de instalação e encontrar a versão correspondente do ZooKeeper no site oficial zookeeper.apache.org/releases.ht… . O que baixei aqui é o pacote compactado compilado da versão 3.8 apache-zookeeper-3.8.0-bin.tar.gz (um pacote pode ser usado em várias plataformas), se estiver em Linux, Mac OS ou outros sistemas do tipo Unix. pode ser descompactado diretamente com o comando:
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
Se for o Windows, você pode usar uma ferramenta de descompactação de terceiros para processá-lo, conforme mostrado abaixo após a descompactação
O diretório bin acima contém o script de inicialização do ZooKeeper, .sh
o script que termina com o script está sendo executado em plataformas UNIX (Linux, Mac OS, etc.) e .cmd
o script que termina com ele está sendo executado no Windows. Os arquivos de configuração relevantes são salvos no diretório conf, entre os quais zoo_sample.cfg é o modelo de configuração oficial, esses dois diretórios são os mais usados.
Modifique o arquivo de configuração
Copie e renomeie o arquivo de configuração zoo_sample.cfg no diretório conf para zoo.cfg (o arquivo de configuração com este nome é carregado)
- Modifique o local onde os instantâneos e logs do zk são armazenados
dataDir
- Adicione as informações de todos os nós na parte inferior do zoo.cfg, da seguinte forma
# server.id = ip:port:port
server.1=xxx:2888:3888
server.2=xxx:2888:3888
server.3=xxx:2888:3888
....... # 所有节点
Cada linha representa um nó, e o significado de cada um é o seguinte.
- servidor: marque cada nó e o número de série nele pode selecionar rapidamente o líder (correspondente ao arquivo myid criado)
- xxx: IP de cada servidor de nó do ZooKeeper (dica: você pode usar o comando ifconfig para visualizar o endereço IP .)
- 3888: Quando a primeira inicialização ou o líder desliga, é estabelecida uma conexão entre cada nó através desta porta, e o líder é eleito por votação.
- 2888: 有leader之后,leader节点会启动2888端口,其他follower节点通过这个端口和leader建立连接,完成后续的命令,任务等。
- 客户端连接端口默认clientPort=2181,根据情况调整
- 在dataDir文件下创建对应myid文件,内容是数字序号与前面的server.1,server.2,server.3 .....中的数字对应
在一台机器上修改了完成,然后把这个ZooKeeper文件复制到各个机器上,修改对应的配置即可
因为我就一台电脑,总共弄了3节点,具体每个节点的配置如下
启动
依次在三个bin目录下命令./zkServer.sh start
启动或者使用./zkServer.sh start-foreground
控制台输出的方式启动ZooKeeper( 启动期间会出现错误信息,是正常的,因为其他连接的节点还没有启动,暂时连接不上)
如上三台启动成功,leader代表主节点,follower代表从节点,一主二从。
在另一个命令工具上使用./zhCli.sh
客户端连接ZooKeeper,开启新的session会话
可以看到客户端的一些操作命令
session会话
客户端在对Zookeeper集群执行任何请求前,都需要先与集群中的服务间里连接,这个连接就是session会话。客户端通过某一个特定的语言套件来创建一个ZooKeeper句柄时,它就会通过服务建立一个会话。客户端初始连接到集群中的某一个服务器或者一个独立的服务器。客户端通过TCP协议与服务器进行连接通信,使用的端口默认是2181,当然这个端口可以在zoo.cfg中修改的,配置如下图
而且会话提供了顺序保障,也就是同一个会话的请求会以FIFO(先进先出)的顺序执行,前提是要保证一个客户端只打开一个会话。如果客户端有多个并发会话,不一定能够保持顺序了。
会话的创建
sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建的时候,ZooKeeper都会为其分配一个全局唯一的sessionID。
Timeout: 会话超时时间,客户端在构造ZooKeeper实例时候,向服务端发送配置的超时时间,server端会根据自己的超时时间限制最终确认会话的超时时间。
TickTime: 下次会话超时时间点,默认2000毫秒,可以在配置文件zoo.cfg中修改,
isClosing: 标记一个会话是否已经关闭,当sever端检测到会话已经超时失效,改会话标记为已关闭,不再处理新的请求。
创建过程如下
- 客户端启动程序建立一个会话。
- 客户端尝试连接到localhost/127.0.0.1:2181.
- 客户端连接成功,服务器开始初始化这个新的会话。
- 会话初始化成功。
- 服务端向客户端发送一个SyncConnected事件
如上客户端连接的日志,可以看到这个客户端当前的session id以及客户端使用SyncConnected事件通知应用的相关操作。
会话的状态与生命周期
会话的生命周期是指会话从创建到结束的时期(正常关闭或者超时导致过期),
会话的主要状态是:
- CONNECTING:连接中,此状态的时间很短。
- CONNECTED:已连接。连接成功之后的状态。
- CLOSED:已关闭,session过期或者服务端宕机或者客户端主动断开的状态。
- NOT_CONNECTED:未连接,客户端还没有连接之前的状态。
Uma sessão inicia no estado NOT_CONNECTED e transita para o estado CONNECTING (1) quando o cliente é inicializado. Normalmente, após estabelecer com sucesso uma conexão com o servidor zk, a sessão fará a transição para o estado CONNECTED (2). Quando o cliente se desconecta do servidor zk ou não recebe uma resposta do servidor, ele fará a transição de volta para CONNECTING(3) e tentará descobrir outros servidores zk. Se um servidor disponível for encontrado e a sessão for confirmada como válida, o estado fará a transição para CONNECTED novamente. Caso contrário, a sessão será declarada expirada e o estado se tornará CLOSED(4).
sessão expirada
Há um parâmetro de detecção de tempo limite tickTime ao criar uma sessão. Se o serviço não receber nenhuma mensagem para esta sessão após o tempo t, o serviço declara que a sessão expirou. No lado do cliente, se nenhuma mensagem for recebida após t/3, o cliente enviará uma mensagem de pulsação (detecção de pulsação) para o servidor. Após 2t/3, o cliente ZooKeeper começa a procurar outros servidores, o que significa que ainda há t/3 para encontrar a sessão de conexão.
No modo de cluster, o tempo limite da sessão acionará o cliente para reconectar.Ao reconectar a um novo nó de servidor, é necessário que o estado ZooKeeper desse nó seja mantido atualizado com o estado ZooKeeper do último servidor conectado. O ZooKeeper determina se o estado está atualizado solicitando atualizações no serviço. O cluster atribui identificadores de transação de acordo com a ordem em que cada atualização foi estabelecida.
Eu sou o Sr. Ji. Eu uso a saída para forçar a entrada a continuar aprendendo. Eu continuo compartilhando artigos de séries técnicas, e toda a rede vale a pena coletar bons artigos. Bem-vindo, preste atenção à conta pública e seja uma pessoa técnica que continua a crescer.
- Estou participando do recrutamento do programa de assinatura de criadores da Comunidade de Tecnologia Nuggets, clique no link para se cadastrar e enviar .