Arquitectura de software: implementación del clúster zookeeper e inicio rápido

La empresa actual utiliza el dubbo interno de Ali, que es EDAS, que utiliza el propio servicio EDAS de Ali. Si eres un viejo fanático que ha usado dubbo, debes saber que zookeeper, zookeeper está más preocupado por la aplicación de big data y comunicación RPC. Tanto si ha utilizado zookeeper como si no, esta vez presento principalmente el despliegue de zookeeper y clúster. Esto solo puede entenderse en profundidad solo bajo el funcionamiento real.
Código fuente: https://github.com/limingios/netFuture/ [zookeeper]

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1) Introducción al cuidador del zoológico

  • historia

    Zookeeper se originó en un grupo de investigación en Yahoo Research Institute. En ese momento, los investigadores descubrieron que muchos sistemas grandes dentro de Yahoo dependen básicamente de un sistema similar para la coordinación distribuida, pero estos sistemas a menudo tienen problemas distribuidos de un solo punto. Por lo tanto, los desarrolladores de Yahoo intentaron desarrollar un marco de coordinación distribuido general sin un solo punto de problema, de modo que los desarrolladores puedan centrarse en procesar la lógica empresarial.
    De hecho, hay una anécdota interesante sobre el nombre del proyecto "ZooKeeper". En la etapa inicial del proyecto, considerando que muchos proyectos internos llevaban nombres de animales (como el famoso proyecto Pig), los ingenieros de Yahoo esperaban darle a este proyecto un nombre de animal. Raghu Ramakrishnan, el científico jefe del Instituto en ese momento, dijo en broma: "¡Si esto continúa, nos convertiremos en un zoológico!" Tan pronto como se dijo esto, todos dijeron que llamarían al cuidador del zoológico uno por uno debido a la distribución. de los nombres de los animales. Junte los componentes, todo el sistema distribuido de Yahoo parece un gran zoológico, y Zookeeper se utiliza para coordinar el entorno distribuido uno por uno, por lo que nació el nombre Zookeeper.

  • Por que el guardián del zoológico es atractivo

    En la década de 1960, se inventó el mainframe y se convirtió en la corriente principal del mundo en virtud de sus capacidades de procesamiento de E / S y supercomputación, así como de estabilidad y seguridad. Pero los mainframes también tienen algunos problemas fatales, como una construcción costosa, operaciones complicadas y problemas de un solo punto. En particular, el costo de capacitar talentos para mainframes es muy alto. Con la aparición de estos problemas, sigue afectando el desarrollo de mainframes. Por otro lado, con la mejora continua del rendimiento de las PC y la popularización de las redes, todo el mundo ha recurrido al uso de miniordenadores y servidores de PC ordinarios para construir sistemas informáticos distribuidos para reducir costos. Después de eso, la distribución se ha vuelto cada vez más popular.

  • Sitio web oficial de Zookeeper

    https://zookeeper.apache.org/

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Enlace de descarga: https://www-eu.apache.org/dist/zookeeper/

image.png

Dirección de origen: https://github.com/apache/zookeeper

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2) Despliegue de clúster

Hay dos tipos de clústeres, uno es un clúster distribuido y el otro es un clúster pseudodistribuido.
Distribuido: cada aplicación está en un host independiente y los puertos son consistentes.
Pseudodistribuido: varias aplicaciones están en un host y los puertos están diferenciados. La pseudodistribución es poco común en el entorno de producción real.
Los clústeres pseudodistribuidos son más difíciles de operar.

instalación de mac vgarant: https://idig8.com/2018/07/29/docker-zhongji-07/
instalación de ventana vgarant https://idig8.com/2018/07/29/docker-zhongji-08/

Tipo de sistema dirección IP Rol de nodo UPC Memoria Nombre de host
Centos7 192.168.69.100 Pseudodistribuido 2 2G guardián-virtua
Centos7 192.168.69.101 Verdadero líder distribuido 2 2G cuidador-líder del zoológico
Centos7 192.168.69.102 Verdadero distribuido-subordinado 1 2 2G zookeeper-Follower1
Centos7 192.168.69.103 Verdadero distribuido-subordinado 2 2 2G zookeeper-Follower2

El truquito de src, para que haya color, lo he estado descuidando antes y me duelen los ojos cuando lo miro, ahora el color es mucho mejor.

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

  • (2.1) Configuración de pseudoambiente

    Sigo usando vagrant Como estoy familiarizado con vagrant, apenas he creado una máquina virtual manualmente.

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.1) Configuración básica


su
#密码 vagrant
cd ~
vi /etc/ssh/sshd_config
sudo systemctl restart sshd

vi /etc/resolv.conf

Establecer en 8.8.8.8

reinicio de la red de servicio


![](https://upload-images.jianshu.io/upload_images/11223715-78a8109c41a094e6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-2aab7202b523bc3f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-1916bbc2f18c3145.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

>(2.1.2)jdk安装
>脚本在我的源码里面

``` bash
vi pro.sh
sh pro.sh

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.3) La
herramienta de descarga y descarga de Zookeeper debe recordar usar la última versión que se ha lanzado a 3.5.4, todavía uso 3.4.10

wget https://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.4) Descomprimir zookeeper

tar zxvf zookeeper-3.4.10.tar.gz

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.5) Ingrese al directorio conf en zk y copie 3 archivos

cd /root/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo1.cfg
cp zoo_sample.cfg zoo2.cfg
cp zoo_sample.cfg zoo3.cfg

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.6) Edite estos 3 archivos zoo1.cfg, zoo2.cfg, zoo3.cfg

(2.1.6.1) Editar zoo1.cfg

vi zoo1.cfg

dataDir = / apps / servers / data / d_1
dataLogDir = / apps / servers / logs / logs_1
clientPort = 2181

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/apps/servers/data/d_1
dataLogDir=/apps/servers/logs/logs_1
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=localhost:2187:2887 
server.2=localhost:2188:2888
server.3=localhost:2189:2889

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.6.2) Editar zoo2.cfg

vi zoo2.cfg

dataDir = / apps / servers / data / d_2
dataLogDir = / apps / servers / logs / logs_2
clientPort = 2182

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/apps/servers/data/d_2
dataLogDir=/apps/servers/logs/logs_2
# the port at which the clients will connect
clientPort=2182
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=localhost:2187:2887 
server.2=localhost:2188:2888
server.3=localhost:2189:2889

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.6.3) Editar zoo3.cfg

vi zoo3.cfg

dataDir = / apps / servers / data / d_3
dataLogDir = / apps / servers / logs / logs_3
clientPort = 2183

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/apps/servers/data/d_3
dataLogDir=/apps/servers/logs/logs_3
# the port at which the clients will connect
clientPort=2183
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=localhost:2187:2887 
server.2=localhost:2188:2888
server.3=localhost:2189:2889

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.7) Crear directorio de datos y directorio de registro


mkdir -p /apps/servers/data/d_1
mkdir -p /apps/servers/data/d_2
mkdir -p /apps/servers/data/d_3

mkdir -p / apps / servers / logs / logs_1
mkdir -p / apps / servers / logs / logs_2
mkdir -p / apps / servers / logs / logs_3

echo "1"> / apps / servers / data / d_1 / myid
echo "2"> / apps / servers / data / d_2 / myid
echo "3"> / apps / servers / data / d_3 / myid


![](https://upload-images.jianshu.io/upload_images/11223715-29358fa9e009905c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

> (2.1.8)进入bin目录下输入命令 分别进行启动
``` bash
cd /root/zookeeper-3.4.10/bin
sh zkServer.sh start ../conf/zoo1.cfg
sh zkServer.sh start ../conf/zoo2.cfg
sh zkServer.sh start ../conf/zoo3.cfg

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(2.1.9) Ingrese cada uno para ver el efecto

source /etc/profile
sh zkCli.sh -server localhost:2181
sh zkCli.sh -server localhost:2182
sh zkCli.sh -server localhost:2183

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

La pseudodistribución se completa realmente de esta manera. El foco todavía está distribuido y mira hacia abajo.

  • (1.2) Configuración de entorno distribuido

(1.2.1) Configuración básica (las tres máquinas deben configurarse)


su
#密码 vagrant
cd ~
vi /etc/ssh/sshd_config
sudo systemctl restart sshd

vi /etc/resolv.conf

Establecer en 8.8.8.8

reinicio de la red de servicio

![](https://upload-images.jianshu.io/upload_images/11223715-af39780dc5b88a2c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-1006580435e435f3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-514cba97d35d79e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-42238d619aa86169.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-099a2ba509e81d91.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-008debaab296be6f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-fc58d43a8ce53bf2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-faa0c439160805be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](https://upload-images.jianshu.io/upload_images/11223715-d036b005acb8483f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

>(1.2.2)jdk安装(三台机器都需要设置)
>脚本在我的源码里面

``` bash
vi pro.sh
sh pro.sh

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.3) Descarga de Zookeeper (es necesario configurar las tres máquinas) La
herramienta de descarga debe recordar utilizar la última versión que se ha lanzado a 3.5.4. Todavía uso 3.4.10.
¿Por qué hay tres? Porque Zookeeper le gustan los números impares y no le gustan los números pares.

wget https://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.4) Descomprimir zookeeper

tar zxvf zookeeper-3.4.10.tar.gz

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.4) Configure el archivo cfg (las tres máquinas deben configurarse)

cd ~
cd zookeeper-3.4.10/
cd conf
cp zoo_sample.cfg zoo.cfg

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.5) Configure el archivo cfg. De hecho, los archivos de configuración de las 3 máquinas son los mismos. No repetiré la escritura de cfg, solo tomaré una captura de pantalla.

vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
dataLogDir=/tmp/zookeeper/logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.0=192.168.69.101:2888:3888
server.1=192.168.69.102:2888:3888
server.2=192.168.69.103:2888:3888

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.6) La configuración de myid
debe configurarse en el directorio sobre dataDir = / tmp / zookeeper.

cd /
cd tmp
mkdir zookeeper
cd zookeeper

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.6.1) 192.168.69.101 configurar myid

echo '0'>myid
cat myid

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.6.2) 192.168.69.102 configurar myid

echo '1'>myid
cat myid

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

(1.2.6.3) 192.168.69.103 configurar myid

echo '2'>myid
cat myid

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Inicie el comando para ejecutar zookeeper en 3 máquinas virtuales

cd ~/zookeeper-3.4.10/bin
sh zkServer.sh start

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

#### (3) Peinado conceptual

Arquitectura de software: implementación del clúster zookeeper e inicio rápido

  • (3.1) Configuración de Zoo.cfg
parámetro significado
tickTime 2000
syncLimit El tiempo de comunicación más largo entre el líder y el seguidor no puede exceder initLimt * ticktime
initLimt Acepte el tiempo de espera más largo initLimt * ticktime inicializado por el enlace del cliente zk
dataDir Directorio de datos
dataLogDir Archivo de registro
clientPort Número de puerto del servidor de enlace de cliente Servidor.A = B: C: DA: el servidor de números B IP de servicio C representa el puerto de comunicación líder y seguidor D puerto líder alternativo
  • (3.2) Rol

Líder:

Como nodo principal de todo el clúster de ZooKeeper, el líder es responsable de responder a todas las solicitudes de cambios de estado de ZooKeeper. Ordenará y numerará cada solicitud de actualización de estado para garantizar que las operaciones de escritura y FIFO del procesamiento de mensajes internos de todo el clúster vayan al líder.

Seguidor:

La lógica de Follower es relativamente simple. Además de responder a las solicitudes de lectura en este servidor, el seguidor también procesa la propuesta del líder y la envía localmente cuando el líder envía la propuesta. Otro dato a destacar es que el líder y el seguidor constituyen el quórum del clúster ZooKeeper, es decir, solo ellos participan en la elección del nuevo líder y responden a la propuesta del líder.

Observador:

Si la carga de lectura del clúster de ZooKeeper es muy alta o hay muchos clientes en las salas de computadoras, puede configurar algunos servidores de observadores para mejorar el rendimiento de lectura. El observador y el seguidor son similares, con algunas diferencias menores: primero, el observador no es un quórum, es decir, no participa en las elecciones y no responde a las propuestas; segundo, el observador no necesita mantener las transacciones en el disco. el observador se reinicia, el nombre completo debe resincronizarse desde el espacio líder.

  • (3.3) Funciones de Zookeeper

    Zookeeper está compuesto por múltiples servidores
    1. Clúster un líder, múltiples seguidores
    2. Cada servidor guarda una copia de los datos
    3. Los datos globales son consistentes y se distribuyen para los seguidores de lectura, las actualizaciones de escritura son enviadas por el líder y actualizadas por el líder Las solicitudes son se realizan en orden, y las solicitudes de actualización del mismo cliente se ejecutan en el orden de envío de la atomicidad.
    4. Una actualización de datos tiene éxito o falla. La vista de datos globalmente única.
    5. La vista de datos es siempre la misma independientemente del servidor el cliente está conectado. En tiempo real constante, dentro de un cierto rango de eventos, el cliente puede leer los datos más recientes

PD: Esta vez hablo principalmente sobre el principio del guardián del zoológico y la implementación del clúster. No presenté los detalles con demasiados detalles. La próxima vez, hablaré sobre el uso del guardián del zoológico.

Supongo que te gusta

Origin blog.51cto.com/12040702/2675782
Recomendado
Clasificación