Cónsul de Docker (registro y descubrimiento)

Tabla de contenido

 1. ¿Qué es el registro y descubrimiento de servicios?

Dos, ¿qué es cónsul?

3. Despliegue del cónsul

3.1 Establecer servicio de cónsul

3.1.1 Verificar el estado del clúster

3.1.2 Obtener información del clúster a través de la API http

3.2 servidor de registro

3.2.1 Instalar Gliderlabs/Registrator

3.2.2 Pruebe si la función de descubrimiento de servicios es normal

3.2.3 Verificar si los servicios http y nginx están registrados en el cónsul

3.3plantilla-cónsul

3.3.1 Preparar el archivo de plantilla nginx

3.3.2 Compilar e instalar nginx

3.3.3 Configurar nginx

3.3.4 Configurar e iniciar plantilla

3.3.5 Plantilla de acceso-nginx

3.3.6 Agregar un nodo contenedor nginx

3.4cónsul multinodo


El fondo amarillo es el punto clave de conocimiento.

 1. ¿Qué es el registro y descubrimiento de servicios?

El registro y el descubrimiento de servicios son componentes indispensables e importantes en la arquitectura de microservicios. Al principio los servicios eran de un solo nodo, lo que no garantizaba una alta disponibilidad y no consideraba la presión del servicio, simplemente se accedía a las llamadas entre servicios a través de la interfaz. Hasta que apareció más tarde la arquitectura distribuida de múltiples nodos, la solución inicial fue equilibrar la carga en el front-end del servicio, de modo que el front-end debe conocer las ubicaciones de red de todos los servicios de back-end y configurarlos en el archivo de configuración. Habrá algunas preguntas aquí:

  • Si necesita llamar al servicio backend AN, debe configurar las ubicaciones de red de los servicios N, lo cual es muy problemático de configurar
  • El cambio de ubicación de red del servicio backend requiere cambiar la configuración de cada persona que llama

Dado que existen estos problemas, el registro y el descubrimiento del servicio deben resolverlos. El servicio de fondo AN puede registrar su ubicación de red actual en el módulo de descubrimiento de servicios, y el descubrimiento de servicios se registrará en forma de KV. K es generalmente el nombre del servicio y V es IP: PUERTO. El módulo de descubrimiento de servicios realiza comprobaciones de estado periódicamente y encuestas para ver si se puede acceder a estos servicios de back-end. Cuando el front-end llama al servicio back-end AN, se dirige al módulo de descubrimiento de servicios para preguntar sus ubicaciones de red y luego llama a sus servicios. De esta manera, los problemas anteriores se pueden resolver: el front-end no necesita registrar la ubicación de red de estos servicios de back-end en absoluto, ¡y el front-end y el back-end están completamente desacoplados!

Dos, ¿qué es cónsul?

cónsul es un software de gestión de servicios desarrollado por Google de código abierto utilizando el lenguaje go. Admite centros de datos múltiples, alta disponibilidad distribuida, descubrimiento de servicios y uso compartido de configuraciones. El algoritmo Raft se utiliza para garantizar una alta disponibilidad de los servicios. Marco de registro y descubrimiento de servicios integrado, implementación de protocolo de coherencia distribuida, verificación de estado, almacenamiento de claves/valores, solución de centro de datos múltiples, ya no es necesario depender de otras herramientas (como ZooKeeper, etc.). La implementación del servicio es simple, con solo un paquete binario ejecutable. Cada nodo necesita ejecutar un agente, que tiene dos modos de operación: servidor y cliente. La recomendación oficial de cada centro de datos es que se requieren 3 o 5 nodos de servidor para garantizar la seguridad de los datos y garantizar que la elección del líder del servidor se pueda realizar correctamente.

En el modo cliente, todos los servicios registrados en el nodo actual se reenviarán al nodo del servidor y la información en sí no se conservará. En el modo servidor, la función es similar a la del modo cliente, la única diferencia es que persistirá toda la información en el local, de modo que la información pueda conservarse en caso de falla.

El líder del servidor es el jefe de todos los nodos del servidor y se diferencia de otros nodos del servidor en que debe ser responsable de sincronizar la información registrada con otros nodos del servidor y también es responsable del monitoreo del estado de cada nodo.

Algunas características clave proporcionadas por el cónsul:

  • Registro y descubrimiento de servicios: Consul facilita el registro y el descubrimiento de servicios a través de la interfaz DNS o HTTP, y algunos servicios externos, como los proporcionados por saas, también se pueden registrar de la misma manera.
  • Comprobación de estado: la comprobación de estado permite al cónsul alertar rápidamente sobre la operación en el clúster. La integración con el descubrimiento de servicios evita el reenvío de servicios a servicios fallidos.
  • Almacenamiento de claves/valores: un sistema para almacenar configuraciones dinámicas. Proporciona una interfaz HTTP simple que se puede operar en cualquier lugar.
  • Centro de datos múltiple: admite cualquier cantidad de regiones sin una configuración complicada.

La instalación de cónsul se utiliza para el registro de servicios, es decir, parte de la información del contenedor en sí se registra en cónsul, y otros programas pueden obtener información de servicios registrados a través de cónsul, que es el registro y descubrimiento de servicios.

3. Despliegue del cónsul

3.1 Establecer servicio de cónsul

1. mkdir /opt/consul
   cp consul_0.9.2_linux_amd64.zip /opt/consul
   cd /opt/consul
   unzip consul_0.9.2_linux_amd64.zip
   mv consul /usr/local/bin/

//设置代理,在后台启动 consul 服务端
 consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.23 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
  • -servidor: Iniciar como servidor. El valor predeterminado es cliente.
  • -bootstrap: Se utiliza para controlar si un servidor está en modo bootstrap. En un centro de datos, solo un servidor puede estar en modo bootstrap. Cuando un servidor está en modo bootstrap, puede ser elegido como servidor líder por sí mismo.
  • -bootstrap-expect=2: La cantidad mínima de servidores requeridos por el clúster; cuando es inferior a esta cantidad, el clúster fallará.
  • -ui: especifica habilitar la interfaz UI, de modo que se pueda acceder a la interfaz UI web que viene con Consul a través de una dirección como http://localhost:8500/ui .
  • -data-dir: especifica el directorio de almacenamiento de datos.
  • -bind: especifica la dirección de comunicación utilizada dentro del clúster. Todos los nodos del clúster deben ser accesibles a esta dirección y el valor predeterminado es 0.0.0.0.
  • -client: especifica a qué dirección de cliente está vinculado el cónsul. Esta dirección proporciona servicios como HTTP, DNS y RPC. El valor predeterminado es 127.0.0.1. -nodo: El nombre del nodo en el clúster. Debe ser único en un clúster. El valor predeterminado es el nombre de host del nodo.
  • -datacenter: especifique el nombre del centro de datos, el valor predeterminado es dc1.
netstat -natp | grep consul

Después de iniciar cónsul, escuchará 5 puertos de forma predeterminada:

8300: puertos para replicación y transferencia de líder

8301: puerto de lan cossip

8302: puerto para chismes pálidos

8500: el puerto de la interfaz web ui

8600: use el protocolo dns para ver el puerto de información del nodo

3.1.1 Verificar el estado del clúster

#查看members状态
consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.10.23:8301  alive   server  0.9.2  2         dc1

#查看集群状态
consul operator raft list-peers

consul info | grep leader
	leader = true
	leader_addr = 192.168.10.23:8300

3.1.2 Obtener información del clúster a través de la API http

curl 127.0.0.1:8500/v1/status/peers 			#查看集群server成员
curl 127.0.0.1:8500/v1/status/leader			#集群 server-leader
curl 127.0.0.1:8500/v1/catalog/services			#注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx			#查看 nginx 服务信息
curl 127.0.0.1:8500/v1/catalog/nodes			#集群节点详细信息

3.2 servidor de registro

3.2.1 Instalar Gliderlabs/Registrator

Gliderlabs/Registrator puede verificar el estado de ejecución del contenedor para registrarse automáticamente y también puede cerrar sesión en el servicio del contenedor acoplable en el centro de configuración de servicios. Actualmente se admiten Consul, Etcd y SkyDNS2.

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.10.13 \
consul://192.168.10.23:8500

--net=host: configura el contenedor acoplable en ejecución en el modo de red host.

-v /var/run/docker.sock:/tmp/docker.sock: demonio Docker del host

(Demonio Docker) El socket de dominio Unix de escucha predeterminado está montado en el contenedor.

--restart=always: configurado para reiniciar siempre el contenedor cuando éste sale.

--ip: La red acaba de especificarse como modo de host, por lo que especificamos la ip como la ip del host.

cónsul: especifique la IP y el puerto del servidor cónsul.

3.2.2 Pruebe si la función de descubrimiento de servicios es normal

docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd	 httpd			
	#-h:设置容器主机名

3.2.3 Verificar si los servicios http y nginx están registrados en el cónsul

3.3plantilla-cónsul

Consul-Template es una aplicación que reemplaza automáticamente los archivos de configuración basados ​​en Consul. Consul-Template es un proceso demonio que se utiliza para consultar información del clúster Consul en tiempo real, actualizar cualquier número de plantillas especificadas en el sistema de archivos y generar archivos de configuración. Una vez completada la actualización, puede optar por ejecutar el comando de shell para realizar la operación de actualización y recargar Nginx.

Consul-Template puede consultar el directorio de servicios, claves, valores-clave, etc. en Consul. Estas poderosas plantillas de lenguaje de consulta y abstracción hacen que Consul-Template sea particularmente adecuado para crear dinámicamente archivos de configuración. Por ejemplo: crear Apache/Nginx Proxy Balancers, Haproxy Backends, etc.

3.3.1 Preparar el archivo de plantilla nginx

//Operar en el servidor cónsul

vim /opt/consul/nginx.ctmpl
#定义nginx upstream一个简单模板
upstream http_backend {
 {
   
   {range service "nginx"}}
server {
   
   {.Address}}:{
   
   {.Port}};
{
   
   {end}}
}

#定义一个server,监听8000端口,反向代理到upstream
server {
    listen 8000;
    server_name localhost 192.168.10.23;
    access_log /var/log/nginx/kgc.com-access.log;							#修改日志路径
    index index.html index.php;
    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Client-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://http_backend;
    }
}

3.3.2 Compilar e instalar nginx

2. yum -y install pcre-devel zlib-devel gcc gcc-c++ make
   useradd -M -s /sbin/nologin nginx
   tar zxvf nginx-1.12.0.tar.gz -C /opt/
   cd /opt/nginx-1.12.0/
   ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

3.3.3 Configurar nginx

3. ......
   http {
     include       mime.types;
     include  vhost/*.conf;       				#添加虚拟主机目录
     default_type  application/octet-stream;
   ......

//创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost 

//创建日志文件目录
mkdir /var/log/nginx

//启动nginx
nginx

3.3.4 Configurar e iniciar plantilla

4. unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
   cd /opt/
   mv consul-template /usr/local/bin/

//在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。
consul-template --consul-addr 192.168.10.23:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

//另外打开一个终端查看生成配置文件
upstream http_backend {
   server 192.168.10.13:83;

   server 192.168.10.13:84;

}

server {
  listen 8000;
  server_name 192.168.10.23;
  access_log /var/log/nginx/kgc.cn-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
  }
}

3.3.5 Plantilla de acceso-nginx

5. docker ps -a
   CONTAINER ID   IMAGE                           COMMAND                  CREATED       STATUS          PORTS                NAMES
   9f0dc08956f4   httpd                           "httpd-foreground"       1 hours ago   Up 1 hours      0.0.0.0:89->80/tcp   test-04
   a0bde07299da   httpd                           "httpd-foreground"       1 hours ago   Up 1 hours      0.0.0.0:88->80/tcp   test-03
   4f74d2c38844   nginx                           "/docker-entrypoint.…"   1 hours ago   Up 1 hours      0.0.0.0:84->80/tcp   test-02
   b73106db285b   nginx                           "/docker-entrypoint.…"   1 hours ago   Up 1 hours      0.0.0.0:83->80/tcp   test-01
   409331c16824   gliderlabs/registrator:latest   "/bin/registrator -i…"   1 hours ago   Up 1 hours                        registrator

docker exec -it 4f74d2c38844 bash
echo "this is test1 web" > /usr/share/nginx/html/index.html

docker exec -it b73106db285b bash
echo "this is test2 web" > /usr/share/nginx/html/index.html

Acceso al navegador: http://192.168.10.23:8000/ y siga actualizando.

3.3.6 Agregar un nodo contenedor nginx

(1) Agregue un nodo contenedor nginx para probar las funciones de actualización de configuración y descubrimiento de servicios.

docker run -itd -p:85:80 --name test-05 -h test05 nginx

// Al observar el servicio de plantilla, el contenido del archivo /usr/local/nginx/conf/vhost/kgc.conf se actualizará desde la plantilla y el servicio nginx se sobrecargará

(2) Ver el contenido del archivo /usr/local/nginx/conf/vhost/kgc.conf.

cat /usr/local/nginx/conf/vhost/kgc.conf
upstream http_backend {

server 192.168.10.23:83;:去!

server 192.168.10.23:84;

server 192.168.10.23:85;

server 192.168.10.23:86;

}

(3) Verifique los registros de los tres contenedores nginx y solicite un sondeo normal a cada nodo del contenedor

docker logs -f test-01
docker logs -f test-02
docker logs -f test-05
docker logs -f test-06

3.4cónsul multinodo

Agregue un servidor 192.168.10.14/24 con un entorno acoplable existente para unirse al clúster existente

consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.14 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true  \
-datacenter=dc1  \
-join 192.168.10.23 &> /var/log/consul.log &

-enable-script-checks=true: configura el servicio de verificación para que esté disponible

-centro de datos: nombre del centro de datos

-join: unirse a un clúster existente

consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.10.23:8301  alive   server  0.9.2  2         dc1
consul-server02  192.168.10.14:8301  alive   server  0.9.2  2         dc1


consul operator raft list-peers
Node             ID                  Address             State     Voter  RaftProtocol
Node             ID                  Address             State     Voter  RaftProtocol
consul-server01  192.168.10.23:8300  192.168.10.23:8300  leader    true   2
consul-server02  192.168.10.14:8300  192.168.10.13:8300  follower  true   2

Supongo que te gusta

Origin blog.csdn.net/m0_71888825/article/details/132427270
Recomendado
Clasificación