Guide de démarrage Xiaobai | Démarrage rapide de Zookeeper

Premiers pas avec Zookeeper

Aperçu

Projet Open source, distribué, Apache pour les applications distribuées

Mécanisme de travail

Zookeeper comprend du point de vue des modèles de conception: il s'agit d'un cadre de gestion de service distribué conçu sur la base du modèle d'observateur. Il est responsable de la gestion du stockage et de la gestion des données qui intéressent tout le monde, puis accepte l'enregistrement de l'observateur. Une fois l'état de ces derniers changements de données, zookeeper sera responsable d'avertir les observateurs qui se sont inscrits auprès de zookeeper de répondre en conséquence

caractéristique

  • Cohérence globale des données
  • fiabilité
  • Séquentiel
  • Atomicité de mise à jour des données
  • temps réel

rôle de gardien de zoo

  • Leader

Le cœur du cluster Zookeeper est
le seul planificateur et processeur de demandes de transaction (opérations d'écriture), assurant la séquence des transactions dans le
cluster ; le planificateur de chaque serveur du cluster.
Pour les demandes de création, setData, suppression et autres écritures, elles doivent être transmises au responsable pour traitement. Le responsable doit déterminer le numéro et effectuer l'opération. Ce processus est appelé une transaction.

  • Disciple

Traiter les demandes de non-transaction des clients, transmettre les demandes de transaction au leader;
participer à l'élection du leader du cluster.

  • Observateur

Rôle d'observateur, observez les derniers changements d'état du cluster zookeeper et synchronisez ces états. Il peut traiter les demandes non transactionnelles séparément et transmettre les demandes de transaction au chef pour traitement. Il
ne participe à aucune forme de vote et fournit uniquement services non transactionnels.

Construction d'un cluster de gardiens de zoo

Étapes de construction

  • Configurer le mappage du nom d'hôte sur l'adresse IP
  • Modifier le fichier de configuration du gardien de zoo
  • Copiez et distribuez à distance les fichiers d'installation
  • Définir myid
  • Démarrer le cluster zookeeper

Processus de construction

1. Téléchargez zookeeper wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
2. Décompressez-le dans / usr / local / src sous tar - xvzf zookeeper-3.4.13.tar.gz
3. Renommé mv zookeeper-3.4.13 zookeeper
4. Entrez dans le répertoire conf
5. Copiez trois copies de zoo_sample.cfg et nommez-les zoo_1.cfg zoo_2.cfg zoo_3.cfg
6 . Modifier Le contenu de zoo_1.cfg est le suivant

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/data/zk1/data
clientPort=2181
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

7. Modifiez le contenu de zoo_2.cfg comme suit

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/data/zk1/data
clientPort=2182
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

8. Modifiez le contenu de zoo_3.cfg comme suit

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/data/zk1/data
clientPort=2183
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

9. Exécutez la commande pour créer le dossier et myid

mkdir -p /usr/local/data/zk1/data
mkdir -p /usr/local/data/zk2/data
mkdir -p /usr/local/data/zk3/data
echo "1" > /usr/local/data/zk1/data/myid
echo "2" > /usr/local/data/zk2/data/myid
echo "3" > /usr/local/data/zk3/data/myid

10. Exécutez la commande suivante dans le répertoire bin pour démarrer le cluster zookeepe

zkServer status ../conf/zoo_1.cfg
zkServer status ../conf/zoo_2.cfg
zkServer status ../conf/zoo_3.cfg

11.Exécutez les commandes suivantes dans le répertoire bin pour afficher l'état de chaque nœud

zkServer.sh status ../conf/zoo_1.cfg
zkServer.sh status ../conf/zoo_2.cfg
zkServer.sh status ../conf/zoo_3.cfg

modèle de données de gardien de zoo

  • Znode a à la fois des fonctionnalités de fichiers et de répertoires
  •   即像文件一样维护着数据又像目录一样可作为路径标识的一部分
    
  • Znode a un fonctionnement atomique
  • Le stockage Znode a une limite de niveau Ko
  • Znode est référencé par chemin, et le chemin doit être absolu
  • Composition de Znoe
    1. informations sur l'état des statistiques, décrivant la version et les informations d'autorisation du Znode
    2. data Les données associées au Znode
    3. enfants les nœuds enfants sous le Znode
  • Type de nœud
    1. La session du nœud temporaire se termine, le nœud temporaire est automatiquement supprimé et le nœud temporaire n'est pas autorisé à avoir des nœuds enfants
    2. Les nœuds permanents disparaissent sauf s'ils sont supprimés manuellement et ne peuvent pas être modifiés en nœuds temporaires
    3. Sérialiser le nœud
  • Attributs de nœud
    1. dataversion modifiera dataversion après chaque set
    2. Cversion sera mis à jour après la modification du nœud enfant de la cversion
    3. ID de transaction czxid créé par Znode
    4. mzxid L'ID de transaction qui a été modifié
    5. heure de création du nœud ctime
    6. heure de mise à jour du nœud mtime
    7. ephemeralOwner Si le nœud est un nœud temporaire, la valeur identifie l'identifiant de session lié au nœud, sinon, il vaut 0

commande gardien de zoo

  • Créer une connexion
zkCli.sh -p host:port
  • Créer un nœud
create [-e] [-s] path acl
-e 创建临时节点 -s 创建序列化节点
  • Supprimer le nœud
delete path
不能删除有子节点的节点,除非子节点内容为空
  • Supprimer les nœuds de manière récursive
rmr path
  • Limite de nœud
setquota -n | -b val path
n 标识子节点个数 -b 表示数据大小
listquota 查看设置信息
delquota -n | -b path 删除设置信息
  • Commande historique
history 查看历史命令
redo num 重新执行某条命令   

Gardien de zoo

Zookeeper fournit une fonction de publication / abonnement de données distribuées. Zookeeper introduit un mécanisme d'observation pour réaliser cette fonction de notification distribuée. Zookeeper permet au client d'enregistrer un observateur sur le serveur. Lorsque certains événements sur le serveur déclenchent l'observateur, alors il souhaite que le client envoie notifications.
Types d'événements déclencheurs: suppression de nœud, changement de nœud, changement de nœud enfant, etc.
En général, l'observateur est résumé comme les trois processus suivants: le client enregistre l'observateur auprès du serveur, l'événement serveur déclenche l'observateur et le client rappelle l'observateur pour obtenir le contenu de l'événement déclencheur.

Caractéristiques du mécanisme de déclenchement

  • Déclencheur unique
  • Encapsulation d'événements
  •   传递watchedevent,包括通知状态,事件类型,节点路径。
    
  • Envoi d'événement asynchrone
  • Inscrivez-vous d'abord, puis déclenchez

Observateur d'opérations Shell

help 查看所有命令,后面带有watcher的都可以实现监听

	stat path [watch]
	ls path [watch]
	ls2 path [watch]
	get path [watch]

API Java de Zookeeper

  • Introduire des dépendances
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.14</version>
    </dependency>
  • Exemple de code
    public static void main(String[] args) throws Exception{
        ZooKeeper zooKeeper = new ZooKeeper("192.168.195.100:2181,192.168.195.100:2182", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println("回调通知");
                System.out.println(watchedEvent.getPath());
                System.out.println(watchedEvent.getState());
                System.out.println(watchedEvent.getType());
            }
        });
//        zooKeeper.create("/magicbook","充满魔力的book".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        zooKeeper.getData("/magicbook0000000007",true,null);
        zooKeeper.setData("/magicbook0000000007","少时诵诗书".getBytes(),-1);
        zooKeeper.delete("/magicbook0000000007",-1);
        //        zooKeeper.close();
    }

Mécanisme d'élection de gardien de zoo

L'algorithme d'élection par défaut de Zookeeper est la sélection rapide, qui utilise plus de la moitié des votes pour gagner

concept

  • Identifiant du serveur
  •   id越大,在选举算法中权重越大
    
  • Statut électoral
    1. État de la campagne VERROUILLAGE
    2. Statut du suiveur SUIVI Synchronisez le statut du leader pour participer au vote
    3. Statut d'observation Synchronisation OBSERVER Le statut du leader ne participe pas au vote
    4. Statut de leader

  • La version des dernières données stockées dans le serveur d' ID de données , plus la valeur est élevée, plus les données sont récentes

Nouvelle élection de cluster

  • Chaque machine vote pour elle-même VERROUILLAGE
  • Le grand identifiant du serveur peut gagner les petits votes d'identité
  • Plus de la moitié des votes sont terminés
  • Pour le moment, si un identifiant de serveur plus grand vient à l'élection, je suis désolé. Le vote est terminé

Non-nouveau cluster

Pour un cluster de gardien de zoo qui fonctionne normalement, il y a un temps d'arrêt de la machine au milieu et l'élection doit être réélue. L'ID de données, l'ID de serveur et l'horloge logique doivent être ajoutés au processus d'élection.

  • ID de données: la nouvelle version des données est plus grande et les données mettront à jour la version à chaque fois
  • ID du serveur: est le myid que nous avons configuré
  • Cette valeur commence à 0 et chaque élection correspond à une valeur. Si dans la même élection, c'est la même chose.
  • Le processus d'élection
    1. L'horloge logique est ignorée et le vote est re-voté.
    2. Après unification de l'horloge logique, l'ID de données l'emporte.
    3. Dans le cas du même ID de données, le serveur avec l'ID le plus grand l'emporte.
    4. Enfin, choisissez le chef

application typique

Publication de données et abonnement

En surveillant à plusieurs reprises les événements de changement de nœud, en utilisant Watcher pour surveiller, réaliser la publication de données et l'abonnement

Serrure distribuée

1. Chaque client crée un noeud ordonné temporaire.
2. Le client obtient la liste des noeuds et juge s'il s'agit du premier noeud de la liste. S'il s'agit du premier noeud de la liste, il obtient le verrou. Si ce n'est pas le cas, il surveille le nœud précédent et attend que le nœud précédent soit supprimé.
3. Si le verrou est acquis, le processus métier normal est exécuté et le verrou est libéré après l'exécution.
À l'étape 2 ci-dessus, certaines personnes peuvent s'inquiéter du fait que si le nœud constate qu'il ne s'agit pas du nœud avec la plus petite séquence, il est prêt à ajouter un écouteur, mais à ce stade, le nœud précédent est simplement supprimé. Ajout d'un écouteur à cette fois ne fonctionnera jamais.En fait, l'API zk peut garantir que la lecture et l'ajout d'écouteurs sont une opération atomique.
Pourquoi écouter le nœud précédent au lieu de tous les nœuds? En effet, si vous surveillez tous les nœuds enfants, l'état de tout nœud enfant change, tous les autres nœuds enfants recevront des notifications (effet de troupeau), et nous voulons que le nœud enfant suivant reçoive uniquement des notifications.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_34311210/article/details/106109440
conseillé
Classement