docker学习4

1.nacos单机部署:

1.docker pull nacos/nacos-server  拉取nacos

2. #创建挂载文件路径

mkdir -p /home/web-data/logs     ## 日志文件路径

mkdir -p  /home/web-data/conf   ### 配置文件路径

mkdir -p /home/web-data/data  ## 数据文件

-v /home/web-data/logs:/home/nacos/logs 
-v /home/web-data/conf:/home/nacos/conf 
-v /home/web-data/data:/home/nacos/data 

docker run -itd --name=nacos -p 8848:8848 
-v /home/web-data/logs:/home/nacos/logs    ## 日志挂载
-v /home/web-data/conf:/home/nacos/conf    ## 配置文件挂载 第一次启动需要拷贝配置文件到/home/web-data/conf 如果直接挂载启动不成功
-v /home/web-data/data:/home/nacos/data    ## 数据挂载
--env MODE=standalone nacos/nacos-server

启动完 可以通过 http://ip:8848进行访问 

Nacos docker集群版 可以参考官网

 2.tomcat 安装

1.docker hub上面查找tomcat镜像

docker search tomcat     搜索镜像

docker pull tomcat     拉取镜像  不加上tag,默认拉取最新

docker images 查看是否拉取成功了

docker run -it -p 8011:8080 tomcat

docker ps  检查是否启动成功

访问 http:// ip:8011

 进入 tomcat 容器内:

docker exec -it fd17afd8f974 /bin/bash

发现webapps 下面为空。坑爹

 我这里想有2中方式解决,第一种最简单,吧 webapps.dist中的内容移到webapps中;

第二种做做个挂载,吧webapps路径挂载在宿主机中,在宿主机中加入页面内容

测试使用简单的第一种

rm -rf webapps 

mv webapps.dist webapps

 或者下载  docker pull billygoo/tomcat8-jdk8  tomat8 。好像8之后的都是这样的 ,8之前不需要这样设置

3. mysql安装

docker hub上面查找mysql镜像

docker search mysql

从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7

运行 启动mysql服务:
docker run -d -p 3306:3306 --privileged=true \
-v /edwin/mysql/log:/var/log/mysql \
-v /edwin/mysql/data:/var/lib/mysql \
-v /edwin/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7


cd /edwin/mysql/conf
vim my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

保存文件重启 mysql 服务

docker restart mysql

3-2 :mysql主从同步

1.新建主服务容器实例: 3307


需要提前创建好:
/root/yulang/mysql-master/log 
/root/yulang/mysql-master/data
/root/yulang/mysql-master/conf


执行:

docker run -p 3307:3306 --name mysql-master \
-v /root/yulang/mysql-master/log:/var/log/mysql \
-v /root/yulang/mysql-master/data:/var/lib/mysql \
-v /root/yulang/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

2.进入 : /root/yulang/mysql-master/conf

3.修改 mysql主服务的配置文件
vi my.cnf
## 内容如下

[mysqld]
##设置server_id,同一局域网中需要唯一
#服务器唯一id 保证唯一,不能重复(一般为ip最后一段)
server-id=66
##指定不需要同步的数据库,名称
binlog-ignore-db=mysql
# 启用二进制日志
log-bin=mysql-bin
##设置二进制使用的内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
##二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有的错误或指定类型的错误,避免slave端复制中断。
##如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062


4.修改完保存后,需要重启mysql服务

docker restart mysql-master


5. 进入容器 mysql-master ,登录mysql 服务
docker exec -it mysql-master /bin/bash

mysql -uroot -proot

6. 创建主从复制的账号:
CREATE USER 'yulang'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'yulang'@'%'; 


7. 查询下master实例的状态

mysql master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |     1909 |              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
从服务器配置:

1.新建从服务器 3308:

跟主服务器一样 目录自己提前创建好:


运行:
docker run -p 3308:3306 --name mysql-slave \
-v /root/yulang/mysql-slave/log:/var/log/mysql \
-v /root/yulang/mysql-slave/data:/var/lib/mysql \
-v /root/yulang/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7


2. 进入/root/yulang/mysql-slave/conf,修改my.cnf文件

[mysqld]
##设置server_id,同一局域网中需要唯一
#服务器唯一id 保证唯一,不能重复(一般为ip最后一段)
server-id=67
##指定不需要同步的数据库,名称
binlog-ignore-db=mysql
# 启用二进制日志,以备slave作为其他数据库实例的master时使用
log-bin=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=relay-bin
##log_slave_updates表示slave将复制时间写进自己的二进制日志
log_slave_updates=1
##slave设置为只读(具有super权限的用户除外)
read_only=1


3.修改完保存后,重启slave实例
docker restart mysql-slave

4.进入slave容器内部,配置主从复制

docker exec -it mysql-slave /bin/bash
mysql -uroot -proot

## 在从数据库中配置主从复制
  #master_host : 宿主机的IP地址
  #master_user: 在主数据中新建的用于同步数据的账号
  #master_password:在主数据中新建的用于同步数据的账号密码
  #master_port: 主数据的端口号
  #master_log_file: 主数据库中查询状态 对应的 mysql-bin.000003 
  #master_log_pos:  主数据库中查询状态 对应的 postion 

change master to master_host ='10.0.8.4',master_user='yulang',
master_password='123456',master_port=3307,master_log_file='mysql-bin.000003',master_log_pos=1909,master_connect_retry=30;

5.查看slave状态

show slave status \G;

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.8.4
                  Master_User: yulang
                  Master_Port: 3307
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1909
               Relay_Log_File: mall-relay-bin.000004
                Relay_Log_Pos: 629
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: NO (第一次启动 是 NO 表示从服务没有开始工作)
            Slave_SQL_Running: NO (第一次启动 是 NO 表示从服务没有开始工作)
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1909
              Relay_Log_Space: 1001
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 66
                  Master_UUID: 2d78e7ee-bfe5-11ec-9650-0242ac110003
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)


5. 需要开启 slave

start slave;

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.8.4
                  Master_User: yulang
                  Master_Port: 3307
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1909
               Relay_Log_File: mall-relay-bin.000004
                Relay_Log_Pos: 629
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: YES
            Slave_SQL_Running: YES
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 


6. 测试,在煮数据库中新建表 ,插入数据,从数据可以正常同步即可

4.redis安装

单机:

docker pull redis:6.0.8

docker images  ## 查看下镜像

## 运行容器
docker run -p 6379:6379 --name myredis --privileged=true \
-v /home/yulang/redis/redis.conf:/etc/redis/redis.conf \
-v /home/yulang/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf

集群

1.新建6个redis实例

## --net host  :表示使用宿主机的ip和端口,默认
## --privileged=true 获取宿主机root的用户权限
## --appendonly yes 开启持久化
## --cluster-enabled yes 开启集群
## /home/yulang/redis/share/redis-node-1:/data 容器卷,宿主机地址:docker内部地址

docker run -d --name redis-node-1 --net host --privileged=true \
-v /home/yulang/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 /home/yulang/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 /home/yulang/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 /home/yulang/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 /home/yulang/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 /home/yulang/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386


2.运行成功后。随便进一台实例, 构建主从设置
docker exec -it redis-node-1 /bin/bash

## 构建主从关系
## --cluster-replicas 1 表示为每个master创建一个slave
redis-cli --cluster create 10.0.8.4:6381 10.0.8.4:6382 10.0.8.4:6383 10.0.8.4:6384 10.0.8.4:6385 10.0.8.4:6386 --cluster-replicas 1


3.
[root@VM-8-4-centos share]# docker exec -it redis-node-1 /bin/bash
root@VM-8-4-centos:/data# redis-cli --cluster create 10.0.8.4:6381 10.0.8.4:6382 10.0.8.4:6383 10.0.8.4:6384 10.0.8.4:6385 10.0.8.4:6386 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.0.8.4:6385 to 10.0.8.4:6381
Adding replica 10.0.8.4:6386 to 10.0.8.4:6382
Adding replica 10.0.8.4:6384 to 10.0.8.4:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots:[0-5460] (5461 slots) master
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[5461-10922] (5462 slots) master
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[10923-16383] (5461 slots) master
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
S: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   replicates 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c
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 10.0.8.4:6381)
M: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots: (0 slots) slave
   replicates 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[10923-16383] (5461 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。查看集群状态:
root@VM-8-4-centos:/data# redis-cli -p 6381
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:88
cluster_stats_messages_pong_sent:93
cluster_stats_messages_sent:181
cluster_stats_messages_ping_received:88
cluster_stats_messages_pong_received:88
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:181
127.0.0.1:6381> cluster nodes
2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384@16384 slave c97c5a75c68c6c818ff86657dc19d16335840c8f 0 1650460994860 2 connected
5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385@16385 slave 4a57c726a60370c3169e9f96f7d0104eaa01155d 0 1650460994000 3 connected
c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382@16382 master - 0 1650460993000 2 connected 5461-10922
518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381@16381 myself,master - 0 1650460993000 1 connected 0-5460
d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386@16386 slave 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 0 1650460992000 1 connected
4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383@16383 master - 0 1650460993858 3 connected 10923-16383
127.0.0.1:6381> 

主从容错迁移方案

1.
127.0.0.1:6381> set key1 111
(error) MOVED 9189 10.0.8.4:6382

## 如要加入-c 参数,优化路由跳转

2.##如下
127.0.0.1:6381> set key44 444
(error) MOVED 10667 10.0.8.4:6382
127.0.0.1:6381> quit
root@VM-8-4-centos:/data# redis-cli -p 6381 -c
127.0.0.1:6381> set abc 12
-> Redirected to slot [7638] located at 10.0.8.4:6382
OK
10.0.8.4:6382> 


3.### 检查集权状态     redis-cli --cluster check 10.0.8.4:6381

root@VM-8-4-centos:/data# redis-cli --cluster check 10.0.8.4:6381
10.0.8.4:6381 (518cc73d...) -> 1 keys | 5461 slots | 1 slaves.
10.0.8.4:6382 (c97c5a75...) -> 1 keys | 5462 slots | 1 slaves.
10.0.8.4:6383 (4a57c726...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 10.0.8.4:6381)
M: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots: (0 slots) slave
   replicates 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[10923-16383] (5461 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.
root@VM-8-4-centos:/data# 


4. 容错方案:
上面看到6381 是主节点,对应的从节点是 6386. 我们先关闭6381 ,在启动看看会不会主从切换

## 停掉6381 几秒钟后,6386升级为master
root@VM-8-4-centos:/data# redis-cli --cluster check 10.0.8.4:6382
Could not connect to Redis at 10.0.8.4:6381: Connection refused
10.0.8.4:6382 (c97c5a75...) -> 1 keys | 5462 slots | 1 slaves.
10.0.8.4:6383 (4a57c726...) -> 0 keys | 5461 slots | 1 slaves.
10.0.8.4:6386 (d4bb4b69...) -> 1 keys | 5461 slots | 0 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 10.0.8.4:6382)
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
M: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots:[0-5460] (5461 slots) master
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


## 从新启动6381 后,检查集群状态,6386 还是master
[root@VM-8-4-centos share]# docker exec -it redis-node-2 /bin/bash
root@VM-8-4-centos:/data# redis-cli --cluster check 10.0.8.4:6382
10.0.8.4:6382 (c97c5a75...) -> 1 keys | 5462 slots | 1 slaves.
10.0.8.4:6383 (4a57c726...) -> 0 keys | 5461 slots | 1 slaves.
10.0.8.4:6386 (d4bb4b69...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 10.0.8.4:6382)
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
S: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots: (0 slots) slave
   replicates d4bb4b69f08ebba0ca525424800439e7011a5498
M: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
root@VM-8-4-centos:/data# 

主从扩容

1.### 向节点中在增加2个实例

跟之前一样   /home/yulang/redis/share/redis-node-7 需要提前创建好

docker run -d --name redis-node-7 --net host --privileged=true \
-v /home/yulang/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 /home/yulang/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388


2.##进入6387  将新增的6387作为master节点加入集群

## 查看下集群状态
redis-cli --cluster check 10.0.8.4:6381

#redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
#6387 就是将要作为master新增节点
#6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
 
3.## 将6387 加入 6386(主节点,这里前面6386已经升级为吗,master)
redis-cli --cluster add-node 10.0.8.4:6387 10.0.8.4:6386


###检查集群状态
redis-cli --cluster check 10.0.8.4:6381

4.重新分配槽号,
redis-cli --cluster reshard 10.0.8.4:6386

在写入上面的命令后,
1.会提示你分配多少个槽位 (从6386分给6387),直接输入数字即可
2. 会提示是 具体分配给谁,就是那个master的id,需要自己填写
3. 提示一个 type , 键入 all 即可  (可以看下图)

###检查集群状态
redis-cli --cluster check 10.0.8.4:6381

## 6387 刚刚分配了2600个槽位 ,没有slaves节点
10.0.8.4:6383 (4a57c726...) -> 0 keys | 4595 slots | 1 slaves.
10.0.8.4:6382 (c97c5a75...) -> 1 keys | 4594 slots | 1 slaves.
10.0.8.4:6387 (97a72c46...) -> 0 keys | 2600 slots | 0 slaves.
10.0.8.4:6386 (d4bb4b69...) -> 1 keys | 4595 slots | 1 slaves.
[OK] 2 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 10.0.8.4:6381)
S: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots: (0 slots) slave
   replicates d4bb4b69f08ebba0ca525424800439e7011a5498
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[11789-16383] (4595 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[6329-10922] (4594 slots) master
   1 additional replica(s)
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
M: 97a72c46f6ff953ac559f5050a0f1c51e570c57c 10.0.8.4:6387
   slots:[0-865],[5461-6328],[10923-11788] (2600 slots) master
M: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots:[866-5460] (4595 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.

*****为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6386/6382/6383三个旧节点分别匀出坑位给新节点6387


5### 为主节点 6387 添加从节点 6388
 
*** 命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
 
 ## 97a72c46f6ff953ac559f5050a0f1c51e570c57c -------这个是6387(master)的编号,按照自己实际情况

redis-cli --cluster add-node 10.0.8.4:6388 10.0.8.4:6387 --cluster-slave --cluster-master-id 97a72c46f6ff953ac559f5050a0f1c51e570c57c
 

###检查集群状态
redis-cli --cluster check 10.0.8.4:6387


root@VM-8-4-centos:/data# redis-cli --cluster check 10.0.8.4:6381
10.0.8.4:6383 (4a57c726...) -> 0 keys | 4595 slots | 1 slaves.
10.0.8.4:6382 (c97c5a75...) -> 1 keys | 4594 slots | 1 slaves.
10.0.8.4:6387 (97a72c46...) -> 0 keys | 2600 slots | 1 slaves.  ## 有了从节点
10.0.8.4:6386 (d4bb4b69...) -> 1 keys | 4595 slots | 1 slaves.
[OK] 2 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 10.0.8.4:6381)
S: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots: (0 slots) slave
   replicates d4bb4b69f08ebba0ca525424800439e7011a5498
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[11789-16383] (4595 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[6329-10922] (4594 slots) master
   1 additional replica(s)
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
M: 97a72c46f6ff953ac559f5050a0f1c51e570c57c 10.0.8.4:6387
   slots:[0-865],[5461-6328],[10923-11788] (2600 slots) master
   1 additional replica(s)
S: 740a2def16f1a9943e911a8348c4a62fc79cc8c8 10.0.8.4:6388
   slots: (0 slots) slave
   replicates 97a72c46f6ff953ac559f5050a0f1c51e570c57c
M: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots:[866-5460] (4595 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.
root@VM-8-4-centos:/data# 

主从缩容

1.## 剔除 6387 和 6388
***检查集群状态,获取: 6388 的节点id
redis-cli --cluster check 10.0.8.4:6387

2.## 将6388删除,从集群中将从节点6388删除

 
命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID
 
redis-cli --cluster del-node 10.0.8.4:6388 740a2def16f1a9943e911a8348c4a62fc79cc8c8

*******
root@VM-8-4-centos:/data# redis-cli --cluster del-node 10.0.8.4:6388 740a2def16f1a9943e911a8348c4a62fc79cc8c8
>>> Removing node 740a2def16f1a9943e911a8348c4a62fc79cc8c8 from cluster 10.0.8.4:6388
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
root@VM-8-4-centos:/data# 
*********
 
 3.在此检查下集群状态:
redis-cli --cluster check 10.0.8.4:6382
 
 检查一下发现,6388被删除了,只剩下7台机器了。
*****************************
root@VM-8-4-centos:/data# redis-cli --cluster check 10.0.8.4:6381
10.0.8.4:6383 (4a57c726...) -> 0 keys | 4595 slots | 1 slaves.
10.0.8.4:6382 (c97c5a75...) -> 1 keys | 4594 slots | 1 slaves.
10.0.8.4:6387 (97a72c46...) -> 0 keys | 2600 slots | 0 slaves.  ## 6388 删除了 6387 没有从节点
10.0.8.4:6386 (d4bb4b69...) -> 1 keys | 4595 slots | 1 slaves.
[OK] 2 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 10.0.8.4:6381)
S: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots: (0 slots) slave
   replicates d4bb4b69f08ebba0ca525424800439e7011a5498
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[11789-16383] (4595 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[6329-10922] (4594 slots) master
   1 additional replica(s)
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
M: 97a72c46f6ff953ac559f5050a0f1c51e570c57c 10.0.8.4:6387
   slots:[0-865],[5461-6328],[10923-11788] (2600 slots) master
M: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots:[866-5460] (4595 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.##将6387的槽号清空,并且吧槽号从新分配,测试将槽号都还给6386 (如果想平均给其他几个主节点,按照这个步骤 一个节点分一部分即可)
## 我这里测试 给 6386 节点10个槽位,其他的都给 6383

 redis-cli --cluster reshard 10.0.8.4:6386
 *********************
root@VM-8-4-centos:/data# redis-cli --cluster reshard 10.0.8.4:6386
>>> Performing Cluster Check (using node 10.0.8.4:6386)
M: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
   slots:[866-5460] (4595 slots) master
   1 additional replica(s)
M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
   slots:[6329-10922] (4594 slots) master
   1 additional replica(s)
S: 2eaf0cd87138e5f8043c31f0cd1133178c64db65 10.0.8.4:6384
   slots: (0 slots) slave
   replicates c97c5a75c68c6c818ff86657dc19d16335840c8f
M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
   slots:[11789-16383] (4595 slots) master
   1 additional replica(s)
S: 518cc73d11a4a2f687b5fdd41844ae844c9e6d5c 10.0.8.4:6381
   slots: (0 slots) slave
   replicates d4bb4b69f08ebba0ca525424800439e7011a5498
S: 5d5336ac7846fc67c081f5f2e08972e3001418de 10.0.8.4:6385
   slots: (0 slots) slave
   replicates 4a57c726a60370c3169e9f96f7d0104eaa01155d
M: 97a72c46f6ff953ac559f5050a0f1c51e570c57c 10.0.8.4:6387
   slots:[0-865],[5461-6328],[10923-11788] (2600 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 10
What is the receiving node ID? d4bb4b69f08ebba0ca525424800439e7011a5498
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: all

Ready to move 10 slots.
  Source nodes:
    M: c97c5a75c68c6c818ff86657dc19d16335840c8f 10.0.8.4:6382
       slots:[6329-10922] (4594 slots) master
       1 additional replica(s)
    M: 4a57c726a60370c3169e9f96f7d0104eaa01155d 10.0.8.4:6383
       slots:[11789-16383] (4595 slots) master
       1 additional replica(s)
    M: 97a72c46f6ff953ac559f5050a0f1c51e570c57c 10.0.8.4:6387
       slots:[0-865],[5461-6328],[10923-11788] (2600 slots) master
  Destination node:
    M: d4bb4b69f08ebba0ca525424800439e7011a5498 10.0.8.4:6386
       slots:[866-5460] (4595 slots) master
       1 additional replica(s)
  Resharding plan:
    Moving slot 11789 from 4a57c726a60370c3169e9f96f7d0104eaa01155d
    Moving slot 11790 from 4a57c726a60370c3169e9f96f7d0104eaa01155d
    Moving slot 11791 from 4a57c726a60370c3169e9f96f7d0104eaa01155d
    Moving slot 11792 from 4a57c726a60370c3169e9f96f7d0104eaa01155d
    Moving slot 6329 from c97c5a75c68c6c818ff86657dc19d16335840c8f
    Moving slot 6330 from c97c5a75c68c6c818ff86657dc19d16335840c8f
    Moving slot 6331 from c97c5a75c68c6c818ff86657dc19d16335840c8f
    Moving slot 0 from 97a72c46f6ff953ac559f5050a0f1c51e570c57c
    Moving slot 1 from 97a72c46f6ff953ac559f5050a0f1c51e570c57c
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 11789 from 10.0.8.4:6383 to 10.0.8.4:6386: 
Moving slot 11790 from 10.0.8.4:6383 to 10.0.8.4:6386: 
Moving slot 11791 from 10.0.8.4:6383 to 10.0.8.4:6386: 
Moving slot 11792 from 10.0.8.4:6383 to 10.0.8.4:6386: 
Moving slot 6329 from 10.0.8.4:6382 to 10.0.8.4:6386: 
Moving slot 6330 from 10.0.8.4:6382 to 10.0.8.4:6386: 
Moving slot 6331 from 10.0.8.4:6382 to 10.0.8.4:6386: 
Moving slot 0 from 10.0.8.4:6387 to 10.0.8.4:6386: 
Moving slot 1 from 10.0.8.4:6387 to 10.0.8.4:6386:
********************************
 

 5.在此检查下集群状态:
redis-cli --cluster check 10.0.8.4:6382



 6.将6387删除
命令:redis-cli --cluster del-node ip:端口 6387节点ID
 
redis-cli --cluster del-node 10.0.8.4:6387 97a72c46f6ff953ac559f5050a0f1c51e570c57c
 

7.在此检查下集群状态:
redis-cli --cluster check 10.0.8.4:6382

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值