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.conf
el 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_ADDRESS
que 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
- 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.
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_PORT
que 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á.