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.
1.2 Recursos
1.3 Estrutura de dados
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.
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.
-
(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ó
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
3.5 Escrever fluxo de dados
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 firewall:Https://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
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 .