Installation et utilisation de Zookeeper

1. Premiers pas avec Zookeeper

1.1 Aperçu

Zookeeper est un projet Apache distribué open source qui fournit des services de coordination pour les applications distribuées.

Insérez la description de l'image ici

1.2 Caractéristiques

Insérez la description de l'image ici

1.3 Structure des données

Insérez la description de l'image ici

1.4 Scénarios d'application

Les services fournis comprennent: un service de dénomination unifié, une gestion de configuration unifiée, une gestion unifiée des clusters, des nœuds de serveur dynamiques en ligne et hors ligne et un équilibrage de charge souple.
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici

1.5 URL de téléchargement

Le package d'installation de Zookeeper linux64 bits a été téléchargé sur mon nuage de code.
Lien: https://gitee.com/hdyxk/learning-from .

2. Construction de l'environnement en mode local

2.1 Construction de l'environnement de base

1. VM build centos7 : https://blog.csdn.net/babyxue/article/details/80970526?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160128451719724848323088%2522%252C%252225325cm% ...% 2522% 257D & the request_id = 160128451719724848323088 & biz_id = 0 & utm_medium = distribuer.pc_search_result.none-Task-Blog-2 Tous baidu_landing_v2 ~ default-1-80970526.first_rank_ecpm_v3_pc_rank% 90% VM_tterm AD% E5% BB% BAcentos7 & SPM = 1018.2118.3001.4187 .
2. Installez jdk dans centos7 : https://www.cnblogs.com/sxdcgaq8080/p/7492426.html .

2.2 Construction du mode local de gardien de zoo

Adresse du blog: https://www.cnblogs.com/zwcry/p/10244908.html .

2.3 Interprétation des paramètres de configuration

La signification des paramètres dans le fichier de configuration zoo.cfg dans Zookeeper est interprétée comme suit:

  • 1. tickTime = 2000: le nombre de pulsations de communication, le temps de pulsation entre le serveur et le client Zookeeper,
    le temps de base utilisé par Zookeeper en millisecondes , l'intervalle de temps pour maintenir les pulsations entre les serveurs ou entre le client et le serveur, c'est-à-dire qu'un battement de cœur va être envoyé à chaque tickTime, l'unité de temps est la milliseconde. Il est utilisé pour le mécanisme de pulsation et définit le délai d'expiration de session minimum à deux fois le temps de pulsation. (Le délai minimum de session est de 2 * tickTime)

  • 2. initLimit = 10: Limite de temps de communication initiale LF
    Nombre maximum de pulsations (le nombre de tickTimes) pouvant être tolérés lors de la connexion initiale entre le serveur Follower du cluster et le serveur leader Leader. Utilisez-le pour limiter le serveur Zookeeper dans le cluster pour se connecter à la limite de temps Leader.

  • 3. syncLimit = 5: Limite de temps de communication de synchronisation LF
    Unité de temps de réponse maximal entre le leader et le suiveur dans le cluster. Si la réponse dépasse syncLimit * tickTime, le leader pense que le suiveur est mort et supprime le suiveur de la liste des serveurs.

  • 4. dataDir: répertoire du fichier de données + chemin de persistance des données. Principalement utilisé pour enregistrer des données dans Zookeeper.

  • 5. clientPort = 2181: port de connexion client, port d'écoute pour la connexion client.

3. Principe interne du gardien de zoo

3.1 Mécanisme d'élection

  • 1) Demi-mécanisme: plus de la moitié des machines du cluster survivent et le cluster est disponible. Zookeeper convient donc à l'installation d'un nombre impair de serveurs.

  • 2) Bien que Zookeeper ne spécifie pas Master et Slave dans le fichier de configuration. Cependant, lorsque Zookeeper fonctionne, un nœud est Leader et les autres sont Followers.Les Leaders sont temporairement générés via un mécanisme d'élection interne.

  • 3) Prenons un exemple simple pour illustrer l'ensemble du processus électoral.
    Supposons qu'il existe un cluster Zookeeper composé de cinq serveurs, leurs identifiants vont de 1 à 5 et ils sont tous nouvellement démarrés, c'est-à-dire qu'il n'y a pas de données historiques et que la quantité de données stockées est la même. En supposant que ces serveurs sont démarrés en séquence, voyons ce qui se passe, comme le montre la figure.
    Insérez la description de l'image ici

  • (1) Le serveur 1 est démarré. À ce stade, un seul des serveurs est démarré et le message qu'il envoie n'a pas de réponse, donc son statut d'élection est toujours LOOKING.

  • (2) Le serveur 2 est démarré. Il communique avec le serveur 1 qui a démarré au début et échange ses propres résultats d'élection. Comme les deux n'ont pas de données historiques, le serveur 2 avec la plus grande valeur d'ID gagne, mais il n'atteint pas plus de la moitié Tous les serveurs acceptent de voter pour lui (plus de la moitié dans cet exemple sont 3), donc les serveurs 1 et 2 continuent à maintenir l'état LOOKING.

  • (3) Démarrage du serveur 3. Selon l'analyse théorique précédente, le serveur 3 devient le chef des serveurs 1, 2 et 3. La différence est qu'à ce moment, trois serveurs l'ont élu, il est donc devenu le chef de l'élection.

  • (4) Démarrage du serveur 4. Selon l'analyse précédente, en théorie, le serveur 4 devrait être le plus grand parmi les serveurs 1, 2, 3 et 4. Cependant, comme plus de la moitié des serveurs ont choisi le serveur 3, il ne peut recevoir Petit frère est mort.

  • (5) Le serveur 5 démarre et devient un enfant comme 4.

3.2 Type de nœud

Insérez la description de l'image ici

3.3 Structure statistique

Utilisez la commande get pour obtenir le contenu des données et les informations d'attribut du ZNode spécifié. Par exemple:

[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

La première ligne de sortie est le contenu des données de ZNode, suivi des informations d'état de ZNode. Les attributs des informations d'état sont décrits comme suit:
1) czxid-la transaction zxid qui a créé le nœud
recevra un horodatage sous la forme de zxid chaque fois que l'état ZooKeeper est modifié, qui est l'ID de transaction ZooKeeper.
L'ID de transaction est la séquence totale de toutes les modifications dans ZooKeeper. Chaque modification a un zxid unique, si zxid1 est inférieur à zxid2, alors zxid1 se produit avant zxid2.
2) ctime-le nombre de millisecondes lorsque le znode a été créé (depuis 1970)
3) mzxid-la dernière transaction zxid de la mise à jour du znode
4) mtime-le nombre de millisecondes lorsque le znode a été modifié pour la dernière fois (depuis 1970)
5) le dernière mise à jour du nœud enfant pZxid-znode zxid
6) numéro de modification du nœud enfant cversion-znode, numéro de modification du nœud enfant znode
7) numéro de modification des données dataversion-znode
8) numéro de modification de la liste de contrôle d'accès aclVersion-znode
9) ephemeralOwner-if it is a nœud temporaire, il appartient à znode L'identifiant de session de la personne. S'il ne s'agit pas d'un nœud temporaire, il vaut 0.
10) dataLength - longueur de données de znode
11) numChildren-le nombre de nœuds enfants znode

3.4 Principe de l'auditeur

Insérez la description de l'image ici

3.5 Ecrire le flux de données

Insérez la description de l'image ici

4. Installation, déploiement et test distribués de Zookeeper

4.1 Installation de l'environnement de base

Ecrire le script linux: xsync (répertoire du fichier de synchronisation)
https://blog.csdn.net/weixin_44318830/article/details/104439628?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.spthu_weight_machineLearnPai2-1.spthu_weight_machineLearnPai2-1. pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight .

De plus, j'ai ajouté le mappage entre l'adresse IP du serveur et le nom d'hôte dans le cluster dans le fichier / etc / hosts

4.2 Construction du cluster

1. Planification de cluster

Déployez Zookeeper sur trois nœuds de hadoop102, hadoop103 et hadoop104.

2. Décompressez et installez

(1) Décompressez le package d'installation de Zookeeper dans le répertoire / opt / module /

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

(2) Synchronisez le contenu du répertoire /opt/module/zookeeper-3.4.10 avec hadoop103, hadoop104

[module atguigu @ hadoop102] $ xsync zookeeper-3.4.10 /

3. Configurer le numéro de serveur

(1) Créez zkData dans le répertoire /opt/module/zookeeper-3.4.10/

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

(2) Créez un fichier myid dans le répertoire /opt/module/zookeeper-3.4.10/zkData

[atguigu @ hadoop102 zkData] $ touch myid

Ajoutez le fichier myid, notez qu'il doit être créé sous linux, il peut être déformé dans notepad ++

(3) Modifiez le fichier myid

[atguigu @ hadoop102 zkData] $ vi myid

Ajoutez le numéro correspondant au serveur dans le fichier:

2

(4) Copiez le gardien de zoo configuré sur d'autres machines

[atguigu @ hadoop102 zkData] $ xsync myid

Et modifiez le contenu du fichier myid en 3 et 4 sur hadoop102 et hadoop103 respectivement

4. Configurer le fichier zoo.cfg

(1) Renommez zoo_sample.cfg dans le répertoire /opt/module/zookeeper-3.4.10/conf en zoo.cfg

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

(2) Ouvrez le fichier zoo.cfg

[atguigu @ hadoop102 conf] $ vim zoo.cfg

Modifier la configuration du chemin de stockage des données

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

Ajoutez la configuration suivante

#######################grappe##########################

serveur.2 = hadoop102: 2888: 3888

serveur.3 = hadoop103: 2888: 3888

serveur.4 = hadoop104: 2888: 3888

(3) Synchroniser le fichier de configuration zoo.cfg

[atguigu @ hadoop102 conf] $ xsync zoo.cfg

(4) Interprétation des paramètres de configuration

serveur.A = B: C: D。

A est un nombre, indiquant quel serveur est ce numéro;

Configurez un fichier myid en mode cluster. Ce fichier se trouve dans le répertoire dataDir. Il y a une donnée dans ce fichier qui est la valeur A. Lorsque Zookeeper démarre, lisez ce fichier et comparez les données avec les informations de configuration dans zoo.cfg à déterminer de quel serveur s'agit-il?

B est l'adresse IP de ce serveur;

C est le port permettant à ce serveur d'échanger des informations avec le serveur Leader du cluster;

D signifie que si le serveur Leader du cluster raccroche, un port est nécessaire pour réélire et sélectionner un nouveau leader. Ce port est utilisé pour communiquer entre eux lorsque l'élection est exécutée.

4. Fonctionnement en cluster

(1) Démarrez Zookeeper séparément

[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) Afficher l'état

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

JMX activé par défaut

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

Mode: suiveur

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

JMX activé par défaut

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

Mode: leader

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

JMX activé par défaut

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

Mode: suiveur

Ici, vous devez faire attention au nom d'hôte du serveur correspondant dans votre cluster et au script xsync

4.3 Démarrez le cluster

Désactivez le pare-feuHttps://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

Le démarrage de zookeeper indique un succès, mais la vue de l'état ne fonctionne pas (pour les clusters)Https://blog.csdn.net/qq_26230421/article/details/80700912 .

4.4 Fonctionnement de la commande client

Insérez la description de l'image ici

1. Démarrez le client

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

2. Afficher toutes les commandes d'opération

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

3. Afficher le contenu contenu dans le znode actuel

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

4. Afficher les données détaillées du nœud actuel

[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. Créez 2 nœuds ordinaires séparément

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

6. Obtenez la valeur du nœud

[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

sept. Créer des nœuds éphémères

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

(1) Il peut être consulté sur le client actuel

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

(2) Quittez le client actuel puis redémarrez le client

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

(3) Vérifiez à nouveau que le nœud court dans le répertoire racine a été supprimé

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

8. Créez un nœud avec un numéro de série
(1) Créez d'abord un nœud racine commun / sanguo / weiguo

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

(2) Créez un nœud avec un numéro 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

S'il n'y a pas de nœud de numéro de séquence, le numéro de séquence commence à 0 et augmente séquentiellement. S'il y a déjà 2 nœuds sous le nœud d'origine, la réorganisation commence à partir de 2, et ainsi de suite.
9. Modifier la valeur des données du nœud

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

dix. Surveillance des changements de valeur de nœud
(1) Enregistrez-vous pour surveiller / les changements de données de nœud sanguo sur l'hôte hadoop104

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

(2) Modifier les données du nœud / sanguo sur l'hôte hadoop103

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

(3) Observer la surveillance des changements de données reçus par l'hôte hadoop104

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

11. Surveillance du changement de nœud enfant du nœud (changement de chemin)
(1) Enregistrez-vous pour écouter le changement de nœud enfant de l'hôte hadoop104 / du nœud sanguo

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

(2) Créer des nœuds enfants sur l'hôte hadoop103 / nœud sanguo

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

(3) Observez que l'hôte hadoop104 reçoit la surveillance des changements de nœud enfant

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

12. Supprimer le nœud

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

13. Supprimer les nœuds de manière récursive

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

14. Afficher l'état du nœud

[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 Application API

Le code de test a été téléchargé sur mon nuage de code: https://gitee.com/hdyxk/learning-from .

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44726976/article/details/108883924
conseillé
Classement