溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nacos集群如何搭建

發(fā)布時間:2021-11-16 16:26:02 來源:億速云 閱讀:129 作者:小新 欄目:系統(tǒng)運維

小編給大家分享一下Nacos集群如何搭建,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

 一、Nacos 簡介

Nacos(Naming and Configuration Service)致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos  提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。

詳情查看Nacos 官方文檔[1]

二、Nacos 安裝

1、Nacos 依賴

Nacos 基于 java 開發(fā)的,運行依賴于 java 環(huán)境。

依賴 64 bit JDK 1.8+,前往官網(wǎng)下載 JDK[2]

2、Nacos 安裝

下載編譯后壓縮包,最新穩(wěn)定版本[3]

unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz cd nacos/bin

三、Nacos 部署

1、單實例部署

單實例部署不適合生產(chǎn)環(huán)境,單點故障是致命的。

Linux 單實例非集群模式啟動命令

startup.sh -m standalone

Linux 單實例非集群模式關(guān)閉命令

shutdown.sh

訪問 nacos 管理頁面,初始化用戶名密碼均為 nacos

Nacos集群如何搭建

2、集群部署

1、集群架構(gòu)

Nacos集群如何搭建
  • 高可用 Nginx 集群

  • Nacos 集群(至少三個實例)

  • 高可用數(shù)據(jù)庫集群(取代 Nacos 內(nèi)嵌數(shù)據(jù)庫)

2、本地虛擬機模擬集群部署

本地環(huán)境準備

Nacos集群如何搭建

在本地 PC 機上利用 VMware workstation 虛擬出如上表所示的幾臺機器,其中 Nginx 和 MySQL  都是采用的單實例,僅做練習(xí)使用。

搭建步驟

初始化 nacos 必須的數(shù)據(jù)庫表并配置

找到 Nacos 安裝目錄下提供的數(shù)據(jù)庫腳本文件

Nacos集群如何搭建

在 MySQL 實例創(chuàng)建 nacos_config 庫并導(dǎo)入腳本

Nacos集群如何搭建

修改修改 Nacos 配置文件,指向 MySQL 實例,替換其內(nèi)嵌數(shù)據(jù)庫

Nacos集群如何搭建
#*************** 切換Nacos內(nèi)嵌數(shù)據(jù)庫平臺為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 平臺,均需執(zhí)行以上操作

nacos 集群配置

復(fù)制 cluster.conf 文件

Nacos集群如何搭建

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 實例都需要做以上集群配置,至此關(guān)于 nacos 的配置結(jié)束了,可以嘗試以集群模式啟動三個 nacos 實例了

以集群模式分別啟動三個 nacos 實例

Nacos集群如何搭建
Nacos集群如何搭建

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

Nacos集群如何搭建

說明:如果三個實例以集群模式正常啟動,那么分別訪問三個實例的管理頁就是展示以上登錄頁了。如果不能訪問,則可能防火墻未開放 nacos  服務(wù)的端口,可執(zhí)行如下命令。

[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

微服務(wù)配置

微服務(wù)父 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>      <!-- 統(tǒng)一管理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>      <!-- 統(tǒng)一依賴管理 -->     <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 數(shù)據(jù)源-->             <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>

微服務(wù) 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>

微服務(wù) 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

微服務(wù)啟動類配置

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);     }  }

微服務(wù) 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的動態(tài)刷新功能 public class ConfigClientController {      @Value("${config.info}")     private String configInfo;      @GetMapping("/config/info")     public String getConfigInfo() {         return configInfo;     } }

在 nacos 管理頁上維護一個配置

Nacos集群如何搭建
Nacos集群如何搭建

本地啟動微服務(wù)并訪問

Nacos集群如何搭建

以上是“Nacos集群如何搭建”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI