浅谈注册中心选型
搭建Nacos高可用集群
准备工作
正式搭建
遇到的问题
总结
浅谈注册中心选型
在注册中心的选型上有多种选择,Spring Cloud Netflix技术栈会优选Eureka(当然也可以选择Consul),而基于Dubbo的服务注册与发现一般选择ZooKeeper较多。
Eureka基于AP,Eureka Server集群中任何一台机器宕机后整个集群仍然可以对外提供服务,但是数据会出现不一致;而ZooKeeper是基于CP来实现,当Leader不可用时,会对外停止服务然后进行Leader选择,这个时间段内ZooKeeper集群对外是不可用的,显然,这是牺牲了可用性来换取一致性。
而Consul属于非Java语言,上了生产以后维护和问题排查困难。
可以看到,其实基于CP和AP的注册中心都有着自己的局限,具体生产环境上的选择需要根据业务场景进行分析。
在今天的微服务技术栈中,Spring Cloud Alibaba渐渐火了起来,在Spring Cloud Alibaba中,官方首推Nacos作为注册中心。
下面是官方的一些介绍:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
本文将从实践出发,搭建一个Nacos服务注册中心的高可用集群。
搭建Nacos高可用集群
搭建出来的集群有3个Nacos Server。
准备工作
首先需要在三台虚拟机上安装好CentOS系统,并且安装好JDK。
安装过程略。
编译Nacos :
- git clone https://github.com/alibaba/nacos.git
- mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
正式搭建
跳转到distribution/target目录
使用WinSCP将nacos-server-1.4.0-SNAPSHOT.tar.gz压缩包上传到3台虚拟机上,然后解压缩
tar -zxvf nacos-server-1.4.0-SNAPSHOT.tar.gz
进入压缩后的文件夹nacos,重命名cluster.conf.example,去掉example,配置三台机器的地址和端口号,默认端口号是8848
192.168.1.104:8848
192.168.1.105:8848
192.168.1.106:8848宿主机(Windows系统)上安装MySQL,创建一个nacos数据库,执行nacos-mysql.sql脚本文件
修改application.properties中的数据源配置
spring.datasource.platform=mysql
db.num=1
# 数据源地址
db.url.0=jdbc:mysql://192.168.1.102:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# 用户名
db.user=root
# 密码
db.password=1027分别进入三台机器的bin目录,执行
./startup.sh
,检查logs目录下的start.out
启动日志(cat start.out
),如果启动成功就可以了,访问任何一个节点的8848端口的/nacos地址,进入nacos控制台,可以看到nacos集群的具体情况默认用户名和密码皆为nacos
遇到的问题
执行
./startup.sh
报错:/bin/bash^M: bad interpreter
如果是在windows下编辑的脚本,到了linux下运行时会报出这样的错误
/bin/bash^M:bad interpreter: No such file or directory
这是因为编码的问题,需要进行编码转换。使用sudo vim xxx打开文件,:set ff可以看到当前的格式,应该是dos,使用set ff=unix,更改其格式,然后保存退出,就能正常的运行程序了虚拟机Nacos Server连不上宿主机的mysql
解决方案:https://blog.csdn.net/ruziwang/article/details/80361700
grant all privileges on *.* to 'root'@'%' identified by '1027';
本地mysql没有设置可以被远程访问到,所以需要执行上面的语句赋予虚拟机访问权限
- root : 用户名
- 1027: 密码
总结
本文探讨了Nacos高可用注册中心集群的搭建,在Nacos连接mysql失败问题上花费了不少时间,对于作者这样的Linux小白来说,多踩踩坑还是有好处的。原本以为很轻松地就搭建好了,没想到居然花费了大半天的时间,我得到的体会就是要细心细心再细心!