nacos支持mysql和postgreSQL持久化

一、下载源码并配置

  • 下载github源码: https://github.com/tudan110/nacos/tree/postgresql-and-mysql-dev
  • 修改相关console子模块下application.properties:
spring.datasource.platform=postgresql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:postgresql://ip:5432/qcrddb?currentSchema=nacos_config
db.user.0=xx
db.password.0=xxx
  • 启动nacos启动类服务:console模块下的Nacos.java

二、创建postgreSQL数据表

-- 需事先创建nacos_config模块;
CREATE TABLE nacos_config.config_info (
	id serial4 NOT NULL,
	data_id varchar(255) NOT NULL,
	group_id varchar(255) NULL DEFAULT NULL::character varying,
	"content" text NOT NULL,
	md5 varchar(32) NULL DEFAULT NULL::character varying,
	gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	src_user text NULL,
	src_ip varchar(20) NULL DEFAULT NULL::character varying,
	app_name varchar(128) NULL DEFAULT NULL::character varying,
	tenant_id varchar(128) NULL DEFAULT ''::character varying,
	c_desc varchar(256) NULL DEFAULT NULL::character varying,
	c_use varchar(64) NULL DEFAULT NULL::character varying,
	effect varchar(64) NULL DEFAULT NULL::character varying,
	"type" varchar(64) NULL DEFAULT NULL::character varying,
	c_schema text NULL,
	encrypted_data_key text NULL,
	CONSTRAINT config_info_pkey PRIMARY KEY (id),
	CONSTRAINT uk_configinfo_datagrouptenant UNIQUE (data_id, group_id, tenant_id)
);

CREATE TABLE nacos_config.config_info_aggr (
	id serial4 NOT NULL,
	data_id varchar(255) NOT NULL,
	group_id varchar(255) NOT NULL,
	datum_id varchar(255) NOT NULL,
	"content" text NOT NULL,
	gmt_modified timestamp NOT NULL,
	app_name varchar(128) NULL DEFAULT NULL::character varying,
	tenant_id varchar(128) NULL DEFAULT ''::character varying,
	CONSTRAINT config_info_aggr_pkey PRIMARY KEY (id),
	CONSTRAINT uk_configinfoaggr_datagrouptenantdatum UNIQUE (data_id, group_id, tenant_id, datum_id)
);
CREATE TABLE nacos_config.config_info_beta (
	id serial4 NOT NULL,
	data_id varchar(255) NOT NULL,
	group_id varchar(128) NOT NULL,
	app_name varchar(128) NULL DEFAULT NULL::character varying,
	"content" text NOT NULL,
	beta_ips varchar(1024) NULL DEFAULT NULL::character varying,
	md5 varchar(32) NULL DEFAULT NULL::character varying,
	gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	src_user text NULL,
	src_ip varchar(20) NULL DEFAULT NULL::character varying,
	tenant_id varchar(128) NULL DEFAULT ''::character varying,
	encrypted_data_key text NULL,
	CONSTRAINT config_info_beta_pkey PRIMARY KEY (id),
	CONSTRAINT uk_configinfobeta_datagrouptenant UNIQUE (data_id, group_id, tenant_id)
);
CREATE TABLE nacos_config.config_info_tag (
	id serial4 NOT NULL,
	data_id varchar(255) NOT NULL,
	group_id varchar(128) NOT NULL,
	tenant_id varchar(128) NULL DEFAULT ''::character varying,
	tag_id varchar(128) NOT NULL,
	app_name varchar(128) NULL DEFAULT NULL::character varying,
	"content" text NOT NULL,
	md5 varchar(32) NULL DEFAULT NULL::character varying,
	gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	src_user text NULL,
	src_ip varchar(20) NULL DEFAULT NULL::character varying,
	CONSTRAINT config_info_tag_pkey PRIMARY KEY (id),
	CONSTRAINT uk_configinfotag_datagrouptenanttag UNIQUE (data_id, group_id, tenant_id, tag_id)
);

CREATE TABLE nacos_config.config_tags_relation (
	id int8 NOT NULL,
	tag_name varchar(128) NOT NULL,
	tag_type varchar(64) NULL DEFAULT NULL::character varying,
	data_id varchar(255) NOT NULL,
	group_id varchar(128) NOT NULL,
	tenant_id varchar(128) NULL DEFAULT ''::character varying,
	nid serial4 NOT NULL,
	CONSTRAINT config_tags_relation_pkey PRIMARY KEY (nid),
	CONSTRAINT uk_configtagrelation_configidtag UNIQUE (id, tag_name, tag_type)
);

CREATE TABLE nacos_config.group_capacity (
	id serial4 NOT NULL,
	group_id varchar(128) NOT NULL DEFAULT ''::character varying,
	quota int4 NOT NULL DEFAULT 0,
	"usage" int4 NOT NULL DEFAULT 0,
	max_size int4 NOT NULL DEFAULT 0,
	max_aggr_count int4 NOT NULL DEFAULT 0,
	max_aggr_size int4 NOT NULL DEFAULT 0,
	max_history_count int4 NOT NULL DEFAULT 0,
	gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	CONSTRAINT group_capacity_max_aggr_count_check CHECK ((max_aggr_count >= 0)),
	CONSTRAINT group_capacity_max_aggr_size_check CHECK ((max_aggr_size >= 0)),
	CONSTRAINT group_capacity_max_history_count_check CHECK ((max_history_count >= 0)),
	CONSTRAINT group_capacity_max_size_check CHECK ((max_size >= 0)),
	CONSTRAINT group_capacity_pkey PRIMARY KEY (id),
	CONSTRAINT group_capacity_quota_check CHECK ((quota >= 0)),
	CONSTRAINT group_capacity_usage_check CHECK ((usage >= 0)),
	CONSTRAINT uk_group_id UNIQUE (group_id)
);

CREATE TABLE nacos_config.his_config_info (
	id int8 NOT NULL,
	nid serial4 NOT NULL,
	data_id varchar(255) NOT NULL,
	group_id varchar(128) NOT NULL,
	app_name varchar(128) NULL DEFAULT NULL::character varying,
	"content" text NOT NULL,
	md5 varchar(32) NULL DEFAULT NULL::character varying,
	gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	src_user text NULL,
	src_ip varchar(20) NULL DEFAULT NULL::character varying,
	op_type bpchar(10) NULL DEFAULT NULL::bpchar,
	tenant_id varchar(128) NULL DEFAULT ''::character varying,
	encrypted_data_key text NULL,
	CONSTRAINT his_config_info_id_check CHECK ((id >= 0)),
	CONSTRAINT his_config_info_nid_check CHECK ((nid >= 0)),
	CONSTRAINT his_config_info_pkey PRIMARY KEY (nid)
);
CREATE TABLE nacos_config.permissions (
	"role" varchar(50) NOT NULL,
	resource varchar(255) NOT NULL,
	"action" varchar(8) NOT NULL
);
CREATE UNIQUE INDEX permissions_role_idx ON nacos_config.permissions USING btree (role, resource, action);
CREATE TABLE nacos_config.roles (
	username varchar(50) NOT NULL,
	"role" varchar(50) NOT NULL
);
CREATE TABLE nacos_config.tenant_capacity (
	id serial4 NOT NULL,
	tenant_id varchar(128) NOT NULL DEFAULT ''::character varying,
	quota int4 NOT NULL DEFAULT 0,
	"usage" int4 NOT NULL DEFAULT 0,
	max_size int4 NOT NULL DEFAULT 0,
	max_aggr_count int4 NOT NULL DEFAULT 0,
	max_aggr_size int4 NOT NULL DEFAULT 0,
	max_history_count int4 NOT NULL DEFAULT 0,
	gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
	CONSTRAINT tenant_capacity_id_check CHECK ((id >= 0)),
	CONSTRAINT tenant_capacity_max_aggr_count_check CHECK ((max_aggr_count >= 0)),
	CONSTRAINT tenant_capacity_max_aggr_size_check CHECK ((max_aggr_size >= 0)),
	CONSTRAINT tenant_capacity_max_history_count_check CHECK ((max_history_count >= 0)),
	CONSTRAINT tenant_capacity_max_size_check CHECK ((max_size >= 0)),
	CONSTRAINT tenant_capacity_pkey PRIMARY KEY (id),
	CONSTRAINT tenant_capacity_quota_check CHECK ((quota >= 0)),
	CONSTRAINT tenant_capacity_usage_check CHECK ((usage >= 0)),
	CONSTRAINT uk_tenant_id UNIQUE (tenant_id)
);
CREATE TABLE nacos_config.tenant_info (
	id serial4 NOT NULL,
	kp varchar(128) NOT NULL,
	tenant_id varchar(128) NULL DEFAULT ''::character varying,
	tenant_name varchar(128) NULL DEFAULT ''::character varying,
	tenant_desc varchar(256) NULL DEFAULT NULL::character varying,
	create_source varchar(32) NULL DEFAULT NULL::character varying,
	gmt_create int8 NOT NULL,
	gmt_modified int8 NOT NULL,
	CONSTRAINT tenant_info_pkey PRIMARY KEY (id),
	CONSTRAINT uk_tenant_info_kptenantid UNIQUE (kp, tenant_id)
);
CREATE TABLE nacos_config.users (
	username varchar(50) NOT NULL,
	"password" varchar(500) NOT NULL,
	enabled bool NOT NULL,
	CONSTRAINT users_pkey PRIMARY KEY (username)
);

三、源码打包

nacos-postgresql-and-mysql-dev目录下(在项目pom.xml同级目录),启动terminal,执行install命令(不是package命令),自动把带依赖且完整可运行的jar放到distribution\target目录下。

  • mvn -Prelease-nacos -Dmaven.test.skip=true -Dcheckstyle.skip clean install -U -Drat.skip=true

  • 注意: 由于本机存在2个maven的系统变量,优先使用非预期的mvn,导致compile出错
  • 注意:在console模块修改application.properties,且console为nacos的启动入口,但打包时不能在console路径下执行mvn install,因为不会导入依赖、且会出出现找不到主类和清单错误.

  • 注意:若将nacos-server-2.1.0.tar.gz直接放在断网的机器上,由于网络不同会出现依赖不满足问题(本机可正常运行)

  • 注意:mvn package -Dmaven.javadoc.skip=true -Dcheckstyle.skip -Dmaven.test.skip=true 只会在子模块中创建target目录,生成子模块jar包,但是不会生成整个项目(带依赖)的jar包. (注意install和package的区别)

四、离线启动nacos jar包服务

4.1 单机方式

sh bin/startup.sh -m standalone

4.2 集群方式

java -jar -Dcom.alibaba.nacos.config.log.level=error -Dcom.alibaba.nacos.naming.log.level=error -DJM.LOG.PATH=./logs -DJM.SNAPSHOT.PATH=./logs -Daddress.server.domain=localhost target/nacos-server.jar
  • 指定log目录和级别,因为源码中使用了安装idea软件的参数

  • 注意:因为该nacos默认是集群模式启动,参数项address.server.domain指明主节点位置(必须配置,不然报UnknownHostException)

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroMapper' defined in URL [jar:file:/root/wzDir/nacos/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.1.0.jar!/com/alibaba/nacos/naming/core/DistroMapper.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverMemberManager' defined in URL [jar:file:/root/wzDir/nacos/nacos-server.jar!/BOOT-INF/lib/nacos-core-2.1.0.jar!/com/alibaba/nacos/core/cluster/ServerMemberManager.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1196)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:595)
        ... 85 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverMemberManager' defined in URL [jar:file:/root/wzDir/nacos/nacos-server.jar!/BOOT-INF/lib/nacos-core-2.1.0.jar!/com/alibaba/nacos/core/cluster/ServerMemberManager.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:304)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:285)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1196)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
        ... 98 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:187)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:300)
        ... 112 common frames omitted
Caused by: com.alibaba.nacos.api.exception.NacosException: java.net.UnknownHostException: jmenv.tbsite.net
        at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.run(AddressServerMemberLookup.java:152)
        at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.doStart(AddressServerMemberLookup.java:100)
        at com.alibaba.nacos.core.cluster.AbstractMemberLookup.start(AbstractMemberLookup.java:55)
        at com.alibaba.nacos.core.cluster.ServerMemberManager.initAndStartLookup(ServerMemberManager.java:185)
        at com.alibaba.nacos.core.cluster.ServerMemberManager.init(ServerMemberManager.java:165)
        at com.alibaba.nacos.core.cluster.ServerMemberManager.<init>(ServerMemberManager.java:146)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:175)
        ... 114 common frames omitted
Caused by: java.net.UnknownHostException: jmenv.tbsite.net
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
        at sun.net.www.http.HttpClient.New(HttpClient.java:339)
        at sun.net.www.http.HttpClient.New(HttpClient.java:357)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
        at com.alibaba.nacos.common.http.client.request.JdkHttpClientRequest.execute(JdkHttpClientRequest.java:114)
        at com.alibaba.nacos.common.http.client.NacosRestTemplate.execute(NacosRestTemplate.java:482)
        at com.alibaba.nacos.common.http.client.NacosRestTemplate.get(NacosRestTemplate.java:72)
        at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.syncFromAddressUrl(AddressServerMemberLookup.java:175)
        at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.run(AddressServerMemberLookup.java:143)
        ... 124 common frames omitted
posted @ 2022-05-11 17:09  UsingStuding  阅读(1405)  评论(1)    收藏  举报