Docker déploie des versions autonomes et en cluster de nacos
Table des matières
1. Pas de mysql externe, méthode de déploiement de package logiciel
2. Pas de mysql externe, méthode de déploiement docker
3. MySQL externe, méthode de déploiement docker
Quatre, version de cluster haute disponibilité docker-compose + nginx + mysql
Cinq, version de cluster haute disponibilité docker + mysql + nginx
notes de version nacos 2.0
Parmi eux, les ports 7848, 8848, 9848 et 9849 sont des ports qui doivent être ouverts, 8848 est le port de la page Web, 7848 est l'interface de synchronisation des données du cluster et 9848 et 9849 sont des ports qui doivent être développés pour les versions nacos supérieures à 2.0. 0.
Par rapport à Nacos 1.X, Nacos 2.0 a ajouté la méthode de communication gRPC, donc 2 ports doivent être ajoutés. Le port nouvellement ajouté est automatiquement généré avec un certain décalage sur la base du port principal configuré (server.port).
Le client a la même logique de calcul. L'utilisateur configure le port principal (par défaut 8848) comme dans 1.X, et calcule le port gRPC correspondant (par défaut 9848) via le même décalage. Par conséquent, s'il existe une redirection de port ou un pare-feu entre le client et le serveur, vous devez ajuster la configuration de la redirection de port et la configuration du pare-feu en conséquence.
1. Pas de mysql externe, méthode de déploiement du package logiciel
Adresse de téléchargement de la dernière version stable : https://github.com/alibaba/nacos/releases
Après le téléchargement, décompressez le répertoire comme suit, dans bin se trouve le script de démarrage
Commande de démarrage (standalone représente le fonctionnement en mode autonome, le mode non cluster) :
sh startup.sh -m autonome
Le port par défaut du service nacos est 8848. Entrée du navigateur http://ip:8848/nacos
Le compte de connexion et le mot de passe sont tous deux nacos
2. Pas de connexion externe à mysql, méthode de déploiement
docker run -d -p 8848:8848 --env MODE=standalone --name nacos nacos-server:2.0.4
3. Connexion externe à mysql, méthode de déploiement docker
Installer mysql
Créez une base de données nacos_config, insérez le sql lié à la configuration de nacos
docker run -d \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.16.0.124 \
-e MYSQL_SERVICE_PORT=31190 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD='xxxx' \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--restart=always \
--name nacos_saasoperationsecond \
nacos-server:2.0.4
四、docker-compose+nginx+mysql高可用集群版本
1. Installez mysql
Créez une base de données nacos_config, insérez le sql lié à la configuration de nacos
sudo docker network create --driver bridge --subnet 10.139.0.0/16 --gateway 10.139.0.1 pknet
3.vim docker-compose-nacos.yaml
version : "3"
services :
nacos : nom d'hôte : image
nacos : nacos/nacos-server:2.0.3 nom_conteneur : bdyh-nacos privilégié : vrai réseaux : - volumes pknet : - ./cluster-logs:/home/nacos/logs - Ports ./init.d/custom.properties:/home/nacos/init.d/custom.properties : - "7848:7848" - "8848:8848" - "9848:9848" - "9555:9555" - "9849:9849" env_file : - ./env/nacos-ip.env restart : réseaux en cas d'échec : pknet : externe :vrai vim nacos-ip.env
#nacos dev env
#Si le nom d'hôte est pris en charge, vous pouvez utiliser hostname, sinon utiliser ip, et la valeur par défaut est ip
PREFER_HOST_MODE=ip
MODE=cluster
#Dans le cas de plusieurs cartes réseau, spécifiez ip ou carte réseau
NACOS_SERVER_IP=192.168. 10.128
#Autres nœuds du cluster [ip1:port ip2:port ip3:port]
NACOS_SERVERS=192.168.10.128:8848 192.168.10.129:8848 192.168.10.130:8848
#nacos web port, s'il n'est pas écrit, la valeur par défaut est 8848
NACOS_APPLICATION_PORT= 8848
#la plate-forme de source de données ne prend en charge que mysql ou n'enregistre pas vide
SPRING_DATASOURCE_PLATFORM =mysql
MYSQL_SERVICE_HOST=192.168.10.131
MYSQL_SERVICE_DB_NAME=caseRetrieval-config
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=bdyh@2020
MYSQL_ DATABASE_NUM=1 #
Paramètre de réglage JVM
J VM_XMS=2g
JVM_XMX= 2g
JVM_XMN=2g
JVM_MS=128m
JVM_MMS=320m
vim custom.properties
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost :9200
# métriques pour prometheus
management.endpoints.web.exposure.include=*
# métriques pour la recherche élastique
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost :9200
# métriques pour l'influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management .metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
启动:docker-compose -f docker-compose-nacos.yaml up -d
Accès au navigateur : ip+8848, ip+8849, ip+8850 sont tous accessibles
Cinq, description de l'environnement de version de cluster haute disponibilité docker + mysql + nginx
Déploiement de l'IP de l'hôte
192.168.216.56 mysql nacos1
192.168.216.49 nacos2
192.168.216.35 nacos3
192.168.216.49 nginx pour l'équilibrage de charge
1. Installez mysql
2. Créez la base de données nacos_config, et insérez le sql lié à la configuration de nacos
3. cluster nacos
Tous les hôtes de déploiement créent leurs propres répertoires tels que /root/nacos/config logs pour le mappage de chemin
Ajoutez un fichier custom.properties sous mkdir -p /root/nacos/config
mkdir -p /root/nacos/logs
mkdir -p /data/nacos/config
/root/nacos/config
vi /root/nacos/config/custom.properties
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost :9200
# métriques pour prometheus
management.endpoints.web.exposure.include=*
# métriques pour la recherche élastique
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost :9200
# métriques pour l'influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management .metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
#D'autres sont commentés, y compris certaines surveillances, etc., vous devrez modifier la configuration par vous-même à l'avenir
. sont commentés, y compris certains Monitoring, etc., vous pouvez modifier la configuration par vous-même à l'avenir
Chaque hôte utilise docker pour démarrer nacos :
nacos au 192.168.216.56 :
docker run -d --name nacos1 --hostname nacos1 --net=host --add-host nacos1:192.168.216.56 --add-host nacos2:192.168.216.35 --add-host nacos3:192.168.216.49 -e PREFER_HOST_MODE =nom d'hôte -e MYSQL_SERVICE_HOST=192.168.216.56 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=xxxx -e MYSQL_SERVICE_PORT=3306 -e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848 " -v /racine/nacos /config/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs nacos/nacos-server:1.4.2
192.168.216.49的nacos :
docker run -d --name nacos2 --hostname nacos2 --net=host --add-host nacos1:192.168.216.56 --add-host nacos2:192.168.216.35 --add-host nacos3:192.168.216.49 -e PREFER_HOST_MODE =nom d'hôte -e MYSQL_SERVICE_HOST=192.168.216.56 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD='xxxx' -e MYSQL_SERVICE_PORT=3306 -e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:88 48" -v /racine /nacos/config/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs nacos/nacos-server:1.4.1
192.168.214.35的nacos :
docker run -d --name nacos3 --hostname nacos3 --net=host --add-host nacos1:192.168.216.56 --add-host nacos2:192.168.216.35 --add-host nacos3:192.168.216.49 -e PREFER_HOST_MODE =nom d'hôte -e MYSQL_SERVICE_HOST=192.168.216.56 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD='xxxx' -e MYSQL_SERVICE_PORT=3306 -e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:88 48" -v /racine /nacos/config/custom.properties:/home/nacos/init.d/custom.properties -v /root/nacos/logs:/home/nacos/logs nacos/nacos-server:1.4.1
4.安装nginx。配置负载均衡
flux { nacos en amont { serveur 192.168.216.56:8848 ; serveur 192.168.216.49:8848 ; serveur 192.168.216.35:8848 ; } serveur { écouter 18848 ; proxy_pass nacos ; } } 5.访问:192.168.216.49:18848/nacos
J'ai toujours rencontré divers problèmes lors de l'utilisation de nacos.Le résultat final est que le projet springcloud ne peut pas être enregistré sur le serveur nacos.Parfois, springcloud peut être enregistré sur le serveur nacos, mais le journal du projet signale toujours une erreur, qui peut être la suivante individuel :
09:25:28.782 [com.alibaba.nacos.client.Worker.longPolling.fixed-10.1.6.102_8848] ERREUR com.alibaba.nacos.client.config.http.ServerHttpAgent - [NACOS Exception httpPost] currentServerAddr : http:/ /10.1.6.102:8848 java.net.NoRouteToHostException : aucune route vers l'hôte (hôte inaccessible)
erviceName":"DEFAULT_GROUP@@hgc-gateway","stopped":false,"weight":1.0} java.lang.IllegalStateException : échec de la demande d'API :/nacos/v1/ns/instance/beat après tous les serveurs ([ 10.1.6.102:8848]) essayé : échec de la requête API : 10.1.6.102:8848/nacos/v1/ns/instance/beat. code : 500 msg : java.net.SocketTimeoutException : la connexion a expiré
11:26:10.281 [com.alibaba.nacos.client.Worker.longPolling.fixed-nacos-headless_8848] ERREUR com.alibaba.nacos.client.config.impl.ClientWorker - [fixed-nacos-headless_8848] [vérification-mise à jour ] obtenir l'exception dataId modifiée java.net.UnknownHostException : nacos-headless
Certains des éléments ci-dessus peuvent être enregistrés sur le serveur nacos, et certains d'entre eux ne peuvent pas être enregistrés. Par conséquent, lorsque le développement est en dépannage, il indique toujours qu'il y a un problème avec l'environnement, ce qui me rend très ennuyé. Évidemment, le est le même qu'au moment du déploiement. Comment peut-il y avoir des problèmes lors de la mise à jour de l'environnement de développement ?
Résumez les pièges de ce nacos :
1. Si vous utilisez le fichier d'arrangement officiel pour déployer des nacos dans k8s, il n'y a parfois aucun problème à utiliser le mode cluster, et parfois vous devez utiliser le mode autonome.Par exemple, j'utilise le cluster dans Huawei Cloud, pas de problème, mais je suis auto-construit Au début, les k8 utilisaient également le mode cluster, et il n'y avait pas de problème. Plus tard, la version a été développée et mise à jour. Je ne sais pas quels composants ont été mis à jour. Il y a des problèmes lors de l'utilisation du mode cluster Certains projets peuvent être enregistrés et certains projets ne peuvent pas être enregistrés, ils ne peuvent donc être modifiés qu'en mode autonome.
2. En utilisant le mode cluster dans l'environnement k8s, il y aura des nœuds anormaux dans la liste des nœuds de l'interface nacos ui, et il y aura plusieurs points derrière les nœuds, ce qui entraînera des rafales de cartes lors de l'actualisation
nacos-0.nacos-headless.wehgc-test.svc.cluster.local.:8848
3. Le nacos installé dans l'environnement Linux rencontrera également le problème qu'il peut être enregistré, mais le projet indiquera que la connexion est anormale.À ce stade, tant qu'il peut être enregistré, tout ira bien.
4. Nacos semble affecter la version de mysql-community ou de mariadb. Mysql5.7 et mysql8.0 seront différents. Le principal problème est le connecteur mysql. Vous devez vérifier mysql-connector-java-8.0.16 dans le paquet pot
5. Les versions des composants nacos et springcloud ont également des dépendances, comme les composants redisson que je connais, ne changez pas la version par hasard, sinon vous serez misérable
Remplir:
Pour le premier point, après être passé en mode autonome, il y aura un problème que les données ne peuvent pas être stockées dans mysql.Plus tard, je suis passé au mode cluster et j'ai utilisé le deuxième point pour résoudre le problème de la carte.
La solution ici pour le point 2 est
Ce sont deux solutions causées par votre nom de domaine racine kubernetes.Tout d'abord, l'attribut dns cluster.domain de kubernetes peut être utilisé par Baidu, et il existe cette solution. La deuxième modification consiste à déployer la variable d'environnement NACOS_SERVERS dans le Yaml et à ajouter un point après chaque nœud local configuré, comme ceci nacos-0.nacos-headless.default.svc.cluster.local.:8848
<!-- dépendance nacos -->
<dépendance>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.VERSION</version>
</dépendance>
<dépendance>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dépendance>
Réduisez la dépendance à la version nacos :
<!-- dépendance nacos -->
<dépendance>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>1.5.0.RELEASE</version>
</dépendance>
<dépendance>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dépendance>