nacos 默认使用内嵌数据库 Derby,做持久化,我们也可以使用 外部MySQL 作为持久化服务! 在使用 MySQL 作数据库时,需要提前创建数据库和表;
官网简绍

☑ 部署部分,适用于直接部署Nacos2.0.0以上版本的用户。
☑ 升级部分,适用于从Nacos1.X版本平滑升级到Nacos2.0.0版本(以及2.0.0-BETA版本)的用户。Nacos2.0.0-ALPHA版本无法进行平滑升级,请勿参照本文档进行升级。
由于Nacos1.X和Nacos2.0的数据结构发生了变化,为了能够完成平滑升降级,需要将数据进行双写,分别生成Nacos1和Nacos2的数据结构进行存储。因此会对性能有一定影响。当集群升级并稳定运行后,可以关闭双写,关闭双写后将会失去平滑降级的功能。
在Nacos2.1.0版本后,默认关闭了
双写能力,因此无法支持从Nacos1.X版本平滑升级到2.1.0的能力,若需要使用平滑升级能力,从Nacos1.X直接升级到Nacos2.1.0版本,需要在application.properties文件中设置配置nacos.core.support.upgrade.from.1x=true.
为保证用户敏感配置数据的安全,Nacos 提供了配置加密的新特性。降低了用户使用的风险,也不需要再对配置进行单独的加密处理。
前提条件
• 版本:
老版本暂时不兼容,目前只基于2.x版本进行了改造,推荐版本 > 2.0.4。
• 内嵌数据库启动:
数据库表 config_info、config_info_beta、his_config_info中需要新增字段 encrypted_data_key ,用来存储每一个配置项加密使用的秘钥。新版本的默认创建表的sql中已经添加该字段。
如果之前使用过内嵌数据库的单机模式启动,则需要删除 nacos/data 文件夹,在重新启动会重新创建表。
• MySQL启动:
数据库表 config_info、config_info_beta、his_config_info中需要新增字段 encrypted_data_key ,用来存储每一个配置项加密使用的秘钥。新版本的默认创建表的sql中已经添加该字段。
对于目前已经搭建好的 Nacos 使用以下 sql 将字段添加到对应的表中:
ALTER TABLE table_name ADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥'
最新版Nacos的初始化SQL文件
一、Nacos 1.4.1升级到v2.1.0后启动报如下错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memoryMonitor' defined in URL [jar:file:/home/nacos/target/nacacos-config-2.1.0.jar!/com/alibaba/nacos/config/server/monitor/MemoryMonitor.class]: Unsatisfied dependency expressed through constructor parameter 0; nested erk.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'asyncNotifyService': Unsatisfied dependency expressed through field 'dumpServicpringframework.beans.factory.BeanCreationException: Error creating bean with name 'externalDumpService': Invocation of init method failed; nested exception is ver did not start because dumpservice bean construction failure :
PreparedStatementCallback; bad SQL grammar [SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type,encrypted_data_key FROM config_info WHEIT ?,?]; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'encrypted_data_key' in 'field list'
二、解决方案:
看提示是数据表缺少encrypted_data_key字段,那就手动为据表添加该字段
为保证用户敏感配置数据的安全,Nacos 提供了配置加密的新特性。降低了用户使用的风险,也不需要再对配置进行单独的加密处理。
数据库表 config_info、config_info_beta、his_config_info 中需要新增字段 encrypted_data_key ,用来存储每一个配置项加密使用的秘钥。新版本的默认创建表的sql中已经添加该字段。
对于目前已经搭建好的 Nacos 使用以下 sql 将字段添加到对应的表中:
ALTER TABLE config_info ADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥';
alter table config_info_beta add column `config_info_beta` text NOT NULL COMMENT '秘钥';
alter table his_config_info add column `config_info_beta` text NOT NULL COMMENT '秘钥';
三、主配置文件
/home/nacos/conf/application.properties
1 # spring
2 server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
3 server.contextPath=/nacos
4 server.port=${NACOS_APPLICATION_PORT:8848}
5 spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""}
6 nacos.cmdb.dumpTaskInterval=3600
7 nacos.cmdb.eventTaskInterval=10
8 nacos.cmdb.labelTaskInterval=300
9 nacos.cmdb.loadDataAtStart=false
10 db.num=${MYSQL_DATABASE_NUM:1}
11 db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
12 db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
13 db.user=${MYSQL_SERVICE_USER}
14 db.password=${MYSQL_SERVICE_PASSWORD}
15 ### The auth system to use, currently only 'nacos' is supported:
16 nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
17
18
19 ### The token expiration in seconds:
20 nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
21
22 ### The default token:
23 nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
24
25 ### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
26 nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
27 nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
28 nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
29 nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
30 server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
31 server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
32 # default current work dir
33 server.tomcat.basedir=
34 ## spring security config
35 ### turn off security
36 nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
37 # metrics for elastic search
38 management.metrics.export.elastic.enabled=false
39 management.metrics.export.influx.enabled=false
40
41 nacos.naming.distro.taskDispatchThreadCount=10
42 nacos.naming.distro.taskDispatchPeriod=200
43 nacos.naming.distro.batchSyncKeyCount=1000
44 nacos.naming.distro.initDataRatio=0.9
45 nacos.naming.distro.syncRetryDelay=5000
46 nacos.naming.data.warmup=true
注意,关闭双写后无法在进行平滑降级,请先确认关闭前集群正确运行。
为了节省性能开销,当集群部署完成后,可以先观察一段时间运行情况,当确认无误后,可以关闭双写,从而释放性能,具体的关闭方式是通过API进行:
curl -X PUT 'localhost:8848/nacos/v1/ns/operator/switches?entry=doubleWriteEnabled&value=false'
关闭后可以从logs/naming-server.log日志中观察到Disable Double write, stop and clean v1.x cache and features字样。说明关闭双写。
通过 SPI 的机制抽象出加密和解密的操作,Nacos 默认提供 AES 的实现。用户也可以自定义加解密的实现方式。具体的实现在 nacos-plugin 仓库。
在 Nacos 服务端启动的时候就会加载所有依赖的加解密算法,然后通过发布配置的 dataId 的前缀来进行匹配是否需要加解密和使用的加解密算法。
客户端发布的配置会在<客户端>通过filter完成加解密,也就是配置在传输过程中都是密文的。而控制台发布的配置会在服务端进行处理。
Nacos 加解密插件是可插拔的,有没有都不影响 Nacos 的核心功能的运行。如果想要使用 Naocs 的配置加解密功能需要单独引用加密算法的实现。客户端和服务端都通过添加以下依赖来使用 AES 加解密算法,服务端推荐添加到 config 模块下。
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-aes-encryption-plugin</artifactId>
<version>${nacos-aes-encryption-plugin.version}</version>
</dependency>
${nacos-aes-encryption-plugin.version} 可以获取插件的最新版本。目前插件需要自己编译,并未上传至maven中央仓库
编译插件之前需要先编译nacos并安装至本地仓库.
git clone git@github.com:alibaba/nacos.git
cd nacos && mvn -B clean package install -Dmaven.test.skip=true # 若出现revision变量无法解析,请更新maven至最新版本
git clone git@github.com:nacos-group/nacos-plugin.git
mvn install # 建议上传到公司的maven仓库
Only to burn the back of the road, in order to look back!
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or