我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章
Error: 400 Bad Request
# 安装 Mysql
# docker-compose安装Mysql
-
首先创建个目录用来存放docker-compse文件
[root@node1 ~]# mkdir /usr/docker/env -p [root@node1 ~]# cd /usr/docker/env/ -
编写docker-compose
[root@node1 ~]# mkdir /usr/docker/env/mysql -p [root@node1 ~]# cd /usr/docker/env/mysql [root@node1 ~]# vim docker-compose.yml -
yaml文件
version : '3' services: mysql57: # 容器名(以后的控制都通过这个) container_name: mysql57 # 重启策略 restart: always image: mysql:5.7 ports: - "3306:3306" volumes: # 挂挂载配置文件 # - ./db/:/docker-entrypoint-initdb.d # 挂挂载配置文件 - ./conf:/etc/mysql/conf.d # 挂载日志 - ./logs:/logs # 挂载数据 - ./data:/var/lib/mysql command: [ 'mysqld', '--innodb-buffer-pool-size=80M', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-time-zone=+8:00', '--lower-case-table-names=1' ] environment: # root 密码 MYSQL_ROOT_PASSWORD: 123456 -
启动
docker-compose up -d mysql57
# 安装 mysql 5.7 版本
-
拉取镜像
$ docker pull mysql:5.7 -
新建需要
挂载文件夹$ mkdir -p ~/docker-data/mysql/data $ mkdir -p ~/docker-data/mysql/conf.d chmod 777 -R ~/docker-data/mysql -
在
conf.d目录创建my.cnf$ vi ~/docker-data/mysql/conf.d/my.cnf [mysqld] # skip-grant-tables作为启动参数的作用: MYSQL服务器不加载权限判断,任何用户都能访问数据库。 skip-grant-tables # 设置北京时区 default-time_zone = '+8:00' -
运行并挂载在本机
$ docker run --name mysql5.7 -p 3306:3306 \ --restart=always --privileged=true \ -v ~/docker-data/mysql/data:/var/lib/mysql \ -v ~/docker-data/mysql/conf.d:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 # -v: 主机和容器的目录映射关系,":"前为主机目录,之后为容器目录 # --restart=always: 当Docker 重启时,容器会自动启动。 # --privileged=true: 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限 -
修改密码为空
$ docker exec -it mysql5.7 bash $ mysql -uroot -p # 不用输密码直接回车,进入mysql命令 mysql> use mysql mysql> select user,authentication_string,host from user; # 查看账号、密码、可连接的host #修改密码 mysql> update user set authentication_string='123456' where user='root'; #修改密码 mysql> flush privileges; #刷新权限> mysql> select user,authentication_string,host from user; # 查看账号、密码、可连接的host > root需要有两个host -- localhost、% 并且密码不为空,没有 % 的话无法外网访问 > mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456'; # 没有的话进行新建 CREATE USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -
注释掉
my.cnf中,文件中的skip-grant-tables,重启mysql服务$ docker ps $ docker stop CONTAINER ID $ docker start CONTAINER ID -
修改root密码
mysql> use mysql mysql> alter user 'root'@'localhost' IDENTIFIED BY '123456'; mysql> alter user 'root'@'%' IDENTIFIED BY '123456'; mysql> flush privileges;
# 安装 mysql 8 版本
步骤与mysql 5.7的流程相似
-
拉取镜像
$ docker pull mysql:8 -
新建需要
挂载文件夹$ mkdir -p ~/docker-data/mysql8/data ~/docker-data/mysql8/conf.d chmod 777 ~/docker-data/mysql8/data chmod 777 ~/docker-data/mysql8/conf.d -
在
conf.d目录创建my.cnf$ vi ~/docker-data/mysql8/conf.d/my.cnf [mysqld] port = 3306 # 设置mysql的安装目录 #basedir=C:/dev/mysql-5.7.38 # 设置mysql数据库的数据的存放目录(自动生成,不然可能报错) #datadir=C:/dev/mysql-5.7.38/data # 允许最大连接数 max_connections=10000 # 允许最大连接人数 #max_user_connections=1000 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 连接时间 wait_timeout=31536000 interactive_timeout=31536000 log_bin_trust_function_creators=1 transaction_isolation=READ-COMMITTED sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" # 不区分大小写 lower_case_table_names=1 group_concat_max_len=102400 innodb_buffer_pool_size=500M [client] user=root port = 3306 # 设置mysql客户端默认字符集 default-character-set=utf8mb4 -
运行并挂载在本机
docker run --name mysql8 -p 3306:3306 \ --restart=always --privileged=true \ -v ~/docker-data/mysql8/data:/var/lib/mysql \ -v ~/docker-data/mysql8/conf.d:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8 -
修改密码为空
$ docker exec -it mysql8 bash $ mysql -uroot -p # 输入MYSQL_ROOT_PASSWORD密码直接回车,进入mysql命令 mysql> use mysql mysql> select user,authentication_string,host from user; # 查看账号、密码、可连接的host mysql> update user set authentication_string='' where user='root'; #修改密码 mysql> flush privileges; #刷新权限 -
注释掉
my.cnf中,文件中的skip-grant-tables,重启mysql服务$ docker ps $ docker stop mysql8 $ docker start mysql8> MYSQL 8.0内新增加`mysql_native_password`函数,通过更改这个函数密码来进行`远程连接`。 > mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; > 没有 `root - %` 添加即可。 > mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456'; -
修改root密码
mysql> use mysql mysql> alter user 'root'@'localhost' IDENTIFIED BY '123456'; mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; mysql> flush privileges;
# 连接到mysql
-
进入docker本地连接mysql客户端
[sun@fulsun ~]$ docker exec -it mysql bash root@3363dbdeeb55:/# mysql -uroot -p12345 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> -
安装Navicat远程连接mysql
-
使用远程连接软件时,容器的3306端口和主机的3306端口映射到一起,所以我们应该访问:
host: 127.0.0.1 port: 3306 user: root password: 123456
-
如果你的容器运行正常,但是无法访问到MySQL,一般有以下几个可能的原因:
-
Linux下可能是防火墙阻拦
# 开放端口: $ systemctl status firewalld $ firewall-cmd --zone=public --add-port=3306/tcp -permanent $ firewall-cmd --reload # 临时关闭防火墙: $ sudo systemctl stop firewalld # 关闭防火墙开机启动: $ sudo systemctl disable firewalld -
需要进入docker本地客户端设置远程访问账号
$ sudo docker exec -it mysql bash $ mysql -uroot -p123456 mysql> grant all privileges on *.* to root@'%' identified by "password";原理:
# mysql使用mysql数据库中的user表来管理权限,修改user表就可以修改权限(只有root账号可以修改) mysql> use mysql; Database changed mysql> select host,user,authentication_string from user; +-----------+---------------+-------------------------------------------+ | host | user | authentication_string | +-----------+---------------+-------------------------------------------+ | localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | % | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-----------+---------------+-------------------------------------------+ 4 rows in set (0.00 sec) # *.* 赋予全局层级权限 mysql> grant all privileges on *.* to root@'%' identified by "password"; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
-
# MySQL57
# 简单使用
# 运行MySQL容器:
docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=<your_password> -d mysql:5.7.42-debian
# 连接到 MySQL 容器:
docker exec -it mysql57 mysql -uroot -p
# 挂载目录使用
如果删除容器,则容器中的所有数据都会丢失。可以通过挂载宿主机的目录来指定数据位置,并自定义 MySQL 配置。
mkdir -p /opt/mysql/conf/
mkdir -p /opt/mysql/data
# 参考my.cnf 配置
vim /opt/mysql/conf/my.cnf
# 运行mysql
docker run --name mysql57 --restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf/:/etc/mysql/mysql.conf.d/ \
-p 3306:3306 --restart=always \
-d mysql:5.7
# 开机启动
docker update --restart=always mysql57
# my.cnf
MySQL 配置文件在/etc/mysql/mysql.conf.d/mysqld.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set=utf8
[mysql]
no-auto-rehash
default-character-set = utf8
prompt = MySQL <\u> [\d] >
[mysqld]
character-set-server = utf8
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
tmpdir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
skip-name-resolve
# 主服务器唯一ID
server-id=1
max_connections = 3000
max_connect_errors = 6000
# 设置在网络传输中一次消息传输量的最大值 系统默认值 为1MB,最大值是1GB
max_allowed_packet = 32M
sort_buffer_size = 2M
join_buffer_size = 2M
# 服务器线程缓存
thread_cache_size = 300
# 高并发,写入量大的系统,建议把该功能禁掉
# query_cache_size = 64M
transaction_isolation = READ-COMMITTED
# tmp_table_size = 256M
innodb_buffer_pool_size = 2048M
innodb_flush_log_at_trx_commit = 2
#否允许创建未签名的二进制日志函数
log_bin_trust_function_creators=1
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
lower_case_table_names=1
group_concat_max_len=102400
# RocketMQ
# 安装rocketmq
-
下载镜像
docker pull rocketmqinc/rocketmq:4.4.0 -
安装NameServer
mkdir /opt/rocketmq docker run -d --name rmqnamesrv -p 9876:9876 \ -v /opt/rocketmq/data/namesrv/logs:/root/logs \ -v /opt/rocketmq/data/namesrv/store:/root/store \ -e "MAX_POSSIBLE_HEAP=100000000" \ -e "MAX_HEAP_SIZE=256M" \ -e "HEAP_NEWSIZE=128M" \ rocketmqinc/rocketmq:4.4.0 sh mqnamesrv -
安装broker
1,在绝对路径/opt/rocketmq/conf 新建 broker.conf文件 mkdir -p /opt/rocketmq/conf/ 2,新建 touch broker.conf文件 vim /opt/rocketmq/conf/broker.conf 3,复制下面内容到文件中 broker.conf# 所属集群名称,如果节点较多可以配置多个 brokerClusterName = DefaultCluster brokerName = broker-a #0 表示 Master,>0 表示 Slave brokerId = 0 #Broker 对外服务的监听端口 可以在命令时指定端口这里可以去掉 #listenPort=10911 #删除文件时间点,默认凌晨 4点 deleteWhen = 04 fileReservedTime = 48 #异步复制Master brokerRole = ASYNC_MASTER #异步刷盘 flushDiskType = ASYNC_FLUSH #broker监听的ip nameServer地址。宿主机ip brokerIP1 = 172.20.96.1 # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full diskMaxUsedSpaceRatio=95 -
启动broker
docker run -d \ -p 10911:10911 -p 10909:10909 \ -v /opt/rocketmq/data/broker/logs:/root/logs \ -v /opt/rocketmq/rocketmq/data/broker/store:/root/store \ -v /opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \ --name rmqbroker \ --link rmqnamesrv:namesrv \ -e "NAMESRV_ADDR=namesrv:9876" \ -e "MAX_POSSIBLE_HEAP=200000000" \ -e "JAVA_OPT=${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m" \ rocketmqinc/rocketmq:4.4.0 \ sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
# 安装控制台-admin
-
拉取镜像
docker pull styletang/rocketmq-console-ng -
启动rocketmq 控制台
docker run -d --name rmq-dashboard --link rmqnamesrv:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.20.96.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 19876:8080 -t styletang/rocketmq-console-ng
# RabbitMQ
-
使用官方
# 查找镜像 docker search rabbitmq # 安装镜像 docker pull rabbitmq # 运行rabbitmq 创建镜像 docker run --name rabbitmq \ -d --hostname localhost \ -p 15672:15672 \ -p 5672:5672 \ rabbitmq:latest -
拉取镜像:
docker pull rabbitmq:management -
启动rabbitMQ
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management -
复杂版(设置账户密码,hostname)
docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmqhostone rabbitmq:management
# Redis
-
6.0
sudo mkdir -p /mydata/redis/{conf,data} wget http://download.redis.io/redis-stable/redis.conf -O /mydata/redis/conf/redis.conf[root@node1 ~]# docker run -p 6379:6379 --name redis6 -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis:6.0.8 redis-server /etc/redis/redis.conf 注:可以使用以下命令查看正在运行的容器: [root@node1 ~]# docker exec -it redis6 /bin/bash root@8765a0c3657c:/data# redis-cli 127.0.0.1:6379> ping PONG
# 部署Redis集群
# 创建网卡
docker network create redis --subnet 172.38.0.0/16
# 通过脚本创建六个redis配置
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >> /mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
# 通过脚本运行六个redis
for port in $(seq 1 6); do \
docker run -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} \
redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done
# 访问 redis
docker exec -it redis-1 /bin/sh #redis默认没有bash
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
# 使用集群模式登录进行操作
/data # redis-cli -c
127.0.0.1:6379> set name "good"
-> Redirected to slot [5798] located at 172.38.0.12:6379
OK
# Nginx
-
Docker安装
mkdir -p ~/docker-data/nginx/web mkdir -p ~/docker-data/nginx/conf mkdir -p ~/docker-data/nginx/logs # 启动一个容器 docker run -itd --name nginx -p 80:80 nginx # 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD 当前全路径) docker cp nginx:/etc/nginx ~/docker-data/nginx/conf # docker rm -f nginx docker run -itd --name nginx -p 4000:80 \ -v /home/sun/docker-data/nginx/web:/var/www/html \ -v /home/sun/docker-data/nginx/conf/nginx:/etc/nginx \ -v /home/sun/docker-data/nginx/logs:/var/log/nginx nginx -
示例配置文件内容如下
server{ #监听的端口号 listen 80; #要监听的服务器地址,域名也可行,根据实际情况修改 server_name 154.111.111.111; client_max_body_size 20m; access_log /var/log/nginx/host.access.log main; #开启gzip功能(这段可选,如果web界面资源有压缩格式文件可开启) gzip on; #开启gzip静态压缩功能 gzip_static on; #gzip缓存大小 gzip_buffers 4 16k; #gzip http版本 gzip_http_version 1.1; #gzip 压缩级别 1-10 r gzip_comp_level 5; #gzip 压缩类型 gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持 gzip_disable "MSIE [1-6]\."; #前端,根据实际情况修改 location / { # 项目地址,这里指的是nginx容器的地址 root /var/www/html/luckysj; try_files $uri $uri/ /index.html?s=$uri&$args; # 默认访问的资源 index index.html index.htm index.php; } # 错误网页配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } -
重启nginx容器,使配置生效
# 测试nginx配置 docker exec 容器id nginx -t # 重新加载nginx配置 docker exec 容器id nginx -s reload # 重启 docker restart nginx
# 安装 redis
-
拉取官方的redis镜像指定版本
$ docker pull redis:5.0.5 -
新建文件夹用于
redis外部挂载$ mkdir -p /docker-data/redis/data /docker-data/redis/conf -
修改启动默认配置,官方 redis.conf 配置文件
注意需要修改四个地方:sudo wget -P /docker-data/redis/conf http://download.redis.io/redis-stable/redis.conf # vim /docker-data/redis/conf/redis.conf bind 127.0.0.1 #注释掉这部分,用来限制redis只能本地访问 protected-mode no #默认yes表示开启保护模式,用来限制redis只能本地访问 appendonly yes #持久化 requirepass password #密码 -
启动redis
$ docker run --name redis -d -p 6379:6379 \ --restart=always --privileged=true \ -v /docker-data/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /docker-data/redis/data:/data \ redis redis-server /etc/redis/redis.conf -
查看redis是否正常启动,如果没有问题就可以使用
远程连接redis$ docker ps $ docker exec -it redis redis-cli # auth passoword # select index
# 安装Minio
- 单机部署
$ mkdir -p ~/docker-data/minio/data /docker-data/minio/conf $ docker run -p 9000:9000 --name minio -v /docker-data/minio/data:/data -v /docker-data/minio/conf:/root/.minio minio/minio server /data - 存在问题: 浏览器无法访问minio控制台,因为没有对外暴露控制台端口,对外暴露minio控制台的端口,通过--console-address ":5000"指定控制台端口为静态端口:
docker run -p 9000:9000 -p 50000:50000 --name minio -v /docker-data/minio/data:/data -v /docker-data/minio/conf:/root/.minio minio/minio server --console-address ":50000" /data - Minio自定义用户名密码:
docker run -d -p 9000:9000 -p 50000:50000 --name minio \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=12345678" \ -v /docker-data/minio/data:/data \ -v /docker-data/minio/conf:/root/.minio \ minio/minio server --console-address ":50000" /data
# RabbitMQ
-
拉取镜像:
docker pull rabbitmq:management -
启动rabbitMQ
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management -
复杂版(设置账户密码,hostname)
docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmqhostone rabbitmq:management
# Consul
$ mkdir -p ~/docker-data/consul/data
# 单机部署
在本地开发环境或者规模不大的分布式系统中,我们可以使用单机部署方式,命令如下:
docker run -id --name=consul \
-p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 \
-v ~/docker-data/consul/data:/consul/data \
consul agent -server -ui -node=n1 -bootstrap-expect=1 -client=0.0.0.0 -advertise=服务器外网地址
# 可见上述除了挂载数据卷之外,我们还暴露了几个端口,它们的作用如下:
8300 TCP协议,用于Consul集群中各个节点相互连结通信的端口
8301 TCP或者UDP协议,用于Consul节点之间相互使用Gossip协议健康检查等交互
8302 TCP或者UDP协议,用于单个或多个数据中心之间的服务器节点的信息同步
8500 HTTP协议,用于API接口或者我们上述的网页管理界面访问
8600 TCP或者UDP协议,作为DNS服务器,用于通过节点名查询节点信息
所以如果是在服务器上面部署,记得配置好防火墙放行上述端口。在Spring Cloud模块集成Consul服务发现时,需要配置8500端口。
agent 表示启动一个Agent进程
-server 表示该节点类型为Server节点(下面会讲解集群中的节点类型)
-ui 开启网页可视化管理界面
-node 指定该节点名称,注意每个节点的名称必须唯一不能重复!上面指定了第一台服务器节点的名称为n1,那么别的节点就得用其它名称
-bootstrap-expect 最少集群的Server节点数量,少于这个值则集群失效,这个选项必须指定,由于这里是单机部署,因此设定为1即可
-advertise 这里要指定本节点外网地址,用于在集群时告诉其它节点自己的地址,如果是在自己电脑上或者是内网搭建单节点/集群则不需要带上这个参数
-client 指定可以外部连接的地址,0.0.0.0表示外网全部可以连接
除此之外,还可以加上-datacenter参数自定义一个数据中心名,同一个数据中心的节点数据中心名应当指定为一样!
# 集群部署
在学习集群部署之前,我们首先需要来了解一下在Consul集群中,节点分为下面几类:
Server节点:这是Consul集群的核心组成部分,用于维护集群的状态、处理查询请求、执行一致性协议以及提供服务发现和健康检查等功能Client节点:用于向集群提交查询请求,并将请求转发给Server节点处理,作为服务发现和健康检查的代理,这类节点有着负载均衡、健康检查和故障转移等作用,降低Server节点的压力,搭建集群时,Client节点不是必须的
上述还提到了Agent进程这个概念,事实上Agent就可以理解为Consul运行进程,我们将其理解为一个运行中的Consul节点即可。
好的,现在我们来学习如何搭建集群,这里将提供两个示例。
# ① 全部为Server节点的集群
假设现在我要在三台服务器上面部署Consul容器,使它们构成一个集群,集群信息如下:
| 节点名 | 服务器外网地址 | 节点类型 |
|---|---|---|
agent-1 |
139.56.23.31 |
Server |
agent-2 |
8.34.52.11 |
Server |
agent-3 |
123.20.15.63 |
Server |
通过下列命令分别在三台服务器上面创建并运行容器:
# 服务器1:139.56.23.31
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-1 -bootstrap-expect=2 -client=0.0.0.0 -advertise=139.56.23.31
# 服务器2:8.34.52.11
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-2 -bootstrap-expect=2 -client=0.0.0.0 -advertise=8.34.52.11
# 服务器3:123.20.15.63
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-3 -bootstrap-expect=2 -client=0.0.0.0 -advertise=123.20.15.63
然后分别在第二台和第三台服务器上面执行下列命令:
# 服务器2和服务器3上面都执行
docker exec -it consul consul join 139.56.23.31
这个命令的作用是使上述服务器2和服务器3的节点连结到服务器1使它们构成一整个集群,上述join参数后面是要连结的节点的外网地址。
# ② Server和Client节点混合集群
同样地,假设我要在三台服务器上面部署Consul容器使它们构成一个集群,集群信息如下:
| 节点名 | 服务器外网地址 | 节点类型 |
|---|---|---|
agent-1 |
139.56.23.31 |
Client |
agent-2 |
8.34.52.11 |
Server |
agent-3 |
123.20.15.63 |
Server |
通过下列命令分别在三台服务器上面创建并运行容器:
# 服务器1:139.56.23.31 (Client)
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -ui -node=agent-1 -client=0.0.0.0 -advertise=139.56.23.31
# 服务器2:8.34.52.11 (Server)
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-2 -bootstrap-expect=2 -client=0.0.0.0 -advertise=8.34.52.11
# 服务器3:123.20.15.63 (Server)
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-3 -bootstrap-expect=2 -client=0.0.0.0 -advertise=123.20.15.63
然后分别在第二台和第三台服务器上面执行下列命令进行连结:
# 服务器2和服务器3上面都执行
docker exec -it consul consul join 139.56.23.31
可见上述服务器1的Consul是以Client模式运行的,其命令和启动Server模式差不多,只不过是少了-server和-bootstrap-expect选项而已。
# 数据清除
如果Consul运行时出现任何问题或者无法启动,可以先停止容器,然后清除所有的数据,上述我们已经把容器中数据目录映射到数据卷了,我们删除数据卷中所有内容即可:
rm -rf /var/lib/docker/volumes/consul-data/_data/*
然后重启容器即可!注意这样也会清空集群信息,需要大家重新执行连结命令,将所有节点重新连结为集群。
# Dokcer安装ELK
# 准备
首先安装 Docker 与 Docker-Compose 相关的组件,我们这里直接使用准备好的 ELK 镜像,执行以下命令从 Dockerhub 上拉取指定版本的镜像,在本例当中我使用的是 7.40 版本。
docker pull sebp/elk:740
# 配置
为其编写 docker-compose.yaml 文件,内容如下:
Copyversion: "3.7"
services:
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
- 443:443
networks:
- internal-network
volumes:
- /root/Volumes/Nginx/nginx.conf:/etc/nginx/nginx.conf
- /root/Volumes/Nginx/Configs:/etc/nginx/conf.d
restart: always
elk:
image: sebp/elk:740
container_name: elk
ports:
- 9200:9200
- 5044:5044
- 5601:5601
expose:
- 5601
networks:
- internal-network
volumes:
- /opt/elk-data:/var/lib/elasticsearch
- /etc/localtime:/etc/localtime
depends_on:
- nginx
ulimits:
nproc: 262144
nofile:
soft: 262144
hard: 262144
memlock: 9223372036854775807
restart: always
networks:
internal-network:
external: true
上面的 Yaml 文件内容大概意思就是开放 ELK 的 9200 与 5400 端口,然后使用 Nginx 代理 Kibana Dashboard,并且将相关的数据卷挂载了出来。
这里需要注意的是,我配置了 ulimits 节,这是因为 ELK 在启动的时候会检测相关内核参数,除了在 Yaml 编写还不够,还得变更宿主机的相关参数。关于这些参数的内容变更,请参考以下内容:
变更 /etc/security/limits.conf 文件,为其追加以下内容:
* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800
* soft memlock unlimited
* hard memlock unlimited
跳转到 /etc/security/limits.d 目录下,修改相应的 conf 文件,为其追加以下内容:
* soft nproc unlimited
* hard nproc unlimited
最后重启服务器,以上内容都是基于 CentOS 7.x 进行编写。
# 运行
安装好 docker-compose 工具以后,直接在 Yaml 文件的根目录运行 docker-compose up -d 即可。如果正常的话,访问对应的机器即可。
# 遇到的问题
# Network internal-network declared as external
fl@fulsundeMacBook-Pro:~/Desktop$ docker-compose up
ERROR: Network internal-network declared as external, but could not be found. Please create the network manually using `docker network create internal-network` and try again.
fl@fulsundeMacBook-Pro:~/Desktop$ docker network ls
NETWORK ID NAME DRIVER SCOPE
babdd8df43cc bridge bridge local
991c54d95e61 host host local
c8e3bf25bb02 none null local
解决
docker network create internal-network
fl@fulsundeMacBook-Pro:~/Desktop$ docker network create internal-network
a12e1441969e7fd1bb619fb1aaa3be3fdfb656dff99df6da8fd840d363b6074f
fl@fulsundeMacBook-Pro:~/Desktop$ docker network ls
NETWORK ID NAME DRIVER SCOPE
babdd8df43cc bridge bridge local
991c54d95e61 host host local
a12e1441969e internal-network bridge local
c8e3bf25bb02 none null local
# 挂载的时候出错
-
Nginx
-
问题如下
ERROR: for nginx Cannot start service nginx: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/Volumes/data/docker/images/Nginx/nginx.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/4330aaae9c62f8a8796bc1ea5df0d56b8e95e8a9137b5aa784e0ddcb4029d0ee/merged\\\" at \\\"/var/lib/docker/overlay2/4330aaae9c62f8a8796bc1ea5df0d56b8e95e8a9137b5aa784e0ddcb4029d0ee/merged/etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type -
解决
fl@fulsundeMacBook-Pro:~/Desktop$ docker rm $(docker ps -a -q) -f fl@fulsundeMacBook-Pro:~/Desktop$ docker run -d -p 80:80 --name nginx nginx bcd59b19f418087a465aeb77b2bffcd8a6e30a25fe852f7f4d286614ca525073 fl@fulsundeMacBook-Pro:~/Desktop$ docker exec -it nginx /bin/bash root@bcd59b19f418:/# exit exit fl@fulsundeMacBook-Pro:~/Desktop$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bcd59b19f418 nginx "nginx -g 'daemon of…" 33 seconds ago Up 32 seconds 0.0.0.0:80->80/tcp nginx fl@fulsundeMacBook-Pro:~/Desktop$ docker cp bcd59b19f418:/etc/nginx/nginx.conf /Volumes/data/docker/images/Nginx/nginx.conf
-
-
ELK
-
问题如下
fl@fulsundeMacBook-Pro:~/Desktop$ docker-compose up Creating nginx ... done Creating elk ... error ERROR: for elk Cannot start service elk: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/Volumes/data/docker/images/elk/localtime\\\" to rootfs \\\"/var/lib/docker/overlay2/94630dea70be2522ffd5d0ee80ba550f7f86df9bf141378558697b3405b5416e/merged\\\" at \\\"/var/lib/docker/overlay2/94630dea70be2522ffd5d0ee80ba550f7f86df9bf141378558697b3405b5416e/merged/usr/share/zoneinfo/UCT\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type -
解决
fl@fulsundeMacBook-Pro:~$ cp /etc/localtime /Volumes/data/docker/images/elk/
-
# 安装Nacos
# 下载镜像
# 查找镜像
docker search nacos # nacos/nacos-server
# 下载镜像 https://hub.docker.com/ docker 官方搜索查看有哪些 nacos 镜像版本
docker pull nacos/nacos-server:v2.0.3
# 查看已下载镜像
docker images
# 数据库配置
数据库文件下载github:nacos/nacos-db.sql
# 建库
create database nacos;
use nacos;
-- 执行或者导入 nacos-db.sql,不知道为什么这个文件里的注释还写了 【数据库全名 = nacos_config】
-- 可以直接复制粘贴到 navicat 或 sqlyog 上执行,200多行不是很长
# 创建 nacos 单独使用的一个用户,也可以直接把 root 用户给他
create user 'nacos'@'%' IDENTIFIED BY 'nacos';
-- 库nacos的所有表的执行存储过程、CRUD权限
grant execute, insert, select, update on nacos.* to 'nacos'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看权限
show grants for nacos;
# 创建相关目录
# 创建 nacos 日志存放目录
mkdir -p /home/docker/nacos/logs
# 创建 nacos 配置文件目录
mkdir -p /home/docker/nacos/init.d
配置文件
vim /home/docker/nacos/init.d/custom.properties
其实下面的配置应该可以下载一个nacos安装包, 然后它也自带配置文件, 应该是可以参考他的。我这里写的配置就是若使用安装包进行安装时需要修改的配置,也就是我理解的其他配置就是默认的,我们这里的配置可以覆盖那些配置
数据库的url自行处理,比如ip端口、库名等
# spring
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
# nacos.cmdb.dumpTaskInterval=3600
# nacos.cmdb.eventTaskInterval=10
# nacos.cmdb.labelTaskInterval=300
# nacos.cmdb.loadDataAtStart=false
# metrics for prometheus
#management.endpoints.web.exposure.include=*
# metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for influx
management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
# default current work dir
server.tomcat.basedir=
### spring security config
#### turn off security
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
# nacos.naming.distro.taskDispatchPeriod=200
# nacos.naming.distro.batchSyncKeyCount=1000
# nacos.naming.distro.syncRetryDelay=5000
# nacos.naming.data.warmup=true
# nacos.naming.expireInstance=true
nacos.istio.mcp.server.enabled=false
# 创建容器并启动
docker run \
--name nacos \
-d \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9848 \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-v /home/docker/nacos/logs:/home/nacos/logs \
-v /home/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server:v2.0.3
# 查看启动日志
docker logs nacos
访问 ip:8848/nacos 用户名和密码默认都是 nacos
# DockerCompose方式
#下载git
yum -y install git
# 下载nacos-docker版本
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
# nacos数据选择存放mysql中,编辑对应的环境变量 nacos-docker/env/nacos-standlone-mysql.env
# 编辑该文件,主要是改mysql的地址,更改连接的超时时间,设置JVM的堆大小。
vim env/nacos-standlone-mysql.env
version: "3"
services:
mysql:
container_name: mysql
# 5.7
image: mysql:5.7
environment:
# mysql root用户密码
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
# 初始化数据库(后续的初始化sql会在这个库执行)
MYSQL_DATABASE: nacos_config
# 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
MYSQL_USER: nacos
MYSQL_PASSWORD: nacos
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M;
volumes:
# mysql的数据文件
- /software/mysql/data:/var/lib/mysql
# mysql配置文件
- /software/mysql/conf:/etc/mysql/conf.d
ports:
- "8081:3306"
nacos3:
hostname: nacos3
image: nacos/nacos-server:latest
container_name: nacos3
volumes:
#- ./nacos/plugins/mysql/:/home/nacos/plugins/mysql/
- /software/nacos/logs/:/home/nacos/logs
- /software/nacos/application.properties:/home/nacos/init.d/application.properties
environment: # 设置环境变量,相当于docker run命令中的-e
- JVM_XMS=512m
- JVM_XMX=512m
- JVM_XMN=128m
- MODE=standalone #单机模式
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=47.119.205.45
- MYSQL_SERVICE_PORT=8081
- MYSQL_SERVICE_USER=nacos
- MYSQL_SERVICE_PASSWORD=nacos
- MYSQL_SERVICE_DB_NAME=nacos_config
ports:
- "8848:8848"
#- "7848:7848"
- "9848:9848"
- "9849:9849"
#env_file:
# - /software/nacos/nacos-hostname.env
restart: always
depends_on:
- mysql
# 数据库文件
/*
* 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 */
/******************************************/
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) DEFAULT NULL,
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(20) 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` text NOT NULL 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 */
/******************************************/
CREATE TABLE `config_info_aggr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
`content` longtext NOT NULL COMMENT '内容',
`gmt_modified` datetime NOT NULL 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 */
/******************************************/
CREATE TABLE `config_info_beta` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` text NOT NULL 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 */
/******************************************/
CREATE TABLE `config_info_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(20) 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 */
/******************************************/
CREATE TABLE `config_tags_relation` (
`id` bigint(20) NOT NULL COMMENT 'id',
`tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
`tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`nid` bigint(20) NOT NULL 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 */
/******************************************/
CREATE TABLE `group_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' 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 */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(64) unsigned NOT NULL,
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data_id` varchar(255) NOT NULL,
`group_id` varchar(128) NOT NULL,
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL,
`md5` varchar(32) DEFAULT NULL,
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
`src_user` text,
`src_ip` varchar(20) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`encrypted_data_key` text NOT NULL 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 */
/******************************************/
CREATE TABLE `tenant_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
CREATE TABLE `tenant_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`kp` varchar(128) NOT NULL 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) NOT NULL COMMENT '创建时间',
`gmt_modified` bigint(20) NOT NULL 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';
CREATE TABLE users (
username varchar(50) NOT NULL PRIMARY KEY,
password varchar(500) NOT NULL,
enabled boolean NOT NULL
);
CREATE TABLE roles (
username varchar(50) NOT NULL,
role varchar(50) NOT NULL,
constraint uk_username_role UNIQUE (username,role)
);
CREATE TABLE permissions (
role varchar(50) NOT NULL,
resource varchar(512) NOT NULL,
action varchar(8) NOT NULL,
constraint uk_role_permission UNIQUE (role,resource,action)
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');