Série ZooKeeper: Instalação e Sessões em Cluster

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

zk-unzip

O diretório bin acima contém o script de inicialização do ZooKeeper, .sho script que termina com o script está sendo executado em plataformas UNIX (Linux, Mac OS, etc.) e .cmdo 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)

  1. Modifique o local onde os instantâneos e logs do zk são armazenadosdataDir
  2. 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建立连接,完成后续的命令,任务等。
  1. 客户端连接端口默认clientPort=2181,根据情况调整
  2. 在dataDir文件下创建对应myid文件,内容是数字序号与前面的server.1,server.2,server.3 .....中的数字对应

在一台机器上修改了完成,然后把这个ZooKeeper文件复制到各个机器上,修改对应的配置即可

因为我就一台电脑,总共弄了3节点,具体每个节点的配置如下

caminho do grupo zk

zk-group-conf

启动

依次在三个bin目录下命令./zkServer.sh start 启动或者使用./zkServer.sh start-foreground 控制台输出的方式启动ZooKeeper( 启动期间会出现错误信息,是正常的,因为其他连接的节点还没有启动,暂时连接不上)

zk-start

如上三台启动成功,leader代表主节点,follower代表从节点,一主二从。

在另一个命令工具上使用./zhCli.sh 客户端连接ZooKeeper,开启新的session会话

zk-client

可以看到客户端的一些操作命令

zk-client-cmd

session会话

客户端在对Zookeeper集群执行任何请求前,都需要先与集群中的服务间里连接,这个连接就是session会话。客户端通过某一个特定的语言套件来创建一个ZooKeeper句柄时,它就会通过服务建立一个会话。客户端初始连接到集群中的某一个服务器或者一个独立的服务器。客户端通过TCP协议与服务器进行连接通信,使用的端口默认是2181,当然这个端口可以在zoo.cfg中修改的,配置如下图

zk-session-port

而且会话提供了顺序保障,也就是同一个会话的请求会以FIFO(先进先出)的顺序执行,前提是要保证一个客户端只打开一个会话。如果客户端有多个并发会话,不一定能够保持顺序了。

会话的创建

sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建的时候,ZooKeeper都会为其分配一个全局唯一的sessionID。

Timeout: 会话超时时间,客户端在构造ZooKeeper实例时候,向服务端发送配置的超时时间,server端会根据自己的超时时间限制最终确认会话的超时时间。

TickTime: 下次会话超时时间点,默认2000毫秒,可以在配置文件zoo.cfg中修改,

isClosing: 标记一个会话是否已经关闭,当sever端检测到会话已经超时失效,改会话标记为已关闭,不再处理新的请求。

创建过程如下
  1. 客户端启动程序建立一个会话。
  2. 客户端尝试连接到localhost/127.0.0.1:2181.
  3. 客户端连接成功,服务器开始初始化这个新的会话。
  4. 会话初始化成功。
  5. 服务端向客户端发送一个SyncConnected事件

zk-session-create

如上客户端连接的日志,可以看到这个客户端当前的session id以及客户端使用SyncConnected事件通知应用的相关操作。

会话的状态与生命周期

会话的生命周期是指会话从创建到结束的时期(正常关闭或者超时导致过期),

会话的主要状态是:

  • CONNECTING:连接中,此状态的时间很短。
  • CONNECTED:已连接。连接成功之后的状态。
  • CLOSED:已关闭,session过期或者服务端宕机或者客户端主动断开的状态。
  • NOT_CONNECTED:未连接,客户端还没有连接之前的状态。

zk-session-status

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.

Acho que você gosta

Origin juejin.im/post/7121629260149686302
Recomendado
Clasificación