使用docker搭建nacos集群
一、配置网卡
配置docker网卡
dockernetworklsdockernetworkcreate--subnet=172.0.0.0/24docker-br0dockernetworkinspectdocker-br0
mkdir-p /server/nacos/conf
二、准备mysql数据库
1) 安装mysql
mkdir-p /server/mysql/conf mkdir-p /server/mysql/data
在/server/mysql/conf目录下新建my.cnf
my.cnf
[mysqld]#Mysql服务的唯一编号 每个mysql服务Id需唯一 server-id=1#服务端口号 默认3306 port=3306#mysql安装根目录(default /usr) #basedir=/usr/local/mysql #mysql数据文件所在位置 datadir=/var/lib/mysql #pid pid-file=/var/run/mysqld/mysqld.pid#设置socke文件所在目录 socket=/var/lib/mysql/mysql.sock#设置临时目录 #tmpdir=/tmp # 用户 user=mysql # 允许访问的IP网段 bind-address=0.0.0.0# 跳过密码登录 #skip-grant-tables #主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容 #skip-external-locking #只能用IP地址检查客户端的登录,不用主机名 #skip_name_resolve=1#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能) #transaction_isolation=READ-COMMITTED #数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节) character-set-server=utf8mb4 #数据库字符集对应一些排序等规则,注意要和character-set-server对应 collation-server=utf8mb4_general_ci #设置client连接mysql时的字符集,防止乱码 init_connect='SET NAMES utf8mb4'#是否对sql语句大小写敏感,1表示不敏感 lower_case_table_names=1#最大连接数 max_connections=400#最大错误连接数 max_connect_errors=1000#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值 explicit_defaults_for_timestamp=true#SQL数据包发送的大小,如果有BLOB对象建议修改成1G max_allowed_packet=128M #MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭 #MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效 interactive_timeout=1800wait_timeout=1800#内部内存临时表的最大值 ,设置成128M。 #比如大数据量的group by,orderby时可能用到临时表, #超过了这个值将写入磁盘,系统IO压力增大 tmp_table_size=134217728max_heap_table_size=134217728#禁用mysql的缓存查询结果集功能 #后期根据业务情况测试决定是否开启 #大部分情况下关闭下面两项 #query_cache_size =0#query_cache_type =0#数据库错误日志文件 #log-error=/var/log/mysqld.log#慢查询sql日志设置 #slow_query_log=1#slow_query_log_file=/var/log/mysqld_slow.log#检查未使用到索引的sql log_queries_not_using_indexes=1#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数 log_throttle_queries_not_using_indexes=5#作为从库时生效,从库复制中如何有慢sql也将被记录 log_slow_slave_statements=1#慢查询执行的秒数,必须达到此值可被记录 long_query_time=8#检索的行数必须达到此值才可被记为慢查询 min_examined_row_limit=100#mysql binlog日志文件保存的过期时间,过期后自动删除 #expire_logs_days=5binlog_expire_logs_seconds=604800
mysql启动容器
docker run -itd-p3306:3306 \ --name mysql \ -v /server/mysql/conf/my.cnf:/etc/my.cnf \ -v /server/mysql/data:/var/lib/mysql \ --privileged=true \ --restart=always \ -eMYSQL_ROOT_PASSWORD=123456 \ --net docker-br0 \ --ip172.0.0.4 \ -d mysql:8.0.30
2) 新建数据库nacos
3) 导入nacos-mysql.sql
/* * 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. *//******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_info *//******************************************/CREATETABLE `config_info` ( `id` bigint(20)NOTNULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255)NOTNULL COMMENT 'data_id', `group_id` varchar(255) DEFAULT NULL, `content` longtextNOTNULL COMMENT 'content', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', `app_name` varchar(128) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', `c_desc` varchar(256) DEFAULT NULL, `c_use` varchar(64) DEFAULT NULL, `effect` varchar(64) DEFAULT NULL, `type` varchar(64) DEFAULT NULL, `c_schema` text, `encrypted_data_key` textNOTNULL COMMENT '秘钥', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';/******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_info_aggr *//******************************************/CREATETABLE `config_info_aggr` ( `id` bigint(20)NOTNULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255)NOTNULL COMMENT 'data_id', `group_id` varchar(255)NOTNULL COMMENT 'group_id', `datum_id` varchar(255)NOTNULL COMMENT 'datum_id', `content` longtextNOTNULL COMMENT '内容', `gmt_modified` datetimeNOTNULL COMMENT '修改时间', `app_name` varchar(128) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';/******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_info_beta *//******************************************/CREATETABLE `config_info_beta` ( `id` bigint(20)NOTNULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255)NOTNULL COMMENT 'data_id', `group_id` varchar(128)NOTNULL COMMENT 'group_id', `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtextNOTNULL COMMENT 'content', `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', `encrypted_data_key` textNOTNULL COMMENT '秘钥', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';/******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_info_tag *//******************************************/CREATETABLE `config_info_tag` ( `id` bigint(20)NOTNULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255)NOTNULL COMMENT 'data_id', `group_id` varchar(128)NOTNULL COMMENT 'group_id', `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', `tag_id` varchar(128)NOTNULL COMMENT 'tag_id', `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtextNOTNULL COMMENT 'content', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';/******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_tags_relation *//******************************************/CREATETABLE `config_tags_relation` ( `id` bigint(20)NOTNULL COMMENT 'id', `tag_name` varchar(128)NOTNULL COMMENT 'tag_name', `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', `data_id` varchar(255)NOTNULL COMMENT 'data_id', `group_id` varchar(128)NOTNULL COMMENT 'group_id', `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', `nid` bigint(20)NOTNULL AUTO_INCREMENT, PRIMARY KEY (`nid`), UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`), KEY `idx_tenant_id` (`tenant_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';/******************************************//* 数据库全名 = nacos_config *//* 表名称 = group_capacity *//******************************************/CREATETABLE `group_capacity` ( `id` bigint(20)unsignedNOTNULL AUTO_INCREMENT COMMENT '主键ID', `group_id` varchar(128)NOTNULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', `quota` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '配额,0表示使用默认值', `usage` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '使用量', `max_size` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', `max_aggr_count` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', `max_aggr_size` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', `max_history_count` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '最大变更历史数量', `gmt_create` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_group_id` (`group_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';/******************************************//* 数据库全名 = nacos_config *//* 表名称 = his_config_info *//******************************************/CREATETABLE `his_config_info` ( `id` bigint(20)unsignedNOTNULL, `nid` bigint(20)unsignedNOTNULL AUTO_INCREMENT, `data_id` varchar(255)NOTNULL, `group_id` varchar(128)NOTNULL, `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtextNOTNULL, `md5` varchar(32) DEFAULT NULL, `gmt_create` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP, `gmt_modified` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP, `src_user` text, `src_ip` varchar(50) DEFAULT NULL, `op_type` char(10) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', `encrypted_data_key` textNOTNULL COMMENT '秘钥', PRIMARY KEY (`nid`), KEY `idx_gmt_create` (`gmt_create`), KEY `idx_gmt_modified` (`gmt_modified`), KEY `idx_did` (`data_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';/******************************************//* 数据库全名 = nacos_config *//* 表名称 = tenant_capacity *//******************************************/CREATETABLE `tenant_capacity` ( `id` bigint(20)unsignedNOTNULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128)NOTNULL DEFAULT '' COMMENT 'Tenant ID', `quota` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '配额,0表示使用默认值', `usage` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '使用量', `max_size` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', `max_aggr_count` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '聚合子配置最大个数', `max_aggr_size` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', `max_history_count` int(10)unsignedNOTNULL DEFAULT '0' COMMENT '最大变更历史数量', `gmt_create` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetimeNOTNULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_tenant_id` (`tenant_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';CREATETABLE `tenant_info` ( `id` bigint(20)NOTNULL AUTO_INCREMENT COMMENT 'id', `kp` varchar(128)NOTNULL COMMENT 'kp', `tenant_id` varchar(128) default '' COMMENT 'tenant_id', `tenant_name` varchar(128) default '' COMMENT 'tenant_name', `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', `gmt_create` bigint(20)NOTNULL COMMENT '创建时间', `gmt_modified` bigint(20)NOTNULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`), KEY `idx_tenant_id` (`tenant_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';CREATETABLE `users` ( `username` varchar(50)NOTNULL PRIMARY KEY, `password` varchar(500)NOTNULL, `enabled` booleanNOTNULL);CREATETABLE `roles` ( `username` varchar(50)NOTNULL, `role` varchar(50)NOTNULL, UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE );CREATETABLE `permissions` ( `role` varchar(50)NOTNULL, `resource` varchar(255)NOTNULL, `action` varchar(8)NOTNULL, UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE );INSERTINTO users (username, password, enabled)VALUES('nacos','$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu',TRUE);INSERTINTO roles (username, role)VALUES('nacos','ROLE_ADMIN');
三 、拉取镜像
docker pull nacos/nacos-server
四、配置
新增配置文件:
重点关注以下配置:
spring.datasource.platform=mysql
db.url.0=
db.user=root
db.password=123456
application.properties
#springserver.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos} server.contextPath=/nacosserver.port=${NACOS_APPLICATION_PORT:8848} server.tomcat.accesslog.max-days=30server.tomcat.accesslog.pattern=%h%l%u%t"%r"%s%b%D%{User-Agent}i%{Request-Source}ispring.datasource.platform=mysqlnacos.cmdb.dumpTaskInterval=3600nacos.cmdb.eventTaskInterval=10nacos.cmdb.labelTaskInterval=300nacos.cmdb.loadDataAtStart=falsedb.num=${MYSQL_DATABASE_NUM:1} db.url.0=jdbc:mysql://172.0.0.4:3306/nacos?allowPublicKeyRetrieval=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC#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}db.user=rootdb.password=123456###Theauthsystemtouse, currentlyonly'nacos'and'ldap'issupported: nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos} ###workedwhennacos.core.auth.system.type=nacos###Thetokenexpirationinseconds: nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000} ###Thedefaulttoken: nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789} ###Turnon/offcachingofauthinformation. Byturningonthisswitch, theupdateofauthinformationwouldhavea15secondsdelay. nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false} nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false} nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity} nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security} server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false} #defaultcurrentworkdirserver.tomcat.basedir=file:. ##springsecurityconfig###turnoffsecuritynacos.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/**}# metrics for elastic searchmanagement.metrics.export.elastic.enabled=falsemanagement.metrics.export.influx.enabled=falsenacos.naming.distro.taskDispatchThreadCount=10nacos.naming.distro.taskDispatchPeriod=200nacos.naming.distro.batchSyncKeyCount=1000nacos.naming.distro.initDataRatio=0.9nacos.naming.distro.syncRetryDelay=5000nacos.naming.data.warmup=true
五、启动
docker run -it-d \ -v /server/nacos/conf/application.properties:/home/nacos/conf/application.properties \ -ePREFER_HOST_MODE=ip \ -eMODE=cluster \ -p10001:8848 \ -eNACOS_SERVERS="172.0.0.82:8848 172.0.0.83:8848" \ --privileged=true \ --name nacos01 \ --net docker-br0 \ --ip172.0.0.81 \ --restart=always \ nacos/nacos-server docker run -it-d \ -v /server/nacos/conf/application.properties:/home/nacos/conf/application.properties \ -ePREFER_HOST_MODE=ip \ -eMODE=cluster \ -p10002:8848 \ -eNACOS_SERVERS="172.0.0.81:8848 172.0.0.83:8848" \ --privileged=true \ --network=host \ --name nacos02 \ --net docker-br0 \ --ip172.0.0.82 \ --restart=always \ nacos/nacos-server docker run -it-d \ -v /server/nacos/conf/application.properties:/home/nacos/conf/application.properties \ -ePREFER_HOST_MODE=ip \ -eMODE=cluster \ -p10003:8848 \ -eNACOS_SERVERS="172.0.0.81:8848 172.0.0.82:8848" \ --privileged=true \ --network=host \ --name nacos03 \ --net docker-br0 \ --ip172.0.0.83 \ --restart=always \ nacos/nacos-server
六、测试
在nacos中新建test.yml
在服务器输入命令:
curl-XGET"http://127.0.0.1:10001/nacos/v1/cs/configs?dataId=test.yml&group=DEFAULT_GROUP"
得到结果:
证明部署成功
七、设置代理
1) 新建文件夹
mkdir-p /server/nginx/conf.d mkdir-p /server/nginx/html mkdir-p /server/nginx/log
2) 新建配置文件
cd /server/nginx/conf.d vim defalut.conf
defalut.conf
upstream tomcatList { server 172.0.0.82:8848 weight=1; server 172.0.0.83:8848 weight=2; } upstream nacosList { server 172.0.0.81:8848; server 172.0.0.82:8848; server 172.0.0.83:8848; } server { listen 8848; server_name localhost; location / { root /etc/nginx/html/; index index.html index.htm; } error_page 500502503504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location /nacos { proxy_pass http://nacosList/nacos; } location ~^/api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://tomcatList; proxy_redirect default; } }
3) 启动nginx,nacos网络保持同一网段
docker run -itd \ --name nginx \ -v /server/nginx/conf.d:/etc/nginx/conf.d \ -v /server/nginx/html:/etc/nginx/html \ -v /server/nginx/log:/usr/log/nginx \ -p8848:8848 \ --net docker-br0 \ --ip172.0.0.6 \ --privileged=true \ nginx
访问 http://ip:8848/nacos
在服务器输入命令:
curl-XGET"http://192.168.79.131:8848/nacos/v1/cs/configs?dataId=test.yml&group=DEFAULT_GROUP"
得到结果:
说明反向代理成功!:)