共计 8005 个字符,预计需要花费 21 分钟才能阅读完成。
丸趣 TV 小编给大家分享一下 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 管理页上维护一个配置
本地启动微服务并访问
以上是“Nacos 集群如何搭建”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!