一、安装Docker
# 1、先清除与dockers有关的文件 sudo yum remove docker*
# 2、下载与docker安装有关的文件 sudo yum install -y yum-utils # 3、下载(指定了镜像为阿里云) sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4、安装 sudo yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io-1.4.3
# 5、启动 sudo systemctl enable docker --now
# 6、创建docker配置文件 sudo mkdir -p /etc/docker ##7、下面的直接复制执行并重启 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF sudo systemctl daemon-reload sudo systemctl restart docker
#附加: #安装Docker-Compose批量启停服务(用不到的可以不装) curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #给权限 chmod +x /usr/local/bin/docker-compose
二、部署中间件-Docker版
1、MySQL
##1、先部署mysql docker run -p 3306:3306 --name mysql-01 \ -v /mydata/mysql-01/log:/var/log/mysql \ -v /mydata/mysql-01/data:/var/lib/mysql \ -v /mydata/mysql-01/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ --restart=always \ -d mysql:5.7
##2、配置初始化(很有必要) mkdir -p /mydata/mysql-01/conf vim /mydata/mysql-01/conf/mysql.cnf #把下面内容放到mysql.cnf中去 [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] init_connect='SET collation_connection = utf8mb4_unicode_ci' init_connect='SET NAMES utf8mb4' character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci skip-character-set-client-handshake skip-name-resolve
##3、设置root远程连接 #1、进入master容器 docker exec -it mysql-01 /bin/bash #2、进入mysql容器内部(docker exec -it 进程ID /bin/bash) #3、登录mysql mysql –uroot -p(自己的MySQL密码) #1)授权root可以远程访问(主从无关,为了方便我们远程连接mysql) ##下面是sql语句 grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; flush privileges;
2、Redis
## 1、准备redis配置文件内容 mkdir -p /mydata/redis-01/conf vim /mydata/redis-01/conf/redis.conf #将下面内容写到redis.conf #开启持久化 appendonly yes port 6379 requirepass Lfy123456 bind 0.0.0.0
## 2、步骤1准备好后启动redis docker run -d -p 6379:6379 --restart=always \ -v /mydata/redis-01/conf/redis.conf:/etc/redis/redis.conf \ -v /mydata/redis-01/data:/data \ --name redis-01 redis:6.2.5 \ redis-server /etc/redis/redis.conf
3、ELK
# 1、设置Linux进程限制内存(根据自己情况来搞定) vim /etc/sysctl.conf vm.max_map_count=655360 # 2、设置生效 sysctl -p
①、ElasticSearch
# 1、创建 mkdir -p /mydata/es-01 # 2、提前授权 chmod 777 -R /mydata/es-01
#先自定义一个网络(比较建议): docker network create haha --subnet 188.17.0.1/16 # 3、然后将下面的进程通过上面定义的haha网络进行启动 docker run --restart=always -d -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -v es-config:/usr/share/elasticsearch/config \ -v /mydata/es-01/data:/usr/share/elasticsearch/data \ --name es-01 --network haha \ elasticsearch:7.13.4 # 查看一下es是否启动到指定网络里了(docker network inspect haha) # 查看es日志是否有报错(docker logs es进程ID),若没有跳过步骤4 # 4、建议再授权一次(避免不生效)
# 5、装一下ik分词插件(可能会很慢等后期需要时再装也行) wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.4/elasticsearch-analysis-ik-7.13.4.zip #解压 unzip -d ik elasticsearch-analysis-ik-7.13.4.zip #复制到容器内部plugins目录(会反向操作的也行) docker cp ik 容器id:/usr/share/elasticsearch/plugins # 6、最后重启es docker restart 容器id
②、Kibana
#直接启动(前提时es必须先装好) docker run --name kib01 -d --restart=always --network haha \ -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es-01:9200" \ kibana:7.13.4
③、Filebeats
# 1、启动日志收集器 docker run -d \ --name=filebeat \ --restart=always \ -v filebeat-conf:/usr/share/filebeat \ -v /var/log/messages:/var/log/messages \ --link es进程ID:es01 \ elastic/filebeat:7.13.4 # 注意: #① /var/log/messages 就是记录了当前主机的日志。yum mysql,redis,主机上服务的日志都在这儿 #② --link 7863831f1b58:es01 要用自己es容器的id #③ -v filebeat-conf:/usr/share/filebeat; /usr/share/filebeat下有很多东西,包含配置文件。要整个挂载出来
#2、修改配置文件: cd /var/lib/docker/volumes/filebeat-conf/_data vim filebeat.yml
#内容如下 filebeat.inputs: - type: log enabled: true paths: - /var/log/messages filebeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: false processors: - add_cloud_metadata: ~ - add_docker_metadata: ~ output.elasticsearch: hosts: 'es01:9200' indices: - index: "filebeat-%{+yyyy.MM.dd}"
#3、给权限 chmod 777 -R /var/log/messages
④、Logstash
因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人,加入http://elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫
filebeat
了。logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般结构都是filebeat采集日志,然后发送到消息队列,redis,kafaka。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中
就像垃圾车和环卫工人的关系。
垃圾车也能直接让你把垃圾扔车上带走,但他动静大,环卫工人动静小,不吵到你。
#1、logstash配置 mkdir -p /mydata/logstash && vim /mydata/logstash/logstash.conf input { tcp { mode => "server" host => "0.0.0.0" port => 5044 codec => json_lines } } filter{ } output { elasticsearch { hosts => "es01:9200" index => "gmall-%{+YYYY.MM.dd}" } }
docker run --name logstash -p 5044:5044 \ --restart=always \ --link es进程ID:es01 \ -v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \ -d logstash:7.13.4
4、RabbitMQ
#直接启动 这里设置的账户密码都是admin docker run -d --name rabbit01 -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin \ -p 15672:15672 -p 5672:5672 \ --hostname gmall-rabbit --restart=always \ -v rabbit-data:/var/lib/rabbitmq \ -v rabbit-conf:/etc/rabbitmq \ rabbitmq:3.8-management
中间件 | 端口 | 账号 | 密码 |
---|---|---|---|
Mysql | 3306 | root | root |
Redis | 6379 | lfy123456 | |
ElasticSearch | 9200 | ||
Kibana | 5601 | ||
RabbitMQ | 15672 | admin | admin |
Zipkin | 9411 | ||
Sentinel | 8080 | sentinel | sentinel |
Nacos | 8848 | nacos | nacos |
MinIO | 9000 | admin | admin123456 |
5、Zipkin
#直接启动 docker run -d --restart=always -p 9411:9411 \ --name zipkin \ openzipkin/zipkin:2
SkyWalking;也是同类很不错的中间件
6、Sentinel
需要自制镜像:
#启动sentinel容器 docker run -d -p 8080:8080 \ --name sentinel-dashboard --restart=always \ leifengyang/sentinel:1.8.2 #上面路径是私人的已经封装好的镜像(可以用)
7、Nacos
# 1、下载nacos数据库文件 #https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql # 2、按照要求先创nacos的数据库 CREATE DATABASE `nacos_config`; USE `nacos_config`; # 3、将下面表全部装到上面创建的nacos_config库中 #################################################### /******************************************/ /* 数据库全名 = 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(255) DEFAULT NULL, `content` longtext NOT NULL COMMENT 'content', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL 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, 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(255) 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL 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 '租户字段', 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL 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 */ /******************************************/ 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL 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 */ /******************************************/ 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 CURRENT_TIMESTAMP, `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `src_user` text, `src_ip` varchar(50) DEFAULT NULL, `op_type` char(10) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' 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 CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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, UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE ); CREATE TABLE `permissions` ( `role` varchar(50) NOT NULL, `resource` varchar(255) NOT NULL, `action` varchar(8) NOT NULL, UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE ); INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
#4、上面库装好后再启动(必须的) docker run -d -p 8848:8848 --name=nacos \ --link 你的MySQL进程ID:mysql-01 \ -v nacos-conf:/home/nacos/conf \ -e MODE=standalone \ --restart=always \ nacos/nacos-server:2.0.2
#5、准备nacos配置文件信息 mkdir -p /mydata/nacos/conf/ ## 进入nacos容器(docker exec -it nacos进程ID /bin/bash) vim /mydata/nacos/conf/application.properties ##要修改的内容如下,注意改成自己数据库域名和账号密码 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://mysql-01:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=root # docker run -d -p 8848:8848 --name=nacos \ -e MODE=standalone \ --restart=always \ nacos/nacos-server:2.0.2
8、Minio
OSS(Object Storage Service):对象存储服务
#直接启动 docker run -p 9000:9000 -p 9001:9001 -d --restart=always \ -v /ossdata:/data \ -v /mydata/minio/config:/root/.minio \ -v /etc/localtime:/etc/localtime:ro \ -e "MINIO_ACCESS_KEY=admin" \ -e "MINIO_SECRET_KEY=admin123456" \ --name minio minio/minio \ server --console-address ":9001" /data
9、Nginx
##直接启动 docker run -d -p 80:80 -v /mydata/nginx/html:/usr/share/ngix/html --name gmall-admin nginx