SpringCloudAlibaba:Nacos的数据持久化

x33g5p2x  于2021-10-26 转载在 Spring  
字(10.3k)|赞(0)|评价(0)|浏览(840)

一、数据持久化

在之前的教程中,我们对于Nacos服务端自身并没有做过什么特殊的配置,一切均以默认的单机模式运行,完成了上述所有功能的学习。但是,Nacos的单机运行模式仅适用于学习与测试环境,对于有高可用要求的生产环境显然是不合适的。那么,我们是否可以直接启动多个单机模式的Nacos,然后客户端指定多个Nacos节点就可以实现高可用吗?答案是否定的。

在搭建Nacos集群之前,我们需要先修改Nacos的数据持久化配置为MySQL存储。默认情况下,Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只要支持MySQL的存储。

二、实现

单机模式支持mysql

第一步:安装数据库,版本要求:5.6.5+

第二步:初始化MySQL数据库,数据库初始化文件:nacos-mysql.sql,该文件可以在Nacos程序包下的conf目录下获得

第三步:修改配置文件

修改conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例如下:

  1. spring.datasource.platform=mysql
  2. db.num=1
  3. db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
  4. db.user=root
  5. db.password=

docker安装nacos并实现数据持久化

1.准备初始化nacos数据库的sql脚本
  1. 此sql用于创建nacos server运行所需的表和数据,去下载nacos server安装包,地址是:https://github.com/alibaba/nacos/releases
  2. 下载的安装包解压后,文件nacos/conf/nacos-mysql.sql就是我们所需的sql脚本;
  3. 打开此脚本,可见内容中没有创建数据库,这样的脚本在mysql的docker容器内无法自动执行,需要在sql文件的开始位置添加以下内容:
  1. CREATE DATABASE nacos_config;
  2. use nacos_config;

用navicat连接这个数据库,执行下面的sql脚本

  1. /* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
  2. CREATE DATABASE nacos_config;
  3. use nacos_config;
  4. /******************************************/
  5. /* 数据库全名 = nacos_config */
  6. /* 表名称 = config_info */
  7. /******************************************/
  8. CREATE TABLE `config_info` (
  9. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  10. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  11. `group_id` varchar(255) DEFAULT NULL,
  12. `content` longtext NOT NULL COMMENT 'content',
  13. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  14. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  15. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  16. `src_user` text COMMENT 'source user',
  17. `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  18. `app_name` varchar(128) DEFAULT NULL,
  19. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  20. `c_desc` varchar(256) DEFAULT NULL,
  21. `c_use` varchar(64) DEFAULT NULL,
  22. `effect` varchar(64) DEFAULT NULL,
  23. `type` varchar(64) DEFAULT NULL,
  24. `c_schema` text,
  25. PRIMARY KEY (`id`),
  26. UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  27. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
  28. /******************************************/
  29. /* 数据库全名 = nacos_config */
  30. /* 表名称 = config_info_aggr */
  31. /******************************************/
  32. CREATE TABLE `config_info_aggr` (
  33. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  34. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  35. `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  36. `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  37. `content` longtext NOT NULL COMMENT '内容',
  38. `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  39. `app_name` varchar(128) DEFAULT NULL,
  40. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  41. PRIMARY KEY (`id`),
  42. UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
  43. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
  44. /******************************************/
  45. /* 数据库全名 = nacos_config */
  46. /* 表名称 = config_info_beta */
  47. /******************************************/
  48. CREATE TABLE `config_info_beta` (
  49. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  50. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  51. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  52. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  53. `content` longtext NOT NULL COMMENT 'content',
  54. `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  55. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  56. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  57. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  58. `src_user` text COMMENT 'source user',
  59. `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  60. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  61. PRIMARY KEY (`id`),
  62. UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  63. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
  64. /******************************************/
  65. /* 数据库全名 = nacos_config */
  66. /* 表名称 = config_info_tag */
  67. /******************************************/
  68. CREATE TABLE `config_info_tag` (
  69. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  70. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  71. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  72. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  73. `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  74. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  75. `content` longtext NOT NULL COMMENT 'content',
  76. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  77. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  78. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  79. `src_user` text COMMENT 'source user',
  80. `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  81. PRIMARY KEY (`id`),
  82. UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
  83. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
  84. /******************************************/
  85. /* 数据库全名 = nacos_config */
  86. /* 表名称 = config_tags_relation */
  87. /******************************************/
  88. CREATE TABLE `config_tags_relation` (
  89. `id` bigint(20) NOT NULL COMMENT 'id',
  90. `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  91. `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  92. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  93. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  94. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  95. `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  96. PRIMARY KEY (`nid`),
  97. UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  98. KEY `idx_tenant_id` (`tenant_id`)
  99. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
  100. /******************************************/
  101. /* 数据库全名 = nacos_config */
  102. /* 表名称 = group_capacity */
  103. /******************************************/
  104. CREATE TABLE `group_capacity` (
  105. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  106. `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  107. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  108. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  109. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  110. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  111. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  112. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  113. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  114. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  115. PRIMARY KEY (`id`),
  116. UNIQUE KEY `uk_group_id` (`group_id`)
  117. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
  118. /******************************************/
  119. /* 数据库全名 = nacos_config */
  120. /* 表名称 = his_config_info */
  121. /******************************************/
  122. CREATE TABLE `his_config_info` (
  123. `id` bigint(64) unsigned NOT NULL,
  124. `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  125. `data_id` varchar(255) NOT NULL,
  126. `group_id` varchar(128) NOT NULL,
  127. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  128. `content` longtext NOT NULL,
  129. `md5` varchar(32) DEFAULT NULL,
  130. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  131. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  132. `src_user` text,
  133. `src_ip` varchar(50) DEFAULT NULL,
  134. `op_type` char(10) DEFAULT NULL,
  135. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  136. PRIMARY KEY (`nid`),
  137. KEY `idx_gmt_create` (`gmt_create`),
  138. KEY `idx_gmt_modified` (`gmt_modified`),
  139. KEY `idx_did` (`data_id`)
  140. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
  141. /******************************************/
  142. /* 数据库全名 = nacos_config */
  143. /* 表名称 = tenant_capacity */
  144. /******************************************/
  145. CREATE TABLE `tenant_capacity` (
  146. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  147. `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  148. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  149. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  150. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  151. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  152. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  153. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  154. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  155. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  156. PRIMARY KEY (`id`),
  157. UNIQUE KEY `uk_tenant_id` (`tenant_id`)
  158. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
  159. CREATE TABLE `tenant_info` (
  160. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  161. `kp` varchar(128) NOT NULL COMMENT 'kp',
  162. `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  163. `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  164. `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  165. `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  166. `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  167. `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  168. PRIMARY KEY (`id`),
  169. UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  170. KEY `idx_tenant_id` (`tenant_id`)
  171. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
  172. CREATE TABLE `users` (
  173. `username` varchar(50) NOT NULL PRIMARY KEY,
  174. `password` varchar(500) NOT NULL,
  175. `enabled` boolean NOT NULL
  176. );
  177. CREATE TABLE `roles` (
  178. `username` varchar(50) NOT NULL,
  179. `role` varchar(50) NOT NULL,
  180. UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
  181. );
  182. CREATE TABLE `permissions` (
  183. `role` varchar(50) NOT NULL,
  184. `resource` varchar(255) NOT NULL,
  185. `action` varchar(8) NOT NULL,
  186. UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
  187. );
  188. INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
  189. INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
2.docker安装nacos
  1. docker run -d -p 8848:8848
  2. -e MODE=standalone
  3. -e TZ=Asia/Shanghai
  4. -e LANG=en_US.UTF-8
  5. -e SPRING_DATASOURCE_PLATFORM=mysql
  6. -e MYSQL_SERVICE_HOST=192.168.31.100
  7. -e MYSQL_SERVICE_PORT=3306
  8. -e MYSQL_SERVICE_DB_NAME=nacos_config
  9. -e MYSQL_SERVICE_USER=root
  10. -e MYSQL_SERVICE_PASSWORD=root
  11. -v /huanglei/v-nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
  12. -v /huanglei/v-nacos/logs:/home/nacos/logs
  13. --restart=always
  14. --name=nacos nacos/nacos-server

使用docker logs 容器名 是下面这个样子就启动成功了

在浏览器:192.168.31.100:8848/nacos打开nacos界面,然后输入账号密码,账号密码都是nacos

3.在nacos中添加配置

4.查看数据库

5.注意

这里一定要先把把nacos_config数据库先创建出来,不会启动nacos会报错误

相关文章