在之前我有写过一个单机版本的Nacos整合,本章我将讲解在微服务下如何实现服务注册中心(Nacos)的集群模式。当然因为资源限制,所以我这边实现的为伪集群,也就是在一台服务器当中实现集群模式,想了解单机模式下的实现大家可以点击我的blog查看之前的文章。
Linux系统
我这边最近有一台最新的Linux服务器,所以环境我这边可以实时搭建,首先就是Linux系统
JDK1.8安装
Linux系统当中,有两种安装环境的方式,第一种是在官网下载包上传至系统进行环境配置,第二种是在系统中一键安装。我这边就直接一键安装了,首先查看系统是是否安装JDK
java -version
上图是显示我们没有安装JDK,然后我们先使用yum查找JDK版本信息
yum -y list java*
从上图可以看到有JDK1.6-JDK11的版本,我们此次安装为JDK1.8的版本,所以我们就直接安装,安装命令如下
yum install -y java-1.8.0-openjdk-devel.x86_64
在上面我们可以看到在最后显示的是Complete!翻译就是完全的。说明就安装完成了。在下面我还是一样执行java -version来测试是否安装成功。可以看到我此次操作系统就返回了我安装对应的版本
nginx安装
下载
nginx安装也一样我这边使用yum的方式来进行安装,首先我们需要先下载4个依赖,分别如下,可以一键安装
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
还是一样,看见有Complete!就说明成功!我将nginx安装到/usr/local/nginx的下面,首先进入/usr/local创建一个nginx文件夹,然后下载nginx的安装包,最后解压即可
cd /usr/local
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz
安装
首先进入下载好的nginx里面 考虑到后续安装ssl证书 添加两个模块,所以我们会添加两个模块,添加完成之后make一下即可,具体操作步骤如下
cd nginx-1.13.7
./configure --with-http_stub_status_module --with-http_ssl_module
make
make install
启动
以上步骤全部完后,就可以启动了,启动命令如下
./nginx
//查询nginx进程信息
ps aux|grep nginx
万事俱备,只剩部署,下面我们就开始实现伪Nacos集群配置吧
首先我这边是一台新机器 然后我创建一个nacos的文件夹来放置这三台Nacos注册中心
注意:因为8848是默认端口,所以我后面将端口改为8841、8842、8843为好,就不使用默认的端口了,不过因为我是利用空余时间写作 所以示例图片有些仅做参考即可
mkdir nacos
cd nacos
//下载nacos linux版本(1.4.2)
wget https://github.com/alibaba/nacos/releases/download/1.4.2/nacos-server-1.4.2.tar.gz
//解压包
tar -zxvf nacos-server-1.4.2.tar.gz
//重命名-nacos+端口号
mv nacos nacos8841
//以上的解压操作轮询三次即可得到一下的图片信息,安装包可以删除掉
解压到上面三个就说明成功了。当然你要是有多台服务器也就不需要这样了,我是资源有限所以才在一台服务器上搭建,下面就要改一些配置了
//修改8848配置信息 进入conf
//========================================================
cd nacos8841/conf/
//编辑application.properties文件
vim application.properties
//修改信息如下
//1.编辑端口
server.port=8841
//2.修改数据源 注意:数据源账号密码记得修改成你自己的 或者自己在数据源中添加一个nacos的角色
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos
//操作以上步骤后记得在数据库中创建一个nacos数据库,在nacos的安装包中是有一个sql文件。我们先创建好在执行就可以了,大家可以去conf文件下找到sql文件
//拷贝一份cluster.conf.example 之前那份当做备份
cp cluster.conf.example cluster.conf
//编辑cluster.conf文件
vim cluster.conf
//修改最下面的example信息,当然下面也可以使用自己服务器的IP
127.0.0.1:8841
127.0.0.1:8842
127.0.0.1:8843
//========================================================
//修改bin文件启动文件
//进入bin目录下
cd ../bin/
//编辑启动文件
vim startup.sh
//export MODE="cluster"代表集群模式
然后修改下面的信息,我们可以看到单机是512 512 256的 集群的很大,如果服务器内存不够的话还是修改一下这个值 不然可能会报错内存不足的错误,我这边是把集群的内存改成了单机的内存一样
以上步骤全部完成后我们先启动8841看能否成功,能成功后我们直接将刚刚所配置的文件直接拷贝到另外的两个包里面即可
//启动nacos服务
./startup.sh
启动后最后一段话说可以在out文件中查看启动之后的信息,我们只需输入以下命令即可查看
tail -f ../logs/start.out
以上可以看到信息为启动成功。并且是在集群模式下启动,然后我们使用ip+端口/nacos进入可以看到我们的集群信息,因为我现在只有8841打开,所以只有这一个是up的
没有问题的基础上我们在把这个服务所配置的信息copy到另外两台集群上面,具体实现命令如下
//copy文件信息
cp ./nacos8841/conf/application.properties ./nacos8842/conf/application.properties
cp ./nacos8841/conf/application.properties ./nacos8843/conf/application.properties
cp ./nacos8841/conf/cluster.conf ./nacos8842/conf/cluster.conf
cp ./nacos8841/conf/cluster.conf ./nacos8843/conf/cluster.conf
cp ./nacos8841/bin/startup.sh ./nacos8842/bin/startup.sh
cp ./nacos8841/bin/startup.sh ./nacos8843/bin/startup.sh
//注意:cp中有文件会出现是否覆盖的提示,直接y就行 也就是yes的意思
//cp完之后记得把cp后的端口改一下
vim nacos8842/conf/application.properties
server.port=8842
vim nacos8843/conf/application.properties
server.port=8843
//以上操作全部完成后即可启动后面两个集群
./nacos8842/bin/startup.sh
./nacos8843/bin/startup.sh
以上操作全部完成后我们就需要使用负载均衡分别反向代理到这三台注册中心上了,nginx就是一个不错的选择,下面我们就开始搭建,官方也是这么推荐的,上面我也教大家如何安装nginx了,下面我们直接配置
//新建一个文件然后将下面内容copy进去即可
touch nacos.conf
upstream nacoscluster{
server 127.0.0.1:8841;
server 127.0.0.1:8842;
server 127.0.0.1:8843;
}
server{
listen 8840;
server_name localhost;
location /nacos/{
proxy_pass http://nacoscluster/nacos/;
}
}
然后到sbin目录下启动nginx即可 重新启动命令如下
./nginx -s reload
重启后我们使用ip+8840端口号来进入nacos,可以看到集群就搭建好了
下面我们直接拿一个微服务项目来连接这台集群试试,只需要在server-addr中改一下ip和端口即可
启动后我们发现集群模式下的服务中心将可以看到我们的服务信息
在我们部署的集群里我们可以看到有一个logs文件和work文件
Nacos提供用于存储配置和其他元数据的key/value存储。为分布式系统中的外部化配置提供服务器端和客户端的支持。使用Spring Cloud Alibaba Nacos Config ,可以在Nacos Server集中管理你的Spring Cloud应用的外部属性配置
Nacos config和SpringCloud config的对比
下面我们将拿一个示例来做测试,比如我要在我的订单中创连接一个redis,那么我就在我的配置中心创建一个redis的,具体如下
创建好后添加,其实这个配置我们可以在数据库中的config_info表中查看到
我们每次更改编辑数据都会有历史更改,并且还可以执行回滚操作,在此还可以监听查询,查询到历史查询操作,还可以将我们的配置克隆到其他的配置中 这样可以免得我们每次还需要新建
设置权限之前我们需要在之前配置nacos的conf目录下的application.properties的文件中设置一个参数为true
下面我设置角色名称为fujii的人只能在这个空间为只读状态,这个大家可以自己去尝试 我这边就不过多介绍了
教大家一个小妙招,当我们需要SpringCloud Alibaba的依赖的时候可以直接ctrl+鼠标左右进入Alibaba依赖找到我们所需要的组件copy出来即可,下面就是nacos-config的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在启动类中加上拉取的配置信息
String username = applicationContext.getEnvironment().getProperty("user.name");
String userage = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user.name:" + username + ";user.age:" + userage);
以下是我的配置内容,上面的这个id将会作为我的application名称
然后我们在application.yml的基础之上在创建一个bootstrap.yml文件来放置我们拉取Nacos的配置信息,具体如下
spring:
application:
name: com.fujii.order.redis
cloud:
nacos:
server-addr: 127.0.0.1:8840
username: nacos
password: nacos
#config:
#namespace: public
然后我们启动可查看到我们所拉取的配置内容
当我们改变时,我们所拉取的内容也将会改变,改变之后也将可以看到我们的历史变更
1.设置其他方式的扩展名
Nacos客户端 默认的是Properties的文件扩展名,当然我们可以在我们项目中更改配置,只需要配置如下即可,file-extension既是设置其他扩展名的配置,当然我们还可以关闭拉取配置的操作,添加refresh-enabled: false即可 但是我们一般不设置这个 设置这个本来就是去或者配置的 添加这个原本就是画蛇添足
spring:
application:
name: com.fujii.order.redis
cloud:
nacos:
server-addr: 119.12.168.163:8840
username: nacos
password: nacos
#config:
#namespace: public
config:
file-extension: yaml
#refresh-enabled: false
2.设置粒度
传统方式:我们只需要profile下哪个环境就配置哪个环境
spring:
profiles:
active: dev
但是在这时 我们发现如果我们把配置文件设置在这个里面 就会出现安全问题 因为我们要在一个命名空间添加正式、测试环境,而权限只能针对命名空间去设置,所以不建议这么使用,除非公司对权限的要求不高 那么可以这么设置 否则不推荐
3.命名空间设置
设置不同的命名空间读取到的内容也不一样,也很简单,就在配置文件中设置namespace即可
spring:
application:
name: com.fujii.order.redis
cloud:
nacos:
server-addr: 119.12.168.163:8840
username: nacos
password: nacos
#config:
#namespace: public
config:
file-extension: yaml
namespace: dev
4.group配置 更细粒的分类
默认的配置就是DEFAULT_GROUP,当然可以自己设置,实现如下:
spring:
application:
name: com.fujii.order.redis
cloud:
nacos:
server-addr: 119.12.168.163:8840
username: nacos
password: nacos
#config:
#namespace: public
config:
file-extension: yaml
namespace: dev
group: TJ_GROUP
5.自定义扩展的DataId配置
5.1:shared-configs
spring:
application:
name: com.fujii.order.redis
cloud:
nacos:
server-addr: 119.12.168.163:8840
username: nacos
password: nacos
#config:
#namespace: public
config:
file-extension: yaml
namespace: dev
group: TJ_GROUP
shared-configs:
- data-id: com.fujii.common.properties
refresh: true
#group 默认的
spring:
application:
name: com.fujii.order.redis
cloud:
nacos:
server-addr: 119.12.168.163:8840
username: nacos
password: nacos
#config:
#namespace: public
config:
file-extension: yaml
namespace: dev
group: TJ_GROUP
shared-configs:
- data-id: com.fujii.common.properties
refresh: true
- data-id: com.fujii.common2.properties
refresh: true
#group 默认的
extension-configs[0]:
data-id: com.fujii.common3.properties
refresh: true
设置之后将会改变配置文件中的内容,在此我们可以看到优先级别为,并且大的会和小的形成互补
profile>默认>extension-configs>shared-configs(同一级的下标越大,优先级越高)
6.动态感知
@RefreshScope可以使@Value注解动态感知配置中心的值,只需要在类上加入即可
好了 Nacos就讲到这里 !大家有兴趣的可以跟着示例操作起来 读书不如烂笔头
结束语
若要前行,就要离开你现在停留的地方!