[Nacos] Implemente el clúster Nacos basado en la contenedorización k8s

Recientemente, se implementó un servicio de clúster nacos de tres nodos en la máquina para el centro de registro y configuración de varios microservicios pequeños, se usó Nginx para representarlo brevemente y luego se realizó un breve estudio sobre la implementación del clúster y la implementación distribuida para mejorar ligeramente la disponibilidad. . Después de la implementación, se puede usar normalmente, pero se encuentra un problema. Después de actualizar la lista de nodos del clúster de Nacos, siempre habrá uno o dos nodos en estado ABAJO o SOSPECHOSO de vez en cuando, por lo que es un largo proceso para encontrar el problema. comienza. El clúster se puede utilizar normalmente, pero cada aplicación de servicio siempre tendrá un montón de excepciones de servicio de enlace nacos y se estima que será redirigido a otros nodos inmediatamente después de descubrir que no funciona. Al final, se descubrió que el nombre de host del servidor de un determinado nodo era incorrecto (otra situación era que cluster.confel contenido del contenedor eran datos antiguos y el contenido original también se agregó durante la configuración de ENV), y la dirección IP de el servidor correspondiente se configuró en el clúster de nacos, lo que provocó NACOS_INETUTILS_IP_ADDRESSque falla la detección de latidos entre los nodos del clúster. Después de tres veces, el nodo se desconecta automáticamente o se coloca en un estado que no es de confianza...

Resumen de asuntos anteriores

Grabar notas relacionadas con ideas y operaciones.

  • Acceso solo dentro del cluster
  • Condiciones de apertura para puertos de red externos en el entorno k8s de la red interna
  • Preguntas frecuentes sobre la versión nacos2.2.X

Es fácil construir un entorno de clúster localmente. Es normal proporcionar configuración de la máquina en el servidor. Cuando se trata del entorno k8s y la intranet, está un poco desviado. Está bien si no hay ningún problema. Una vez que se implementa Si no tiene éxito, ocurrirán varios problemas. Después de que la implementación sea exitosa, se producirá una falla en el servicio. Líneas y otros
problemas encontrados:

  • Pregunta 1: Después de que el clúster se implementó con éxito utilizando la nube de investigación y desarrollo de intranet k8s, apareció un cuarto nodo de los tres nodos originales.
  • Problema 2: la implementación del clúster pasa parámetros basados ​​en variables de entorno personalizadas, pero hay más de un nodo dinámico.
  • Problema 3: al utilizar la dirección VIP para asignar el puerto del clúster interno original, el registro del servicio parece estar en línea y fuera de línea en grandes cantidades.

No es una operación e implementación regular, pero aún debe resumirse y ordenarse, y las notas se revisarán más adelante. El contenido relevante del archivo de configuración se puede configurar de acuerdo con diferentes entornos. Sin agregar más cargas, solo el Se registrarán los problemas de escalada de fosos.

Construye la arquitectura

Insertar descripción de la imagen aquí

  • Sólo más de 3 nodos de Nacos pueden formar un clúster;
  • Nacos Nginx Proxy se utiliza para el reenvío de proxy;

Prepárese para la composición tipográfica

La versión Nacos2.0 tiene un nuevo método de comunicación gRPC en comparación con 1.X, por lo que se necesitan 2 puertos más. El nuevo puerto se genera automáticamente con un cierto desplazamiento basado en el puerto principal configurado (servidor.puerto). Fuente: Implementación del modo de clúster

puerto desplazamiento desde el puerto maestro describir
8848 0 Puerto principal, puerto HTTP utilizado por el cliente, la consola y OpenAPI
9848 1000 Puerto del servidor de solicitud gRPC del cliente, utilizado por el cliente para iniciar conexiones y solicitudes al servidor
9849 1001 El servidor gRPC solicita el puerto del servidor para la sincronización entre servicios, etc.
7848 -1000 Puerto del servidor de solicitudes Jraft, utilizado para procesar solicitudes relacionadas con Raft entre servidores

Cuando se utilizan solicitudes VIP/nginx, es necesario configurar el reenvío TCP, el reenvío http2 no se puede configurar; de lo contrario, nginx desconectará la conexión. Los puertos 9849 y 7848 son puertos de comunicación entre servidores. No los exponga al entorno de red externo ni a pruebas de clientes.
Insertar descripción de la imagen aquí

De acuerdo con los requisitos oficiales de asignación de puertos anteriores, la asignación de puertos del clúster Nacos creado utilizando tres servidores implementados aquí es la siguiente:

nodo IP Puerto (exposición requerida) Observación Versión Ruta del archivo de implementación del entorno sin conexión actual
nacos-nodo1 192.168.xx.201 Anfitrión: 8858, 9858, 9859, 7858
Contenedor: 8858, 9858, 9859, 7858
Nacos nodo uno nacos/nacos-servidor:2.2.4 /root/nacos-deploy/
nacos-nodo2 192.168.xx.202 Anfitrión: 8858, 9858, 9859, 7858
Contenedor: 8858, 9858, 9859, 7858
Nacos nodo dos nacos/nacos-servidor:2.2.4 /root/nacos-deploy/
nacos-nodo3 192.168.xx.203 Anfitrión: 8858, 9858, 9859, 7858
Contenedor: 8858, 9858, 9859, 7858
Nodo tres de Nacos nacos/nacos-servidor:2.2.4 /root/nacos-deploy/
Nacos DB Mysql 192.168.xx.206 Anfitrión: 3306 Contenedor: 3306 base de datos nacos mysql:5.7.34 /root/nacos-db-deploy
Nacos DB Postgres 192.168.xx.206 Anfitrión: 5432 Contenedor: 5432 base de datos nacos postgres: 12-alpino /root/nacos-db-deploy
Proxy Nacos Nginx 192.168.xx.208 Anfitrión: 80 Contenedor: 80 agente nacos nginx:1.23.2 /root/nacos-proxy-deploy
Nacos Cheak Salud 192.168.xx.208 Examen de salud /root/nacos-check-salud

nombre de dominio interoperable k8s

[nacos-node1] se refiere a: nombre de carga
[pigcloud.svc.cluster.local] se refiere a: nombre de servicio fijo

nacos-node1.pigcloud.svc.cluster.local:8858 
nacos-node2.pigcloud.svc.cluster.local:8858 
nacos-node3.pigcloud.svc.cluster.local:8858

El ajuste de la información de configuración en el nombre de dominio nginx juega un papel clave

Crear base de datos de Nacos

Si está utilizando contenedores para ejecutar nacos, debe crear una base de datos e importar los archivos de datos de la estructura básica de la base de datos desde la versión oficial correspondiente.

Compilar nacos2.2.4

Nacos 2.2.4 admite la adaptación y transformación de la base de datos de pg

crear servicio mysql

  • ventana acoplable-mysql.yml
  • Ejecutar yml
docker-compose -f  /root/nacos-db-deploy/docker-mysql.yaml up -d
# 导入官方表数据
docker cp /root/nacos/conf/nacos-mysql.sql nacos-mysql:/tmp
docker exec -it nacos-mysql sh
mysql -uroot -p123456
create database nacos;
use nacos;
source /tmp/nacos-mysql.sql;

Crear servicio postgres

  • docker-postgres.yml

  • Ejecutar yml

docker-compose -f  /root/nacos-db-deploy/postgres.yaml up -d

servicio de nacos

Crear archivo yaml

mkdir /data/nacos2.2.4_1/logs -p
mkdir /data/nacos2.2.4_2/logs -p
mkdir /data/nacos2.2.4_2/logs -p

mkdir /root/nacos-deploy/

cat << EOF > /root/nacos-deploy/nacos1.yaml
对应内容写入
EOF

cat << EOF > /root/nacos-deploy/nacos2.yaml
对应内容写入
EOF

cat << EOF > /root/nacos-deploy/nacos3.yaml
对应内容写入
EOF

Los puertos en cada configuración son puertos no estándar. Tenga en cuenta NACOS_APPLICATION_PORTque si las variables de entorno no se especifican como puertos no específicos, las variables de entorno predeterminadas en la configuración lo serán. Se producirán8848 problemas al ejecutar tres nodos en la misma máquina.

Ejecutar Nacos

Cada nodo puede ejecutar

docker-compose -f /root/nacos-deploy/nacos1.yaml up -d
docker-compose -f /root/nacos-deploy/nacos2.yaml up -d
docker-compose -f /root/nacos-deploy/nacos3.yaml up -d

Es normal que tres nodos accedan a la página individualmente, es normal acceder a la página a través de un proxy;

Nota: La página web no utiliza el cliente. El servidor gRPC llama al servicio, pero el puerto correspondiente debe solicitarse en el programa, por lo que debe exponerse. Debido a que se utiliza un puerto no estándar, se puede usar directamente ( disfrazado) cuando se usa nginx como proxy. ) se puede asignar a un puerto estándar.

Configuración del proxy Nginx

La contenedorización todavía se utiliza aquí.
Configurar el proxy nginx

mkdir /root/nacos-proxy-deploy
cat <<EOF > /root/nacos-proxy-deploy/nginx.conf
对应内容写入
EOF
  • contenedor proxy yaml
cat > /root/nacos-proxy-deploy/nacos-nginx-proxy.yaml << EOF  
对应内容写入
EOF

cd /root/nacos-proxy-deploy
# 容器运行
docker-compose -f nacos-proxy.yaml up -d

Después de la configuración, verifique si el contenedor se está ejecutando normalmente y debe probar si el registro del servicio de instancia es normal.

inspección ambiental

mkdir /root/nacos-check-healthy -p
cat > /root/nacos-check-healthy/nacos_check_status.py << EOF
对应内容写入
EOF

Configuración de la nube de I+D

  • Configuración
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.error.include-message=ON_PARAM
server.port=${NACOS_APPLICATION_PORT:8848}
# k8s集群时候使用域名进行固定
nacos.inetutils.ip-address=${NACOS_INETUTILS_IP_ADDRESS:}

# 使用pg数据库配置
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:postgresql}
db.num=${PG_DATABASE_NUM:1}
db.jdbcDriverName=${PG_SERVICE_DRIVER:org.postgresql.Driver}
db.url.0=jdbc:${SPRING_DATASOURCE_PLATFORM:postgresql}://${PG_SERVICE_HOST:localhost}:${PG_SERVICE_PORT:5432}/${PG_SERVICE_DB_NAME:strong_db}?currentSchema=${PG_CURRENT_SCHEMA:public}&tcpKeepAlive=true&reWriteBatchedInserts=true
db.user.0=${PG_SERVICE_USER:postgres}
db.password.0=${PG_SERVICE_PASSWORD:123456}

  • Configuración del entorno

Aquí se muestran diferentes configuraciones basadas en diferentes entornos de nube de I+D.

KeyValue.JVM_XMS=1g
KeyValue.JVM_XMX=1g
KeyValue.JVM_XMN=512m
KeyValue.JVM_MS=128m
KeyValue.JVM_MMS=320m
KeyValue.PREFER_HOST_MODE=ip
# 这里是针对pg如果使用mysql可以自行添加调整${PARAM_NAME:PARAM_DEF_VALUE}
KeyValue.SPRING_DATASOURCE_PLATFORM=postgresql
KeyValue.PG_SERVICE_HOST=192.168.xx.208
KeyValue.PG_SERVICE_PORT=5432
KeyValue.PG_SERVICE_USER=postgres
KeyValue.PG_SERVICE_PASSWORD=123456
KeyValue.PG_SERVICE_DB_NAME=strong_db
KeyValue.PG_CURRENT_SCHEMA=public
# 如果想使用单击MODE=standalone
KeyValue.MODE=cluster
# 集群配置
KeyValue.NACOS_SERVERS=nacos-node1.pigcloud.svc.cluster.local:8858 nacos-node2.pigcloud.svc.cluster.local:8858 nacos-node3.pigcloud.svc.cluster.local:8858
# 多网卡IP选择
KeyValue.NACOS_INETUTILS_IP_ADDRESS=nacos-node1.pigcloud.svc.cluster.local

problema comun

  • Normalmente, después de que un nodo registra un servicio, se sincronizará con otros nodos.
  • Cuando cada nodo no pueda elegir un líder,
    consulte el registro: /data/nacos2.2.4_1/logs/alipay-jraft.log
    Registro relacionado con el servicio de instancia: /data/nacos2.2.4_1/naming-raft.log
  • Después de configurar el reenvío de proxy, asegúrese de exponerlo
    a través de los registros. El puerto 8848 está expuesto para que el cliente nacos inicie sesión para obtener el token. Las operaciones posteriores transportarán el token para las operaciones de recursos; luego, el puerto 9848 está expuesto para el cliente Solicitud gRPC, por lo que si está configurado Si se reenvía el proxy, asegúrese de exponerlo; de lo contrario, la conexión fallará y se interrumpirá.

Dirección de referencia

Supongo que te gusta

Origin blog.csdn.net/u010638673/article/details/131738325
Recomendado
Clasificación