Guía de inicio de Xiaobai | Inicio rápido de Zookeeper

Empezando con zookeeper

Visión de conjunto

Proyecto Apache de código abierto, distribuido para aplicaciones distribuidas

Mecanismo de trabajo

Zookeeper entiende desde la perspectiva de los patrones de diseño: es un marco de gestión de servicios distribuidos diseñado en base al patrón del observador. Se encarga de administrar el almacenamiento y administrar los datos que a todos les importan, y luego acepta el registro del observador. Una vez que el estado de estos cambios en los datos, el cuidador del zoológico será responsable de notificar a los observadores que se hayan registrado con el cuidador del zoológico para que respondan en consecuencia

característica

  • Consistencia de datos globales
  • fiabilidad
  • Secuencial
  • Atomicidad de actualización de datos
  • tiempo real

papel de cuidador del zoológico

  • Líder

El núcleo del clúster Zookeeper es
el único programador y procesador de solicitudes de transacciones (operaciones de escritura), asegurando la secuencia de transacciones en el
clúster ; el programador de cada servidor en el clúster.
Para crear, establecer datos, eliminar y otras solicitudes de escritura, deben enviarse al líder para su procesamiento. El líder debe determinar el número y realizar la operación. Este proceso se denomina transacción.

  • Seguidor

Procesar solicitudes de clientes que no sean transacciones, reenviar solicitudes de transacciones al Líder;
participar en la elección del Líder del clúster.

  • Observador

Función de observador, observar los últimos cambios de estado del grupo de cuidadores del zoológico y sincronizar estos estados. Puede manejar solicitudes no transaccionales por separado y reenviar las solicitudes de transacción al líder para su procesamiento. No
participa en ninguna forma de votación, y solo proporciona servicios no transaccionales.

Construcción del clúster del guardián del zoológico

Pasos de construcción

  • Configurar el nombre de host a la asignación de direcciones IP
  • Modificar el archivo de configuración del guardián del zoológico
  • Copie y distribuya archivos de instalación de forma remota
  • Establecer myid
  • Iniciar grupo de cuidadores del zoológico

Proceso de construcción

1. Descargue zookeeper wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
2. Descomprímalo en / usr / local / src en tar - xvzf zookeeper-3.4.13.tar.gz
3. Se renombró mv zookeeper-3.4.13 zookeeper
4. Entre en el directorio conf
5. Copie tres copias de zoo_sample.cfg y nómbrelas como zoo_1.cfg zoo_2.cfg zoo_3.cfg
6 . Modificar El contenido de zoo_1.cfg es el siguiente

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. Modifique el contenido de zoo_2.cfg de la siguiente manera

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. Modifique el contenido de zoo_3.cfg de la siguiente manera

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. Ejecute el comando para crear la carpeta y 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. Ejecute el siguiente comando en el directorio bin para iniciar el clúster zookeepe

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

11.Ejecute los siguientes comandos en el directorio bin para ver el estado de cada nodo

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

modelo de datos del cuidador del zoológico

  • Znode tiene funciones de archivo y directorio
  •   即像文件一样维护着数据又像目录一样可作为路径标识的一部分
    
  • Znode tiene operación atómica
  • El almacenamiento de Znode tiene un límite de nivel de kb
  • Znode está referenciado por ruta, y la ruta debe ser absoluta
  • Composición de Znoe
    1. información de estado de estadísticas, que describe la versión y la información de permisos del Znode
    2. datos Los datos asociados con el Znode
    3. niños los nodos secundarios debajo del Znode
  • Tipo de nodo
    1. La sesión del nodo temporal finaliza, el nodo temporal se elimina automáticamente y el nodo temporal no puede tener nodos secundarios.
    2. Los nodos permanentes desaparecen a menos que se eliminen manualmente y no se pueden modificar en nodos temporales
    3. Serializar nodo
  • Atributos de nodo
    1. dataversion modificará dataversion después de cada conjunto
    2. Cversion se actualizará después de que se modifique el nodo hijo cversion
    3. ID de transacción czxid creado por Znode
    4. mzxid El ID de transacción que se modificó
    5. hora de creación del nodo ctime
    6. tiempo de actualización del nodo mtime
    7. ephemeralOwner Si el nodo es un nodo temporal, el valor identifica el id de sesión vinculado al nodo, si no, es 0

comando del cuidador del zoológico

  • Crear conexión
zkCli.sh -p host:port
  • Crear nodo
create [-e] [-s] path acl
-e 创建临时节点 -s 创建序列化节点
  • Eliminar nodo
delete path
不能删除有子节点的节点,除非子节点内容为空
  • Eliminar nodos de forma recursiva
rmr path
  • Límite de nodo
setquota -n | -b val path
n 标识子节点个数 -b 表示数据大小
listquota 查看设置信息
delquota -n | -b path 删除设置信息
  • Comando de historia
history 查看历史命令
redo num 重新执行某条命令   

Vigilante guardián del zoológico

Zookeeper proporciona la función de publicación / suscripción de datos distribuidos. Zookeeper presenta un mecanismo de observador para realizar esta función de notificación distribuida. Zookeeper permite al cliente registrar un observador en el servidor. Cuando algunos eventos en el servidor activan al observador, querrá que el cliente envíe notificaciones.
Tipos de eventos desencadenantes: eliminación de nodo, cambio de nodo, cambio de nodo hijo, etc.
En general, el observador se resume en los siguientes tres procesos: el cliente registra al observador en el servidor, el evento del servidor activa al observador y el cliente vuelve a llamar al observador para obtener el contenido del evento activador.

Características del mecanismo de disparo

  • Disparador de una sola vez
  • Encapsulación de eventos
  •   传递watchedevent,包括通知状态,事件类型,节点路径。
    
  • Envío de eventos asincrónico
  • Regístrese primero y luego active

Vigilante de operaciones de Shell

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

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

API de java de Zookeeper

  • Introducir dependencias
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.14</version>
    </dependency>
  • Código de muestra
    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();
    }

Mecanismo de elección del cuidador del zoológico

El algoritmo de elección predeterminado de Zookeeper es fastleaderelection, que utiliza más de la mitad de los votos para ganar.

concepto

  • Id del servidor
  •   id越大,在选举算法中权重越大
    
  • Estado electoral
    1. Estado de la campaña BLOQUEANDO
    2. Estado del seguidor SEGUIMIENTO Sincronice el estado del líder para participar en la votación
    3. Estado de observación Sincronización del OBSERVADOR El estado del líder no participa en la votación
    4. Estado de líder

  • La versión de los últimos datos almacenados en el servidor de ID de datos , cuanto mayor sea el valor, más nuevos serán los datos

Nueva elección de clúster

  • Cada máquina vota por sí misma BLOQUEANDO
  • La identificación grande del servidor puede ganar los votos de identificación pequeña
  • Más de la mitad de los votos han terminado
  • En este momento, si un ID de servidor más grande llega a la elección, lo siento. Se acabó la votación

Clúster no nuevo

Para un clúster de guardián del zoológico que se ejecuta normalmente, hay un tiempo de inactividad de la máquina en el medio y la elección debe ser reelegida. La identificación de datos, la identificación del servidor y el reloj lógico deben agregarse al proceso de elección.

  • ID de datos: la nueva versión de los datos es más grande y los datos actualizarán la versión cada vez
  • ID del servidor: es el myid que configuramos
  • Este valor parte de 0, y cada elección corresponde a un valor, si en la misma elección, este es el mismo.
  • El proceso de elección
    1. Se ignora el reloj lógico y se vuelve a votar la votación.
    2. Después de unificar el reloj lógico, el ID de datos gana.
    3. En el caso de la misma ID de datos, gana el servidor con la ID más grande.
    4. Finalmente elige al líder

aplicación tipica

Publicación y suscripción de datos

Monitoreando repetidamente los eventos de cambio de nodo, usando el observador para monitorear, realizar la publicación de datos y la suscripción

Cerradura distribuida

1. Cada cliente crea un nodo ordenado temporal.
2. El cliente obtiene la lista de nodos y juzga si es el primer nodo de la lista. Si es el primer nodo de la lista, obtiene el bloqueo. Si no lo es, supervisa el nodo anterior y espera a que se elimine el nodo anterior.
3. Si se adquiere el bloqueo, se realiza el proceso comercial normal y el bloqueo se libera después de la ejecución.
En el paso 2 anterior, algunas personas pueden estar preocupadas de que si el nodo encuentra que no es el nodo con la secuencia más pequeña, está listo para agregar un oyente, pero en este momento el nodo anterior se acaba de eliminar. Agregar un oyente en esta vez nunca funcionará. De hecho, la API zk puede garantizar que la lectura y la adición de oyentes sea una operación atómica.
¿Por qué escuchar el nodo anterior en lugar de todos los nodos? Esto se debe a que si supervisa todos los nodos secundarios, el estado de cualquier nodo secundario cambia, todos los demás nodos secundarios recibirán notificaciones (efecto de manada) y solo queremos que el siguiente nodo secundario reciba notificaciones.

Supongo que te gusta

Origin blog.csdn.net/weixin_34311210/article/details/106109440
Recomendado
Clasificación