Docker软件安装
MySQL安装
⚠️实战版
新建mysql容器实例
1 2 3 4 5 6
| docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
|
新建my.cnf,修改mysql字符编码
通过容器卷同步给mysql容器实例
1 2 3 4 5
| [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8
|
重新启动mysql容器实例再重新进入并查看字符编码
1
| SHOW VARIABLES LIKE 'character%'
|
再新建库新建表再插入中文测试
Redis安装
⚠️安装redis
拉取redis镜像到本地
在CentOS宿主机下新建目录/app/redis
mkdir -p /app/redis
将一个redis.conf (默认出厂的原始redis.conf) 文件模板拷贝进/app/redis目录下
/app/redis目录下修改redis.conf文件
使用redis6.0.8镜像创建容器(也叫运行镜像)
1 2 3 4 5 6
| docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
|
测试redis-cli连接上来
请证明docker启动使用了我们自己指定的配置文件
修改前
修改后
记得重启服务
测试redis-cli连接上来第2次
安装mysql主从复制
新建主服务器容器实例3307
1 2 3 4 5
| docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
|
进入/mydata/mysql-master/conf目录下新建my.cnf,修改完配置后重启master实例。(详见Docker软件安装)
⚠️启动不起来删除文件每行后多余的空格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| ##my.cnf文件内容 [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=101 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
|
进入mysql-master容器
1 2
| docker exec -it mysql-master /bin/bash mysql -uroot -proot
|
master容器实例内创建数据同步用户
1 2
| CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; //创建用户 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; //给用户授权
|
新建从服务器容器实例3308
1 2 3 4 5
| docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
|
进入/mydata/mysql-slave/conf目录下新建my.cnf,修改完配置后重启slave实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=102 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1
|
修改完配置后重启slave实例
在主数据库中查看主从同步状态
进入mysql-slave容器
在从数据库中配置主从复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| change master to master_host='127.0.0.1', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
## 主从复制命令参数说明 master_host:主数据库的IP地址; master_port:主数据库的运行端口; master_user:在主数据库创建的用于同步数据的用户账号; master_password:在主数据库创建的用于同步数据的用户密码; master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数; master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数; master_connect_retry:连接失败重试的时间间隔,单位为秒。
|
在从数据库中查看主从同步状态
1
| show slave status \G; //(\G 竖排显示,类似键值对)
|
在从数据库中开启主从同步
查看从数据库状态发现已经同步
配置Redis 3主3从集群
新建6个docker容器redis实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
//命令分步解释 docker run 创建并运行docker容器实例 --name redis-node-6 容器名字 --net host 使用宿主机的IP和端口,默认 --privileged=true 获取宿主机root用户权限 -v /data/redis/share/redis-node-6:/data 容器卷,宿主机地址:docker内部地址 redis:6.0.8 redis镜像和版本号 --cluster-enabled yes 开启redis集群 --appendonly yes 开启持久化 --port 6386 redis端口号
|
进入容器redis-node-1并为6台机器构建集群关系
1 2 3 4 5
| //注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址
redis-cli --cluster create 192.168.111.147:6381 192.168.111.147:6382 192.168.111.147:6383 192.168.111.147:6384 192.168.111.147:6385 192.168.111.147:6386 --cluster-replicas 1
//--cluster-replicas 1 表示为每个master创建一个slave节点
|
选择一个节点进入,查看集群状态
1 2
| cluster info cluster nodes
|
节点扩容
新建6387、6388两个节点+新建后启动+查看是否8个节点
1 2 3
| docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
|
进入6387容器实例内部
将新增的6387节点(空槽号)作为master节点加入原集群
1 2 3 4 5 6
| 将新增的6387作为master节点加入集群
redis-cli --cluster add-node 自己实际IP地址: 6387 自己实际IP地址: 6381
6387 就是将要作为master新增节点 6381 就是原来集群节点里面的领路人,相当于6387见见6381Master从而找到组织加入集群
|
检查集群情况第1次
1
| redis-cli --cluster check 真实ip地址:6381
|
重新分派槽号
1 2
| 命令 : redis-cli --cluster reshard IP地址:端口号 redis-cli --cluster reshard 192.168.111.147:6381
|

检查集群情况第2次
槽号分派说明

为主节点6387分配从节点6388
1 2 3
| 命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID redis-cli --cluster add-node 192.168.111.147:6388 192.168.111.147:6387 --cluster-slave --cluster-master-id e4781f644d4a4e4d4b4d107157b9ba8144631451-------这个是6387的编号,按照自己实际情况
|
检查集群情况第3次
节点缩容
检查集群情况获得6388的节点ID,将6388删除
1 2 3 4 5 6
| ##检查 redis-cli --cluster check 192.168.111.147:6382 ##删除 命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID
redis-cli --cluster del-node 192.168.111.147:6388 5d149074b7e57b802287d1797a874ed7a1a284a8
|
将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
1
| redis-cli --cluster reshard 192.168.111.147:6381
|
检查集群情况第二次
- 4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端
将6387删除
1
| 命令:redis-cli --cluster del-node ip:端口 6387节点ID
|
检查集群情况
1
| redis-cli --cluster check 192.168.111.147:6381
|
ElasticSearch安装
⚠️
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml chmod -R 777 /mydata/elasticsearch/ 保证权限
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \ -e bootstrap.memory_lock=true \ -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \ -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.4.2
|
可视化界面(版本统一)
1 2 3 4
| docker pull kibana docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \ -d kibana:7.4.2 http://192.168.56.10:9200 一定改为自己虚拟机的地址
|
nginx安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| docker run -p 80:80 --name nginx -d nginx:1.10 随便启动一个nginx实例,只是为了复制出配置
将容器内的配置文件拷贝到当前目录:docker container cp nginx:/etc/nginx . 别忘了后面的点
修改文件名称:mv nginx conf 把这个 conf 移动到/mydata/nginx 下 终止原容器:docker stop nginx 执行命令删除原容器:docker rm $ContainerId 创建新的nginx,执行以下命令
docker run -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -v /mydata/nginx/config:/etc/nginx \ -d nginx:1.10
|
RabbitMQ安装
1
| docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management
|
注:
- 4369 – erlang发现口
- 5672 –client端通信口
- 15672 – 管理界面ui端口
- 25672 – server间内部通信口
zipkin安装
1 2 3 4
| docker run -d -p 9411:9411 openzipkin/zipkin
生产环境下,数据持久化到本地 docker run -env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.56.10:9200 openzipkin/zipkin-dependencies
|