三、Docker安装基本应用
1、安装Nginx
# 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
docker run --name nginx-app \
-v /app/nginx/html:/usr/share/nginx/html:ro \
-v /app/nginx/conf:/etc/nginx
-d nginx:1.20.1
# nginx目录放在/opt/docker/下
# 随便启动一个 nginx 实例,只是为了复制出配置
docker run -p 80:80 -p 443:443 --name nginx443 -d nginx:1.20.1
mkdir -p /usr/local/docker/nginx/html
mkdir -p /usr/local/docker/nginx/logs
mkdir -p /usr/local/docker/nginx/conf
# 复制到/opt/docker/temp下
docker container cp nginx:/etc/nginx /opt/docker/temp
# 比如
docker container cp 8662e037621d:/etc/nginx /usr/local/docker/nginx/conf/
mv /usr/local/docker/nginx/conf/nginx/* /usr/local/docker/nginx/conf
rm -rf /opt/docker/temp
docker stop nginx
docker rm $Containerid
docker run -p 80:80 --name nginx \
-v /opt/docker/nginx/html:/usr/share/nginx/html \
-v /opt/docker/nginx/logs:/var/log/nginx \
-v /opt/docker/nginx/conf/:/etc/nginx \
-d nginx:1.10
docker run -p 80:80 -p 443:443 --name nginx \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx/logs:/var/log/nginx \
-v /usr/local/docker/nginx/conf/:/etc/nginx \
-d nginx:1.20.1
2、安装MySQL
1、单机安装
# 5.7版本
docker run -p 3306:3306 --name mysql57-app \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
docker run -p 4408:3306 --name mysql57-app \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=xUeMysqlPass \
-d mysql:5.7
#8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据,所以需要将权限透传,
或者chmod -R 777 /app/mysql/data
# --privileged 特权容器,容器内使用真正的root用户
docker run -p 3306:3306 --name mysql8-app \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged \
-d mysql
docker run -d --name mysql \-p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \-v /usr/local/docker/mysql/mysql:/etc/mysql \-v /usr/local/docker/mysql/logs:/var/log/mysql \-v /usr/local/docker/mysql/data/:/var/lib/mysql \mysql:5.7 --lower_case_table_names=1
# 新建 my.cnf (/usr/local/mysql/conf)
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
docker run -d -p 3306:3306 --privileged=true -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
2、安装mysql主从复制
# 1、新建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master \
-v /usr/local/docker/mysql-master/log:/var/log/mysql \
-v /usr/local/docker/mysql-master/data:/var/lib/mysql \
-v /usr/local/docker/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# 2、进入/usr/local/docker/mysql-master/conf目录下新建 my.cnf
vim 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
# 3、修改完配置后重启master实例
docker restart mysql-master
# 4、进入mysql-master容器
docker exec -it mysql-master /bin/bash
mysql -uroot -proot
# 5、master容器实例内创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 6、新建从服务器容器实例3308
docker run -p 3308:3306 --name mysql-slave \
-v /usr/local/docker/mysql-slave/log:/var/log/mysql \
-v /usr/local/docker/mysql-slave/data:/var/lib/mysql \
-v /usr/local/docker/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# 7、进入/usr/local/docker/mysql-slave/conf目录下新建my.cnf
vim my.cnf
[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
# 8、修改完配置后重启slave实例
docker restart mysql-slave
# 9、在主数据库中查看主从同步状态
docker exec -it mysql-master /bin/bash
mysql -uroot -proot
show master status;
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 | 617 | | mysql | |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
# 10、在从数据库中配置主从复制
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
change master to master_host='106.14.76.55', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
mysql> change master to master_host='106.14.76.55', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
# 11、在从数据库中查看主从同步状态
docker exec -it mysql-slave /bin/bash
mysql -uroot -proot
show slave status \G;
# 12、在从数据库中开启主从同步
start slave;
# 13、查看从数据库状态发现已经同步
3、安装Redis
1、单机安装
# 提前准备好redis.conf文件,创建好相应的文件夹。如:
port 6379
appendonly yes
#更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
docker run -p 6379:6379 --name redis \
-v /usr/local/redis/redis.conf:/etc/redis/redis.conf \
-v /usr/local/redis/data:/data \
-d redis:6.0.8 \
redis-server /etc/redis/redis.conf --appendonly yes
docker run -p 6379:6379 --name myredis --privileged=true -v /usr/local/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
# 可以提前准备redis的原厂配置
# 修改以下属性即可
# 开启redis验证 可选
requirepass 123
# 允许redis外地连接 必须
#注释掉
# bind 127.0.0.1
#将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no
开启redis数据持久化 appendonly yes 可选
2、集群安装
# 1、新建6个docker容器redis实例
## --net host 使用宿主机的IP和端口,默认
## --privileged=true 获取宿主机root用户权限
## --cluster-enabled yes 开启redis集群
## --appendonly yes 开启持久化
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
[root@k8s-node01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ddf96486e225 redis:6.0.8 "docker-entrypoint.s…" 3 seconds ago Up 3 seconds redis-node-6
d57db8d161fd redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds redis-node-5
77eafa6d8c7c redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds redis-node-4
10d1ee880364 redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds redis-node-3
f6022234fd1d redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds redis-node-2
ca53aa9f1845 redis:6.0.8 "docker-entrypoint.s…" 16 seconds ago Up 15 seconds redis-node-1
# 2、进入容器redis-node-1并为6台机器构建集群关系
docker exec -it redis-node-1 /bin/bash
#注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址
redis-cli --cluster create 139.198.28.196:6381 139.198.28.196:6382 139.198.28.196:6383 139.198.28.196:6384 139.198.28.196:6385 139.198.28.196:6386 --cluster-replicas 1
## --cluster-replicas 1 表示为每个master创建一个slave节点
## 根据提示输入 yes
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 139.198.28.196:6385 to 139.198.28.196:6381
Adding replica 139.198.28.196:6386 to 139.198.28.196:6382
Adding replica 139.198.28.196:6384 to 139.198.28.196:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
slots:[0-5460] (5461 slots) master
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
slots:[5461-10922] (5462 slots) master
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
slots:[10923-16383] (5461 slots) master
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
replicates f9a9d79d384861a899b37b2012f13846bc43d83e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 139.198.28.196:6381)
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
slots: (0 slots) slave
replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
slots: (0 slots) slave
replicates f9a9d79d384861a899b37b2012f13846bc43d83e
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
slots: (0 slots) slave
replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
# 3、连接进入6381作为切入点,查看集群状态
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381
cluster info
127.0.0.1:6381> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:249
cluster_stats_messages_pong_sent:271
cluster_stats_messages_sent:520
cluster_stats_messages_ping_received:266
cluster_stats_messages_pong_received:249
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:520
cluster nodes
127.0.0.1:6381> cluster nodes
f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382@16382 master - 0 1641719386000 2 connected 5461-10922
70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385@16385 slave edf165b5d01f1a1f276237517d391c86c32d9f93 0 1641719384000 1 connected
b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386@16386 slave f9a9d79d384861a899b37b2012f13846bc43d83e 0 1641719385000 2 connected
f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383@16383 master - 0 1641719383000 3 connected 10923-16383
c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384@16384 slave f775463e061e9c32d48f6d0afd9d4916ead686fa 0 1641719386738 3 connected
edf165b5d01f1a1f276237517d391c86c32d9f93 10.140.122.28:6381@16381 myself,master - 0 1641719382000 1 connected 0-5460
3、主从扩容
# 1、新建6387、6388两个节点+新建后启动+查看是否8节点
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
# 2、进入6387容器实例内部
docker exec -it redis-node-7 /bin/bash
# 3、将新增的6387节点(空槽号)作为master节点加入原集群
将新增的6387作为master节点加入集群
redis-cli --cluster add-node 自己实际IP地址: 6387 自己实际IP地址: 6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli --cluster add-node 139.198.28.196:6387 139.198.28.196:6381
# 4、检查集群情况第1次
redis-cli --cluster check 139.198.28.196:6381
root@k8s-node01:/data# redis-cli --cluster check 139.198.28.196:6381
139.198.28.196:6381 (edf165b5...) -> 0 keys | 5461 slots | 1 slaves.
139.198.28.196:6382 (f9a9d79d...) -> 0 keys | 5462 slots | 1 slaves.
139.198.28.196:6383 (f775463e...) -> 0 keys | 5461 slots | 1 slaves.
139.198.28.196:6387 (3a732104...) -> 0 keys | 0 slots | 0 slaves.
6387暂时没有槽号
# 5、重新分派槽号
redis-cli --cluster reshard 139.198.28.196:6381
# 每台分4分之一
How many slots do you want to move (from 1 to 16384)? 4096
# 6387 的 id
What is the receiving node ID? 3a732104b11d3cf81d1128def9f0158fb5708ca7
# 输入 all
Source node #1: all
# 6、检查集群情况第2次
redis-cli --cluster check 139.198.28.196:6381
root@k8s-node01:/data# redis-cli --cluster check 139.198.28.196:6381
139.198.28.196:6381 (edf165b5...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6382 (f9a9d79d...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6383 (f775463e...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6387 (3a732104...) -> 0 keys | 4096 slots | 0 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 139.198.28.196:6381)
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
slots:[1365-5460] (4096 slots) master
1 additional replica(s)
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
slots:[6827-10922] (4096 slots) master
1 additional replica(s)
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
slots: (0 slots) slave
replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
slots: (0 slots) slave
replicates f9a9d79d384861a899b37b2012f13846bc43d83e
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
slots:[12288-16383] (4096 slots) master
1 additional replica(s)
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
slots: (0 slots) slave
replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
M: 3a732104b11d3cf81d1128def9f0158fb5708ca7 139.198.28.196:6387
slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
## 为什么6387是3个新的区间,以前的还是连续?
## 重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387
# 7、为主节点6387分配从节点6388
redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
redis-cli --cluster add-node 139.198.28.196:6388 139.198.28.196:6387 --cluster-slave --cluster-master-id 3a732104b11d3cf81d1128def9f0158fb5708ca7
## 这个是6387的编号,按照自己实际情况
# 8、检查集群情况第3次
redis-cli --cluster check 139.198.28.196:6381
root@k8s-node01:/data# redis-cli --cluster check 139.198.28.196:6381
139.198.28.196:6381 (edf165b5...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6382 (f9a9d79d...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6383 (f775463e...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6387 (3a732104...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 139.198.28.196:6381)
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
slots:[1365-5460] (4096 slots) master
1 additional replica(s)
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
slots:[6827-10922] (4096 slots) master
1 additional replica(s)
S: 76edd8aa5b95afb268873f5b3131fb4077277efc 139.198.28.196:6388
slots: (0 slots) slave
replicates 3a732104b11d3cf81d1128def9f0158fb5708ca7
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
slots: (0 slots) slave
replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
slots: (0 slots) slave
replicates f9a9d79d384861a899b37b2012f13846bc43d83e
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
slots:[12288-16383] (4096 slots) master
1 additional replica(s)
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
slots: (0 slots) slave
replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
M: 3a732104b11d3cf81d1128def9f0158fb5708ca7 139.198.28.196:6387
slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
4、主从缩容
# 1、将6387和6388下线
# 2、检查集群情况 获得6388的节点ID
redis-cli --cluster check 139.198.28.196:6381
76edd8aa5b95afb268873f5b3131fb4077277efc
# 3、将6388删除 从集群中将4号从节点6388删除
redis-cli --cluster del-node ip:从机端口 从机6388节点ID
redis-cli --cluster del-node 139.198.28.196:6388 76edd8aa5b95afb268873f5b3131fb4077277efc
redis-cli --cluster check 139.198.28.196:6381
## 检查一下发现,6388被删除了,只剩下7台机器了。
# 4、将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
redis-cli --cluster reshard 139.198.28.196:6381
How many slots do you want to move (from 1 to 16384)?4096
# 6381的id
What is the receiving node ID? edf165b5d01f1a1f276237517d391c86c32d9f93
# 6387的id
Source node #1: 3a732104b11d3cf81d1128def9f0158fb5708ca7
Source node #2: done
# 5、检查集群情况第二次
redis-cli --cluster check 139.198.28.196:6381
# 4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端
# 6、将6387删除
redis-cli --cluster del-node ip:端口 6387节点ID
redis-cli --cluster del-node 192.168.111.147:6387 3a732104b11d3cf81d1128def9f0158fb5708ca7
# 7、检查集群情况第三次
redis-cli --cluster check 139.198.28.196:6381
4、安装ElasticSearch
#准备文件和文件夹,并chmod -R 777 xxx
#配置文件内容,参照
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/node.name.html 搜索相
关配置
# 考虑为什么挂载使用esconfig ...
docker run --name=elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms300m -Xmx300m" \
-v /app/es/data:/usr/share/elasticsearch/data \
-v /app/es/plugins:/usr/shrae/elasticsearch/plugins \
-v esconfig:/usr/share/elasticsearch/config \
-d elasticsearch:7.12.0
#######################################
docker pull elasticsearch:7.4.2 存储和检索数据
docker pull kibana:7.4.2 可视化检索数据
mkdir -p /opt/docker/elasticsearch/config # 用来存放配置文件
mkdir -p /opt/docker/elasticsearch/data # 数据
echo "http.host: 0.0.0.0" >/opt/docker/elasticsearch/config/elasticsearch.yml # 允许任何机器访问
chmod -R 777 /opt/docker/elasticsearch/ ## 设置elasticsearch文件可读写权限
# 启动es
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /opt/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
#以后再外面装好插件重启就可
#特别注意:
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \ 测试环境下,设置 ES 的初始内存和最大内存,否则导致过大启动不了ES
# 开机启动
docker update elasticsearch --restart=always
# 启动kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://42.192.52.168:9200 -p 5601:5601 -d kibana:7.4.2
http://42.192.52.168:9200 改成自己Elasticsearch上的地址
5、安装Tomcat
# 考虑,如果我们每次 -v 都是指定磁盘路径,是不是很麻烦?
docker run --name tomcat-app -p 8080:8080 \
-v tomcatconf:/usr/local/tomcat/conf \
-v tomcatwebapp:/usr/local/tomcat/webapps \
-d tomcat:jdk8-openjdk-slim-buster
6、安装dubbo-admin
docker run -d \
--name dubbo_admin \
-p 8083:8080 \
-e dubbo.registry.address=zookeeper://172.16.253.50:2181 \
-e dubbo.admin.root.password=root \
-e dubbo.admin.guest.password=root \
chenchuxin/dubbo-admin
7、安装activemq
docker run --name='activemq' \
-itd \
-p 8161:8161 \
-p 61616:61616 \
-e ACTIVEMQ_ADMIN_LOGIN=admin \
-e ACTIVEMQ_ADMIN_PASSWORD=admin \
--restart=always \
-v activemq_data:/data/activemq \
-v activemq_log:/var/log/activemq \
-v activemq_conf:/opt/activemq/conf \
webcenter/activemq:latest
8、YAPI
# 启动 MongoDB
docker run -d --name mongo-yapi mongo
# 获取yapi镜像
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi
# 初始化数据库索引及管理员账号
docker run -it --rm \
--link mongo-yapi:mongo \
--entrypoint npm \
--workdir /api/vendors \
registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
run install-server
# 启动yapi服务
docker run -d \
--name yapi \
--link mongo-yapi:mongo \
--workdir /api/vendors \
-p 3000:3000 \
registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
server/app.js
9、RabbitMQ
docker search rabbitmq
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
docker exec -it 镜像ID /bin/bash
# 开启Web-UI后台界面
rabbitmq-plugins enable rabbitmq_management
http://linuxip地址:15672,用户名和密码默认都是guest
# stats in management UI are disabled on this node
docker exec -it {
rabbitmq容器名称或者id} /bin/bash
cd /etc/rabbitmq/conf.d/
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
# 重启容器
docker pull rabbitmq:3.9.15-management
docker run -d --name=rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3.9.15-management