Série ZooKeeper : installation et sessions en cluster

Installation de cluster

Avant d'installer zookeeper, vous devez d'abord installer l'environnement Java.

Cet article Version de ZooKeeper : 3.8.0

Télécharger et décompresser

Avant de commencer, vous devez télécharger le package d'installation et trouver la version correspondante de ZooKeeper sur le site officiel zookeeper.apache.org/releases.ht… . Ce que j'ai téléchargé ici est le package compressé compilé de la version 3.8 apache-zookeeper-3.8.0-bin.tar.gz (un package peut être utilisé sur différentes plates-formes), s'il est sous Linux, Mac OS ou d'autres systèmes de type Unix. peut être décompressé directement avec la commande :

tar  -zxvf  apache-zookeeper-3.8.0-bin.tar.gz

S'il s'agit de Windows, vous pouvez utiliser un outil de décompression tiers pour le traiter, comme indiqué ci-dessous après la décompression

zk-décompresser

Le répertoire bin ci-dessus contient le script de démarrage de ZooKeeper, .shle script se terminant par le script s'exécute sur les plates-formes UNIX (Linux, Mac OS, etc.) et .cmdle script se terminant par celui-ci s'exécute sur Windows. Les fichiers de configuration pertinents sont enregistrés dans le répertoire conf, parmi lesquels zoo_sample.cfg est le modèle de configuration officiel, ces deux répertoires étant les plus couramment utilisés.

Modifier le fichier de configuration

Copiez et renommez le fichier de configuration zoo_sample.cfg dans le répertoire conf en zoo.cfg (le fichier de configuration portant ce nom est chargé)

  1. Modifier l'emplacement où les instantanés et les journaux zk sont stockésdataDir
  2. Ajoutez les informations de tous les nœuds au bas de zoo.cfg, comme suit
# server.id = ip:port:port
server.1=xxx:2888:3888
server.2=xxx:2888:3888
server.3=xxx:2888:3888
....... # 所有节点

Chaque ligne représente un nœud et la signification de chacune est la suivante.

  • serveur : marquez chaque nœud, et le numéro de série qu'il contient permet de sélectionner rapidement le leader (correspondant au fichier myid créé)
  • xxx : IP de chaque serveur de nœud de ZooKeeper (indice : vous pouvez utiliser la commande ifconfig pour afficher l'adresse IP .)
  • 3888 : Lorsque le premier démarrage ou le leader raccroche, une connexion est établie entre chaque nœud via ce port, et le leader est élu par vote.
  • 2888: 有leader之后,leader节点会启动2888端口,其他follower节点通过这个端口和leader建立连接,完成后续的命令,任务等。
  1. 客户端连接端口默认clientPort=2181,根据情况调整
  2. 在dataDir文件下创建对应myid文件,内容是数字序号与前面的server.1,server.2,server.3 .....中的数字对应

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

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

zk-group-path

zk-group-conf

启动

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

zk-start

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

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

client zk

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

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-statut

Une session démarre dans l'état NOT_CONNECTED et passe à l'état CONNECTING (1) lorsque le client est initialisé. Normalement, après avoir réussi à établir une connexion avec le serveur zk, la session passera à l'état CONNECTÉ (2). Lorsque le client se déconnecte du serveur zk ou ne reçoit pas de réponse du serveur, il revient à CONNECTING(3) et essaie de découvrir d'autres serveurs zk. Si un serveur disponible est trouvé et que la session est confirmée valide, l'état passera à nouveau à CONNECTÉ. Dans le cas contraire, la session sera déclarée expirée et l'état deviendra CLOSED(4).

expiration de la session

Il existe un paramètre de détection de timeout tickTime lors de la création d'une session. Si le service ne reçoit aucun message pour cette session après l'instant t, le service déclare la session expirée. Côté client, si aucun message n'est reçu après t/3, le client enverra un message heartbeat (détection heartbeat) au serveur. Après 2t/3, le client ZooKeeper commence à chercher d'autres serveurs, ce qui signifie qu'il reste encore t/3 pour trouver la session de connexion.

En mode cluster, le délai d'expiration de la session déclenchera la reconnexion du client. Lors de la reconnexion à un nouveau nœud de serveur, il est nécessaire que l'état ZooKeeper de ce nœud soit mis à jour avec l'état ZooKeeper du dernier serveur connecté. ZooKeeper détermine si l'état est à jour en ordonnant les mises à jour dans le service. Le cluster attribue des identifiants de transaction en fonction de l'ordre dans lequel chaque mise à jour a été établie.

Je suis M. Ji. J'utilise la sortie pour forcer l'entrée à continuer à apprendre. Je continue à partager des articles de séries techniques, et l'ensemble du réseau vaut la peine de collecter de bons articles. Bienvenue à prêter attention au compte public et à être une personne technique qui ne cesse de grandir.

Guess you like

Origin juejin.im/post/7121629260149686302