Instalação e uso do Zookeeper

1. Introdução ao Zookeeper

1.1 Visão Geral

Zookeeper é um projeto Apache distribuído de código aberto que fornece serviços de coordenação para aplicativos distribuídos.

Insira a descrição da imagem aqui

1.2 Recursos

Insira a descrição da imagem aqui

1.3 Estrutura de dados

Insira a descrição da imagem aqui

1.4 Cenários de aplicação

Os serviços fornecidos incluem: serviço de nomenclatura unificado, gerenciamento de configuração unificado, gerenciamento de cluster unificado, nós de servidor dinâmicos online e offline e balanceamento de carga flexível.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

1.5 URL de download

O pacote de instalação do Zookeeper linux64-bit foi carregado para minha nuvem de código.
Link: https://gitee.com/hdyxk/learning-from .

2. Construção do ambiente de modo local

2.1 Construção básica do ambiente

1. VM build centos7 : https://blog.csdn.net/babyxue/article/details/80970526?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160128451719724848323088%2522%252C%2522scm%23.133 ...% 2522% 257D & the request_id = 160128451719724848323088 & biz_id = 0 & utm_medium = distribua.pc_search_result.none-Task-Blog-2 Todos baidu_landing_v2 ~ default-1-80970526 % utirst_rank_ecpm_v3_pc_rank_ecpm_v3_pc_rank_v2_v3_v3% utirst_rank_ecpm_v3_v3_v2% utirst_rank_ecpm_v3_v3_v3_v2_v2_v3_v3_v3_pc_r6m% 90526% 90770526% do VM_v2_v2_pc_r6m% 90526 AD% E5% BB% BAcentos7 & SPM = 1018.2118.3001.4187 .
2. Instale jdk em centos7 : https://www.cnblogs.com/sxdcgaq8080/p/7492426.html .

2.2 Construção do modo local Zookeeper

Endereço do blog: https://www.cnblogs.com/zwcry/p/10244908.html .

2.3 Interpretação dos parâmetros de configuração

O significado dos parâmetros no arquivo de configuração zoo.cfg no Zookeeper é interpretado da seguinte forma:

  • 1 tickTime = 2000: o número de pulsações de comunicação, o tempo de pulsação entre o servidor Zookeeper e o cliente,
    o tempo básico usado pelo Zookeeper em milissegundos , o intervalo de tempo para manter pulsações entre servidores ou entre o cliente e o servidor, ou seja, uma pulsação irá ser enviado a cada tickTime, A unidade de tempo é milissegundos. É usado para o mecanismo de pulsação e define o tempo limite mínimo da sessão para duas vezes o tempo de pulsação. (O tempo limite mínimo da sessão é 2 * tickTime)

  • 2 initLimit = 10: limite de tempo de comunicação inicial LF
    O número máximo de pulsações (o número de tickTimes) que pode ser tolerado durante a conexão inicial entre o servidor seguidor no cluster e o servidor líder líder. Use-o para limitar o servidor Zookeeper no cluster para se conectar ao Líder. limite de tempo.

  • 3 - syncLimit = 5: limite de tempo de comunicação de sincronização LF
    A unidade de tempo máximo de resposta entre Líder e Seguidor no cluster.Se a resposta exceder syncLimit * tickTime, o Líder pensa que o seguidor está morto e exclui o seguidor da lista de servidores.

  • 4 dataDir: diretório do arquivo de dados + caminho de persistência de dados. Usado principalmente para salvar dados no Zookeeper.

  • 5 clientPort = 2181: porta de conexão do cliente, porta de escuta para conexão do cliente.

Três. Princípio interno do Zookeeper

3.1 Mecanismo de eleição

  • 1) Meio mecanismo: Mais da metade das máquinas do cluster sobrevivem e o cluster está disponível. Portanto, o Zookeeper é adequado para instalar um número ímpar de servidores.

  • 2) Embora o Zookeeper não especifique Master e Slave no arquivo de configuração. No entanto, quando o Zookeeper funciona, um nó é Líder e os outros são Seguidores. Os líderes são gerados temporariamente por meio de um mecanismo de eleição interno.

  • 3) Pegue um exemplo simples para ilustrar todo o processo eleitoral.
    Suponha que haja um cluster Zookeeper composto de cinco servidores, seus ids são de 1 a 5 e todos eles foram iniciados recentemente, ou seja, não há dados históricos e a quantidade de dados armazenados é a mesma. Supondo que esses servidores sejam iniciados em sequência, vamos ver o que acontece, conforme mostrado na figura.
    Insira a descrição da imagem aqui

  • (1) O servidor 1 é iniciado, neste momento apenas um dos servidores é iniciado, e a mensagem que ele envia não tem resposta, então seu status de eleição é sempre OLHANDO.

  • (2) O servidor 2 é iniciado. Ele se comunica com o servidor 1, que começou no início, e troca seus próprios resultados de eleição. Como ambos não têm dados históricos, o servidor 2 com o maior valor de id vence, mas não alcança mais mais da metade Todos os servidores concordam em votar nele (mais da metade neste exemplo são 3), então os servidores 1 e 2 continuam a manter o estado LOOKING.

  • (3) Inicia o servidor 3. De acordo com a análise teórica anterior, o servidor 3 passa a ser o chefe dos servidores 1, 2 e 3. A diferença é que, neste momento, três servidores o elegeram, passando a ser o Líder da eleição.

  • (4) Inicia o servidor 4. De acordo com a análise anterior, em teoria, o servidor 4 deveria ser o maior entre os servidores 1, 2, 3 e 4. No entanto, como mais da metade dos servidores elegeu o servidor 3, ele só pode receber o irmão mais novo está morto.

  • (5) O servidor 5 é iniciado e se torna uma criança como 4.

3.2 Tipo de nó

Insira a descrição da imagem aqui

3.3 Estrutura estatística

Use o comando get para obter o conteúdo dos dados e as informações de atributo do ZNode especificado. Por exemplo:

[zk: localhost:2181(CONNECTED) 12] get /zk-huey
000
cZxid = 0x20000007c
ctime = Wed Mar 04 22:01:46 CST 2015
mZxid = 0x20000007c
mtime = Wed Mar 04 22:01:46 CST 2015
pZxid = 0x200000080
cversion = 4
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 4

A primeira linha de saída é o conteúdo de dados de ZNode, seguido pelas informações de status de ZNode. Os atributos das informações de status são descritos a seguir:
1) czxid - a transação zxid que criou o nó
receberá um carimbo de data / hora na forma de zxid cada vez que o status do ZooKeeper for modificado, que é o ID de transação do ZooKeeper.
O ID da transação é a sequência total de todas as modificações no ZooKeeper. Cada modificação possui um zxid exclusivo; se zxid1 for menor que zxid2, então zxid1 ocorrerá antes de zxid2.
2) ctime-o número de milissegundos quando o znode foi criado (desde 1970)
3) mzxid-a última transação zxid da atualização do znode
4) mtime-o número de milissegundos quando o znode foi modificado pela última vez (desde 1970)
5) o última atualização do nó filho pZxid-znode zxid
6) número de alteração do nó filho cversion-znode, número de modificação do nó filho znode
7) número de alteração de dados dataversion-znode
8) número de alteração da lista de controle de acesso aclVersion-znode
9) ephemeralOwner-se for um nó temporário, é propriedade de znode O id de sessão da pessoa. Se não for um nó temporário, é 0.
10) dataLength- comprimento de dados do znode
11) numChildren - o número de nós filhos znode

3.4 Princípio do ouvinte

Insira a descrição da imagem aqui

3.5 Escrever fluxo de dados

Insira a descrição da imagem aqui

4. Instalação, implantação e teste distribuídos do Zookeeper

4.1 Instalação básica do ambiente

Grave o script do linux: xsync (diretório de arquivos de sincronização)
https://blog.csdn.net/weixin_44318830/article/details/104439628?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_istribute_1 pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight .

Além disso, adicionei o mapeamento entre o IP do servidor e o nome do host no cluster no arquivo / etc / hosts

4.2 construção de cluster

1 Planejamento de cluster

Implante o Zookeeper em três nós de hadoop102, hadoop103 e hadoop104.

2 Descompacte e instale

(1) Descompacte o pacote de instalação do Zookeeper no diretório / opt / module /

[atguigu @ hadoop102 software] $ tar -zxvf zookeeper-3.4.10.tar.gz -C / opt / module /

(2) Sincronizar o conteúdo do diretório /opt/module/zookeeper-3.4.10 para hadoop103, hadoop104

[módulo atguigu @ hadoop102] $ xsync zookeeper-3.4.10 /

3 - Configure o número do servidor

(1) Crie zkData no diretório /opt/module/zookeeper-3.4.10/

[atguigu @ hadoop102 zookeeper-3.4.10] $ mkdir -p zkData

(2) Crie um arquivo myid no diretório /opt/module/zookeeper-3.4.10/zkData

[atguigu @ hadoop102 zkData] $ touch myid

Adicione o arquivo myid, note que ele deve ser criado no linux, pode ser truncado no notepad ++

(3) Edite o arquivo myid

[atguigu @ hadoop102 zkData] $ vi myid

Adicione o número correspondente ao servidor no arquivo:

2

(4) Copie o zookeeper configurado para outras máquinas

[atguigu @ hadoop102 zkData] $ xsync myid

E modifique o conteúdo no arquivo myid para 3 e 4 no hadoop102 e hadoop103 respectivamente

4 Configurar o arquivo zoo.cfg

(1) Renomeie zoo_sample.cfg no diretório /opt/module/zookeeper-3.4.10/conf para zoo.cfg

[atguigu @ hadoop102 conf] $ mv zoo_sample.cfg zoo.cfg

(2) Abra o arquivo zoo.cfg

[atguigu @ hadoop102 conf] $ vim zoo.cfg

Modifique a configuração do caminho de armazenamento de dados

dataDir = / opt / module / zookeeper-3.4.10 / zkData

Adicione a seguinte configuração

#######################grupo##########################

server.2 = hadoop102: 2888: 3888

server.3 = hadoop103: 2888: 3888

server.4 = hadoop104: 2888: 3888

(3) Sincronizar arquivo de configuração zoo.cfg

[atguigu @ hadoop102 conf] $ xsync zoo.cfg

(4) Interpretação dos parâmetros de configuração

servidor.A = B: C: D。

A é um número, indicando qual servidor é esse número;

Configure um arquivo myid no modo de cluster. Este arquivo está no diretório dataDir. Há um dado neste arquivo que tem o valor A. Quando o Zookeeper for iniciado, leia este arquivo e compare os dados com as informações de configuração em zoo.cfg para determinar qual servidor é?

B é o endereço IP deste servidor;

C é a porta para este servidor trocar informações com o servidor Leader no cluster;

D significa que caso o servidor Leader no cluster desligue, uma porta é necessária para reeleger e selecionar um novo líder, esta porta é usada para se comunicarem entre si quando a eleição é executada.

4 Operação de cluster

(1) Inicie o Zookeeper separadamente

[atguigu @ hadoop102 zookeeper-3.4.10] $ bin / zkServer.sh start

[atguigu @ hadoop103 zookeeper-3.4.10] $ bin / zkServer.sh start

[atguigu @ hadoop104 zookeeper-3.4.10] $ bin / zkServer.sh start

(2) Ver status

[atguigu @ hadoop102 zookeeper-3.4.10] # bin / zkServer.sh status

JMX habilitado por padrão

Usando config: /opt/module/zookeeper-3.4.10/bin/…/conf/zoo.cfg

Modo: seguidor

[atguigu @ hadoop103 zookeeper-3.4.10] # bin / zkServer.sh status

JMX habilitado por padrão

Usando config: /opt/module/zookeeper-3.4.10/bin/…/conf/zoo.cfg

Modo: líder

[atguigu @ hadoop104 zookeeper-3.4.5] # bin / zkServer.sh status

JMX habilitado por padrão

Usando config: /opt/module/zookeeper-3.4.10/bin/…/conf/zoo.cfg

Modo: seguidor

Aqui você deve prestar atenção ao nome de host do servidor correspondente em seu cluster e ao script xsync

4.3 Iniciar o cluster

Desligue o firewallHttps://blog.csdn.net/ytangdigl/article/details/79796961 .

(1)分别启动Zookeeper

[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start

[atguigu@hadoop103 zookeeper-3.4.10]$ bin/zkServer.sh start

[atguigu@hadoop104 zookeeper-3.4.10]$ bin/zkServer.sh start

(2)查看状态

[atguigu@hadoop102 zookeeper-3.4.10]# bin/zkServer.sh status

JMX enabled by default

Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg

Mode: follower

[atguigu@hadoop103 zookeeper-3.4.10]# bin/zkServer.sh status

JMX enabled by default

Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg

Mode: leader

[atguigu@hadoop104 zookeeper-3.4.5]# bin/zkServer.sh status

JMX enabled by default

Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg

Mode: follower

Iniciar o zookeeper mostra sucesso, mas a visualização de status mostra que não está em execução (para clusters)Https://blog.csdn.net/qq_26230421/article/details/80700912 .

4.4 Operação de comando do cliente

Insira a descrição da imagem aqui

1 Inicie o cliente

[atguigu@hadoop103 zookeeper-3.4.10]$ bin/zkCli.sh

2 Mostrar todos os comandos de operação

[zk: localhost:2181(CONNECTED) 1] help

3 - Veja o conteúdo contido no znode atual

[zk: localhost:2181(CONNECTED) 0] ls /

4 Ver dados detalhados do nó atual

[zk: localhost:2181(CONNECTED) 1] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

5 Crie 2 nós comuns separadamente

[zk: localhost:2181(CONNECTED) 3] create /sanguo "jinlian"
Created /sanguo
[zk: localhost:2181(CONNECTED) 4] create /sanguo/shuguo "liubei"
Created /sanguo/shuguo

6 Obtenha o valor do nó

[zk: localhost:2181(CONNECTED) 5] get /sanguo
jinlian
cZxid = 0x100000003
ctime = Wed Aug 29 00:03:23 CST 2018
mZxid = 0x100000003
mtime = Wed Aug 29 00:03:23 CST 2018
pZxid = 0x100000004
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 1
[zk: localhost:2181(CONNECTED) 6]
[zk: localhost:2181(CONNECTED) 6] get /sanguo/shuguo
liubei
cZxid = 0x100000004
ctime = Wed Aug 29 00:04:35 CST 2018
mZxid = 0x100000004
mtime = Wed Aug 29 00:04:35 CST 2018
pZxid = 0x100000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

7 Crie nós efêmeros

[zk: localhost:2181(CONNECTED) 7] create -e /sanguo/wuguo "zhouyu"
Created /sanguo/wuguo

(1) Pode ser visualizado no cliente atual

[zk: localhost:2181(CONNECTED) 3] ls /sanguo 
[wuguo, shuguo]

(2) Saia do cliente atual e reinicie o cliente

[zk: localhost:2181(CONNECTED) 12] quit
[atguigu@hadoop104 zookeeper-3.4.10]$ bin/zkCli.sh

(3) Verifique novamente se o nó curto no diretório raiz foi excluído

[zk: localhost:2181(CONNECTED) 0] ls /sanguo
[shuguo]

8 Crie um nó com um número de série
(1) Primeiro crie um nó raiz comum / sanguo / weiguo

[zk: localhost:2181(CONNECTED) 1] create /sanguo/weiguo "caocao"
Created /sanguo/weiguo

(2) Crie um nó com um número de série

[zk: localhost:2181(CONNECTED) 2] create -s /sanguo/weiguo/xiaoqiao "jinlian"
Created /sanguo/weiguo/xiaoqiao0000000000
[zk: localhost:2181(CONNECTED) 3] create -s /sanguo/weiguo/daqiao "jinlian"
Created /sanguo/weiguo/daqiao0000000001
[zk: localhost:2181(CONNECTED) 4] create -s /sanguo/weiguo/diaocan "jinlian"
Created /sanguo/weiguo/diaocan0000000002

Se não houver nenhum nó de número de sequência, o número de sequência começa em 0 e aumenta sequencialmente. Se já houver 2 nós sob o nó original, o reordenamento começa a partir de 2 e assim por diante.
9 Modificar o valor dos dados do nó

[zk: localhost:2181(CONNECTED) 6] set /sanguo/weiguo "simayi"

10 Monitoramento de alteração de valor de nó
(1) Registre-se para monitorar / alterações de dados de nó sanguo no host hadoop104

[zk: localhost:2181(CONNECTED) 26] [zk: localhost:2181(CONNECTED) 8] get /sanguo watch

(2) Modifique os dados do nó / sanguo no host hadoop103

[zk: localhost:2181(CONNECTED) 1] set /sanguo "xisi"

(3) Observe o monitoramento das alterações de dados recebidas pelo host hadoop104

WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo

11 O monitoramento de mudança de nó filho do nó (mudança de caminho)
(1) Registre-se para ouvir no hadoop104 host / nó sanguo mudança de nó filho

[zk: localhost:2181(CONNECTED) 1] ls /sanguo watch
[aa0000000001, server101]

(2) Criar nós filhos no nó hadoop103 host / sanguo

[zk: localhost:2181(CONNECTED) 2] create /sanguo/jin "simayi"
Created /sanguo/jin

(3) Observe que o host hadoop104 recebe o monitoramento das alterações do nó filho

WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo

12 Excluir nó

[zk: localhost:2181(CONNECTED) 4] delete /sanguo/jin

13 Excluir nós recursivamente

[zk: localhost:2181(CONNECTED) 15] rmr /sanguo/shuguo

14 Ver o status do nó

[zk: localhost:2181(CONNECTED) 17] stat /sanguo
cZxid = 0x100000003
ctime = Wed Aug 29 00:03:23 CST 2018
mZxid = 0x100000011
mtime = Wed Aug 29 00:21:23 CST 2018
pZxid = 0x100000014
cversion = 9
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 1

4.5 aplicativo API

O código de teste foi carregado para minha nuvem de código: https://gitee.com/hdyxk/learning-from .

Acho que você gosta

Origin blog.csdn.net/weixin_44726976/article/details/108883924
Recomendado
Clasificación