聽句勸! Nacos集群搭建可以看看這篇教程
一、Nacos 簡介
Nacos(Naming and Configuration Service)致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。
詳情查看Nacos 官方文檔[1]
二、Nacos 安裝
1、Nacos 依賴
Nacos 基于 java 開發的,運行依賴于 java 環境。
依賴 64 bit JDK 1.8+,前往官網下載 JDK[2]
2、Nacos 安裝
下載編譯后壓縮包,最新穩定版本[3]
- unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz cd nacos/bin
三、Nacos 部署
1、單實例部署
單實例部署不適合生產環境,單點故障是致命的。
Linux 單實例非集群模式啟動命令
- startup.sh -m standalone
Linux 單實例非集群模式關閉命令
- shutdown.sh
訪問 nacos 管理頁面,初始化用戶名密碼均為 nacos

2、集群部署
1、集群架構

- 高可用 Nginx 集群
- Nacos 集群(至少三個實例)
- 高可用數據庫集群(取代 Nacos 內嵌數據庫)
2、本地虛擬機模擬集群部署
本地環境準備
在本地 PC 機上利用 VMware workstation 虛擬出如上表所示的幾臺機器,其中 Nginx 和 MySQL 都是采用的單實例,僅做練習使用。
搭建步驟
初始化 nacos 必須的數據庫表并配置
找到 Nacos 安裝目錄下提供的數據庫腳本文件

在 MySQL 實例創建 nacos_config 庫并導入腳本

修改修改 Nacos 配置文件,指向 MySQL 實例,替換其內嵌數據庫

- #*************** 切換Nacos內嵌數據庫平臺為MySQL ***************#
- spring.datasource.platform=mysql
- db.num=1
- db.url.0=jdbc:mysql://192.168.15.141:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
- db.user=root
- db.password=123456
說明:三臺 nacos 實例都需要切換 MySQL 平臺,均需執行以上操作
nacos 集群配置
復制 cluster.conf 文件
Nacos 集群配置,修改 cluster.conf 文件
- [root@localhost conf]# vim ./cluster.conf
- #it is ip
- #example
- 192.168.15.145
- 192.168.15.147
- 192.168.15.148
說明:三臺 nacos 實例都需要做以上集群配置,至此關于 nacos 的配置結束了,可以嘗試以集群模式啟動三個 nacos 實例了
以集群模式分別啟動三個 nacos 實例


嘗試訪問 nacos 管理頁,測試三個實例是否正常

說明:如果三個實例以集群模式正常啟動,那么分別訪問三個實例的管理頁就是展示以上登錄頁了。如果不能訪問,則可能防火墻未開放 nacos 服務的端口,可執行如下命令。
- [root@localhost bin]# firewall-cmd --add-port=8848/tcp --permanent
- success
- [root@localhost bin]# firewall-cmd --reload
- success
- [root@localhost bin]# firewall-cmd --list-all
- public (active)
- target: default
- icmp-block-inversion: no
- interfaces: ens33
- sources:
- services: ssh dhcpv6-client
- ports: 27017/tcp 8848/tcp
- protocols:
- masquerade: no
- forward-ports:
- source-ports:
- icmp-blocks:
- rich rules:
- [root@localhost bin]#
Nginx 配置
- Nginx 安裝參考,Nginx 源碼安裝[4]
- 修改 Nginx 配置文件 nginx.conf
- worker_processes 1;
- events {
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- sendfile on;
- keepalive_timeout 65;
- #nacos集群負載均衡
- upstream nacos-cluster {
- server 192.168.15.145:8848;
- server 192.168.15.147:8848;
- server 192.168.15.148:8848;
- }
- server {
- listen 80;
- server_name 192.168.15.146;
- location / {
- #root html;
- #index index.html index.htm;
- proxy_pass http://nacos-cluster;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
啟動 Nginx
- /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
微服務配置
微服務父 pom 配置
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.atguigu.springcloud</groupId>
- <artifactId>cloud2020</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>pom</packaging>
- <!-- 模塊 -->
- <modules>
- <module>cloud-alibaba-nacos-config-client-3377</module>
- </modules>
- <!-- 統一管理jar版本 -->
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <maven.compiler.source>1.8</maven.compiler.source>
- <maven.compiler.target>1.8</maven.compiler.target>
- <junit.version>4.12</junit.version>
- <log4j.version>1.2.17</log4j.version>
- <lombok.version>1.16.18</lombok.version>
- <mysql.version>5.1.47</mysql.version>
- <druid.version>1.1.16</druid.version>
- <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
- </properties>
- <!-- 統一依賴管理 -->
- <dependencyManagement>
- <dependencies>
- <!-- spring boot 2.2.2 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot</artifactId>
- <version>2.2.2.RELEASE</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <!-- spring cloud Hoxton.SR1 -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>Hoxton.SR1</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <!-- spring cloud alibaba 2.1.0.RELEASE -->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-dependencies</artifactId>
- <version>2.1.0.RELEASE</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <!-- mysql連接器 -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql.version}</version>
- </dependency>
- <!--druid 數據源-->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid.version}</version>
- </dependency>
- <!-- mybatis 整合 spring -->
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>${mybatis.spring.boot.version}</version>
- </dependency>
- <!-- junit -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>${junit.version}</version>
- </dependency>
- <!-- log4j -->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j.version}</version>
- </dependency>
- <!-- lombok -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>${lombok.version}</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <fork>true</fork>
- <addResources>true</addResources>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
微服務 pom 依賴
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>cloud2020</artifactId>
- <groupId>com.atguigu.springcloud</groupId>
- <version>1.0-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <artifactId>cloud-alibaba-nacos-config-client-3377</artifactId>
- <dependencies>
- <!-- nacos config -->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
- </dependency>
- <!-- nacos discovery -->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
- <!-- web -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <!-- actuator -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <!-- test -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <!-- devtools -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <scope>runtime</scope>
- <optional>true</optional>
- </dependency>
- <!-- lombok -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- </dependencies>
- </project>
微服務 bootstrap.yml 配置
- server:
- port: 3377
- spring:
- application:
- name: nacos-config-client
- cloud:
- nacos:
- discovery:
- #server-addr: my.nacos.com:8848
- #nacos集群配置(Nginx)
- server-addr: 192.168.15.146:80
- config:
- #server-addr: my.nacos.com:8848
- #nacos集群配置(Nginx)
- server-addr: 192.168.15.146:80
- #指定yaml格式的配置
- file-extension: yaml
- #指定分組
- group: DEV_GROUP
- #指定命名空間ID
- namespace: my_nacos_namespace
微服務啟動類配置
- package com.atguigu.springcloud;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- @SpringBootApplication
- @EnableDiscoveryClient
- public class NacosConfigClientMain3377 {
- public static void main(String[] args) {
- SpringApplication.run(NacosConfigClientMain3377.class, args);
- }
- }
微服務 Controller 讀取 nacos 配置
- package com.atguigu.springcloud.controller;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.cloud.context.config.annotation.RefreshScope;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
- @RestController
- @Slf4j
- @RefreshScope //支持Nacos的動態刷新功能
- public class ConfigClientController {
- @Value("${config.info}")
- private String configInfo;
- @GetMapping("/config/info")
- public String getConfigInfo() {
- return configInfo;
- }
- }
在 nacos 管理頁上維護一個配置


本地啟動微服務并訪問

參考
[1]Nacos 官方文檔: https://nacos.io/zh-cn/docs/what-is-nacos.html
[2]前往官網下載 JDK: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
[3]最新穩定版本: https://github.com/alibaba/nacos/releases[4]Nginx 源碼安裝: https://segmentfault.com/a/1190000022860417