一、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]
- unzipnacos-server-$version.zip或者tar-xvfnacos-server-$version.tar.gzcdnacos/bin
三、Nacos 部署
1、单实例部署
单实例部署不适合生产环境,单点故障是致命的。
Linux 单实例非集群模式启动命令
- startup.sh-mstandalone
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@localhostconf]#vim./cluster.conf
- #itisip
- #example
- 192.168.15.145
- 192.168.15.147
- 192.168.15.148
说明:三台 nacos 实例都需要做以上集群配置,至此关于 nacos 的配置结束了,可以尝试以集群模式启动三个 nacos 实例了
以集群模式分别启动三个 nacos 实例
尝试访问 nacos 管理页,测试三个实例是否正常
说明:如果三个实例以集群模式正常启动,那么分别访问三个实例的管理页就是展示以上登录页了。如果不能访问,则可能防火墙未开放 nacos 服务的端口,可执行如下命令。
- [root@localhostbin]#firewall-cmd--add-port=8848/tcp--permanent
- success
- [root@localhostbin]#firewall-cmd--reload
- success
- [root@localhostbin]#firewall-cmd--list-all
- public(active)
- target:default
- icmp-block-inversion:no
- interfaces:ens33
- sources:
- services:sshdhcpv6-client
- ports:27017/tcp8848/tcp
- protocols:
- masquerade:no
- forward-ports:
- source-ports:
- icmp-blocks:
- richrules:
- [root@localhostbin]#
Nginx 配置
- Nginx 安装参考,Nginx 源码安装[4]
- 修改 Nginx 配置文件 nginx.conf
- worker_processes1;
- events{
- worker_connections1024;
- }
- http{
- includemime.types;
- default_typeapplication/octet-stream;
- sendfileon;
- keepalive_timeout65;
- #nacos集群负载均衡
- upstreamnacos-cluster{
- server192.168.15.145:8848;
- server192.168.15.147:8848;
- server192.168.15.148:8848;
- }
- server{
- listen80;
- server_name192.168.15.146;
- location/{
- #roothtml;
- #indexindex.htmlindex.htm;
- proxy_passhttp://nacos-cluster;
- }
- error_page500502503504/50x.html;
- location=/50x.html{
- roothtml;
- }
- }
- }
启动 Nginx
- /usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf
微服务配置
微服务父 pom 配置
- "1.0"encoding="UTF-8"?>
-
"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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
4.0.0 -
com.atguigu.springcloud -
cloud2020 -
1.0-SNAPSHOT -
pom - --模块-->
-
-
cloud-alibaba-nacos-config-client-3377 -
- --统一管理jar版本-->
-
-
UTF-8 -
-
1.8 -
1.8 -
4.12 -
1.2.17 -
1.16.18 -
5.1.47 -
1.1.16 -
1.3.0 - --统一依赖管理-->
-
-
- --springboot2.2.2-->
-
-
org.springframework.boot -
-
spring-boot -
2.2.2.RELEASE -
pom -
import - --springcloudHoxton.SR1-->
-
-
org.springframework.cloud -
-
spring-cloud-dependencies -
Hoxton.SR1 -
pom -
import - --springcloudalibaba2.1.0.RELEASE-->
-
-
com.alibaba.cloud -
-
spring-cloud-alibaba-dependencies -
2.1.0.RELEASE -
pom -
import - --mysql连接器-->
-
-
mysql -
-
mysql-connector-java -
${mysql.version} - --druid数据源-->
-
-
com.alibaba -
-
druid -
${druid.version} - --mybatis整合spring-->
-
-
org.mybatis.spring.boot -
-
mybatis-spring-boot-starter -
${mybatis.spring.boot.version} - --junit-->
-
-
junit -
-
junit -
${junit.version} - --log4j-->
-
-
log4j -
-
log4j -
${log4j.version} - --lombok-->
-
-
org.projectlombok -
-
lombok -
${lombok.version} -
-
-
-
org.springframework.boot -
-
spring-boot-maven-plugin -
-
true -
-
true
微服务 pom 依赖
- "1.0"encoding="UTF-8"?>
-
"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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-
cloud2020 -
-
com.atguigu.springcloud -
1.0-SNAPSHOT -
4.0.0 -
cloud-alibaba-nacos-config-client-3377 -
- --nacosconfig-->
-
-
com.alibaba.cloud -
-
spring-cloud-starter-alibaba-nacos-config - --nacosdiscovery-->
-
-
com.alibaba.cloud -
-
spring-cloud-starter-alibaba-nacos-discovery - --web-->
-
-
org.springframework.boot -
-
spring-boot-starter-web - --actuator-->
-
-
org.springframework.boot -
-
spring-boot-starter-actuator - --test-->
-
-
org.springframework.boot -
-
spring-boot-starter-test -
test - --devtools-->
-
-
org.springframework.boot -
-
spring-boot-devtools -
runtime -
true - --lombok-->
-
-
org.projectlombok -
-
lombok -
true
微服务 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
微服务启动类配置
- packagecom.atguigu.springcloud;
- importorg.springframework.boot.SpringApplication;
- importorg.springframework.boot.autoconfigure.SpringBootApplication;
- importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;
- @SpringBootApplication
- @EnableDiscoveryClient
- publicclassNacosConfigClientMain3377{
- publicstaticvoidmain(String[]args){
- SpringApplication.run(NacosConfigClientMain3377.class,args);
- }
- }
微服务 Controller 读取 nacos 配置
- packagecom.atguigu.springcloud.controller;
- importlombok.extern.slf4j.Slf4j;
- importorg.springframework.beans.factory.annotation.Value;
- importorg.springframework.cloud.context.config.annotation.RefreshScope;
- importorg.springframework.web.bind.annotation.GetMapping;
- importorg.springframework.web.bind.annotation.RestController;
- @RestController
- @Slf4j
- @RefreshScope//支持Nacos的动态刷新功能
- publicclassConfigClientController{
- @Value("${config.info}")
- privateStringconfigInfo;
- @GetMapping("/config/info")
- publicStringgetConfigInfo(){
- returnconfigInfo;
- }
- }
在 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
原文链接:https://mp.weixin.qq.com/s/nbAEamMNTrMc8HtL9-Ru_Q