一、redis 配置信息模板文件名:redis-cluster.tmpl # redis端口port ${PORT}#redis 访问密码requirepass 123456#redis 访问Master节点密码masterauth 123456# 关闭保护模式protected-mode no# 开启集群cluster-enabled yes# 集群节点配置cluster-config-file nodes.conf# 超时cluster-node-timeout 5000# 集群节点IP host模式为宿主机IP# cluster-announce-ip 192.168.1.10# 集群节点端口 7001 - 7006cluster-announce-port ${PORT}cluster-announce-bus-port 1${PORT}# 开启 appendonly 备份模式appendonly yes# 每秒钟备份appendfsync everysec# 对aof文件进行压缩时,是否执行同步操作no-appendfsync-on-rewrite no# 当目前aof文件大小超过上一次重写时的aof文件大小的100%时会再次进行重写auto-aof-rewrite-percentage 100# 重写前AOF文件的大小最小值 默认 64mbauto-aof-rewrite-min-size 64mb# 日志配置# debug:会打印生成大量信息,适用于开发/测试阶段# verbose:包含很多不太有用的信息,但是不像debug级别那么混乱# notice:适度冗长,适用于生产环境# warning:仅记录非常重要、关键的警告消息loglevel notice# 日志文件路径logfile "/data/redis.log"
二、编写批量生成配置文件脚本文件名:redis-cluster-config.sh for port in `seq 7001 7006`; do / mkdir -p ./${port}/conf / && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf / && mkdir -p ./${port}/data; /done
三、批量生成配置文件执行 redis-cluster-config.sh 生成配置文件 
四、编写 docker-compose 文件文件名:docker-compose.yml version: '3'services: redis-7001: image: redis:6 container_name: redis-7001 command: ["redis-server", "/usr/local/etc/redis/redis.conf"] volumes: - ./7001/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7001/data:/data ports: - "7001:7001" - "17001:17001" environment: # 设置时区为上海,否则时间会有问题 - TZ=Asia/Shanghai logging: options: max-size: '100m' max-file: '10' redis-7002: container_name: redis-7002 - ./7002/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7002/data:/data - "7002:7002" - "17002:17002" redis-7003: container_name: redis-7003 - ./7003/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7003/data:/data - "7003:7003" - "17003:17003" redis-7004: container_name: redis-7004 - ./7004/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7004/data:/data - "7004:7004" - "17004:17004" redis-7005: container_name: redis-7005 - ./7005/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7005/data:/data - "7005:7005" - "17005:17005" redis-7006: container_name: redis-7006 - ./7006/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7006/data:/data - "7006:7006" - "17006:17006"
五、做集群、分配插槽注:192.168.44.65 为 宿主机ip ip | port |
---|
192.168.44.65 | 7001 | 192.168.44.65 | 7002 | 192.168.44.65 | 7003 | 192.168.44.65 | 7004 | 192.168.44.65 | 7005 | 192.168.44.65 | 7006 |
执行命令: 注: cluster-replicas 表示 一个主节点有几个从节点 C:/Users/billow>docker exec -it redis-7001 redis-cli -p 7001 -a 123456 --cluster create 192.168.44.65:7001 192.168.44.65:7002 192.168.44.65:7003 192.168.44.65:7004 192.168.44.65:7005 192.168.44.65:7006 --cluster-replicas 1>>> Performing hash slots allocation on 6 nodes...Master[0] -> Slots 0 - 5460Master[1] -> Slots 5461 - 10922Master[2] -> Slots 10923 - 16383Adding replica 192.168.44.65:7005 to 192.168.44.65:7001Adding replica 192.168.44.65:7006 to 192.168.44.65:7002Adding replica 192.168.44.65:7004 to 192.168.44.65:7003>>> Trying to optimize slaves allocation for anti-affinity[WARNING] Some slaves are in the same host as their masterM: 741c7bb537888ff97866896abb22da27c22f8eaf 192.168.44.65:7001 slots:[0-5460] (5461 slots) masterM: e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 192.168.44.65:7002 slots:[5461-10922] (5462 slots) masterM: 9936d3690d971eccfc8b8ed43c5defc66f318454 192.168.44.65:7003 slots:[10923-16383] (5461 slots) masterS: b7b6fa6a4766c32c5d42d759548d6fcdf2b9159b 192.168.44.65:7004 replicates e5f687462a0c47f51c3abf4b8d77d646a3d63fa9S: 2275c996f25a8815342e2435af073eb29565778b 192.168.44.65:7005 replicates 9936d3690d971eccfc8b8ed43c5defc66f318454S: f69a5d0ae974816396a9d9e613c13f6ceea25de2 192.168.44.65:7006 replicates 741c7bb537888ff97866896abb22da27c22f8eafCan 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 clusterWaiting for the cluster to join.>>> Performing Cluster Check (using node 192.168.44.65:7001)M: 741c7bb537888ff97866896abb22da27c22f8eaf 192.168.44.65:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s)S: f69a5d0ae974816396a9d9e613c13f6ceea25de2 172.25.0.11:7006 slots: (0 slots) slave replicates 741c7bb537888ff97866896abb22da27c22f8eafM: 9936d3690d971eccfc8b8ed43c5defc66f318454 172.25.0.7:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s)M: e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 172.25.0.8:7002 slots:[5461-10922] (5462 slots) master 1 additional replica(s)S: 2275c996f25a8815342e2435af073eb29565778b 172.25.0.10:7005 slots: (0 slots) slave replicates 9936d3690d971eccfc8b8ed43c5defc66f318454S: b7b6fa6a4766c32c5d42d759548d6fcdf2b9159b 172.25.0.9:7004 slots: (0 slots) slave replicates e5f687462a0c47f51c3abf4b8d77d646a3d63fa9[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.
六、测试:命令: -- 集群、分配插槽docker exec -it redis-7001 redis-cli -p 7001 -a 123456 --cluster create 192.168.44.65:7001 192.168.44.65:7002 192.168.44.65:7003 192.168.44.65:7004 192.168.44.65:7005 192.168.44.65:7006 --cluster-replicas 1-- 测试docker exec -it redis-7001 redis-cli -h 192.168.44.65 -p 7003 -a 123456 -c-- 查看集群状态cluster nodes-- 查看分片信息cluster slots-- 查看集群信息cluster info 执行结果: C:/Users/billow>docker exec -it redis-7001 redis-cli -h 192.168.44.65 -p 7003 -a 123456 -c Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.44.65:7003> 192.168.44.65:7003> 192.168.44.65:7003> 192.168.44.65:7003> 192.168.44.65:7003> set name admin -> Redirected to slot [5798] located at 172.25.0.8:7002 OK 172.25.0.8:7002> get name "admin" 172.25.0.8:7002> cluster nodes 2275c996f25a8815342e2435af073eb29565778b 172.25.0.10:7005@17005 slave 9936d3690d971eccfc8b8ed43c5defc66f318454 0 1648086940436 3 connected f69a5d0ae974816396a9d9e613c13f6ceea25de2 172.25.0.11:7006@17006 slave 741c7bb537888ff97866896abb22da27c22f8eaf 0 1648086939000 1 connected b7b6fa6a4766c32c5d42d759548d6fcdf2b9159b 172.25.0.9:7004@17004 slave e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 0 1648086939710 2 connected 741c7bb537888ff97866896abb22da27c22f8eaf 172.25.0.6:7001@17001 master - 0 1648086939392 1 connected 0-5460 e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 172.25.0.8:7002@17002 myself,master - 0 1648086939000 2 connected 5461-10922 9936d3690d971eccfc8b8ed43c5defc66f318454 172.25.0.7:7003@17003 master - 0 1648086938868 3 connected 10923-16383 172.25.0.8:7002> 172.25.0.8:7002> 172.25.0.8:7002> 172.25.0.8:7002> 172.25.0.8:7002> 172.25.0.8:7002> cluster slots 1) 1) (integer) 0 2) (integer) 5460 3) 1) "172.25.0.6" 2) (integer) 7001 3) "741c7bb537888ff97866896abb22da27c22f8eaf" 4) 1) "172.25.0.11" 2) (integer) 7006 3) "f69a5d0ae974816396a9d9e613c13f6ceea25de2" 2) 1) (integer) 5461 2) (integer) 10922 3) 1) "172.25.0.8" 2) (integer) 7002 3) "e5f687462a0c47f51c3abf4b8d77d646a3d63fa9" 4) 1) "172.25.0.9" 2) (integer) 7004 3) "b7b6fa6a4766c32c5d42d759548d6fcdf2b9159b" 3) 1) (integer) 10923 2) (integer) 16383 3) 1) "172.25.0.7" 2) (integer) 7003 3) "9936d3690d971eccfc8b8ed43c5defc66f318454" 4) 1) "172.25.0.10" 2) (integer) 7005 3) "2275c996f25a8815342e2435af073eb29565778b" 172.25.0.8:7002> 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:2 cluster_stats_messages_ping_sent:906 cluster_stats_messages_pong_sent:911 cluster_stats_messages_meet_sent:1 cluster_stats_messages_sent:1818 cluster_stats_messages_ping_received:911 cluster_stats_messages_pong_received:906 cluster_stats_messages_received:1817
七、手动扩容添加两个新的节点用于手动扩容 文件名:add-redis-docker.yml version: '3'services: redis-7007: image: redis:6 container_name: redis-7007 command: ["redis-server", "/usr/local/etc/redis/redis.conf"] volumes: - ./7007/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7007/data:/data ports: - "7007:7007" - "17007:17007" environment: # 设置时区为上海,否则时间会有问题 - TZ=Asia/Shanghai logging: options: max-size: '100m' max-file: '10' redis-7008: container_name: redis-7008 - ./7008/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./7008/data:/data - "7008:7008" - "17008:17008"networks: default: external: name: learn_shop 执行命令:
docker-compose -f add-redis-docker.yml up
八、添加主从节点
1、添加主节点-- 进入任意节点docker exet -it redis-7001 bash-- 添加主节点(192.168.44.65:7001 -a 123456 这个可以是任何已存在的节点,主要用于获取集群信息)redis-cli --cluster add-node 192.168.44.65:7007 192.168.44.65:7001 -a 123456 结果: root@aa1e004c00ff:/data# redis-cli --cluster add-node 192.168.44.65:7007 192.168.44.65:7001 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Adding node 192.168.44.65:7007 to cluster 192.168.44.65:7001 >>> Performing Cluster Check (using node 192.168.44.65:7001) M: 741c7bb537888ff97866896abb22da27c22f8eaf 192.168.44.65:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 2275c996f25a8815342e2435af073eb29565778b 172.25.0.6:7005 slots: (0 slots) slave replicates 9936d3690d971eccfc8b8ed43c5defc66f318454 M: 9936d3690d971eccfc8b8ed43c5defc66f318454 172.25.0.8:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: f69a5d0ae974816396a9d9e613c13f6ceea25de2 172.25.0.11:7006 slots: (0 slots) slave replicates 741c7bb537888ff97866896abb22da27c22f8eaf S: b7b6fa6a4766c32c5d42d759548d6fcdf2b9159b 172.25.0.9:7004 slots: (0 slots) slave replicates e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 M: e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 172.25.0.7:7002 slots:[5461-10922] (5462 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. >>> Send CLUSTER MEET to node 192.168.44.65:7007 to make it join the cluster. [OK] New node added correctly.
查看刚加的主节点: 127.0.0.1:7001> cluster nodes741c7bb537888ff97866896abb22da27c22f8eaf 172.25.0.10:7001@17001 myself,master - 0 1648104789000 1 connected 0-54602275c996f25a8815342e2435af073eb29565778b 172.25.0.6:7005@17005 slave 9936d3690d971eccfc8b8ed43c5defc66f318454 0 1648104789523 3 connected6f0c7d0ae166717d645e84b48b72b9706c7c758a 172.25.0.13:7007@17007 master - 0 1648104790133 0 connected9936d3690d971eccfc8b8ed43c5defc66f318454 172.25.0.8:7003@17003 master - 0 1648104790546 3 connected 10923-16383f69a5d0ae974816396a9d9e613c13f6ceea25de2 172.25.0.11:7006@17006 slave 741c7bb537888ff97866896abb22da27c22f8eaf 0 1648104790000 1 connectedb7b6fa6a4766c32c5d42d759548d6fcdf2b9159b 172.25.0.9:7004@17004 slave e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 0 1648104790000 2 connectede5f687462a0c47f51c3abf4b8d77d646a3d63fa9 172.25.0.7:7002@17002 master - 0 1648104791062 2 connected 5461-10922
2、添加从节点-- 进入任意节点docker exet -it redis-7001 bash-- 添加从节点(192.168.44.65:7001 -a 123456 这个可以是任何已存在的节点,主要用于获取集群信息)(6f0c7d0ae166717d645e84b48b72b9706c7c758a 为刚加的主节点 id)redis-cli --cluster add-node --cluster-slave --cluster-master-id 6f0c7d0ae166717d645e84b48b72b9706c7c758a 192.168.44.65:7008 192.168.44.65:7001 -a 123456 结果: 127.0.0.1:7001> cluster nodes 741c7bb537888ff97866896abb22da27c22f8eaf 172.25.0.10:7001@17001 myself,master - 0 1648105151000 1 connected 0-5460 2275c996f25a8815342e2435af073eb29565778b 172.25.0.6:7005@17005 slave 9936d3690d971eccfc8b8ed43c5defc66f318454 0 1648105154016 3 connected 6f0c7d0ae166717d645e84b48b72b9706c7c758a 172.25.0.13:7007@17007 master - 0 1648105152000 0 connected 9936d3690d971eccfc8b8ed43c5defc66f318454 172.25.0.8:7003@17003 master - 0 1648105153000 3 connected 10923-16383 f69a5d0ae974816396a9d9e613c13f6ceea25de2 172.25.0.11:7006@17006 slave 741c7bb537888ff97866896abb22da27c22f8eaf 0 1648105152000 1 connected 6478c692a149130d56538aea69b54d2abc1c98b4 172.25.0.12:7008@17008 slave 6f0c7d0ae166717d645e84b48b72b9706c7c758a 0 1648105152000 0 connected b7b6fa6a4766c32c5d42d759548d6fcdf2b9159b 172.25.0.9:7004@17004 slave e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 0 1648105153599 2 connected e5f687462a0c47f51c3abf4b8d77d646a3d63fa9 172.25.0.7:7002@17002 master - 0 1648105153000 2 connected 5461-10922
九、分配插槽刚加入的主从节点还不能使用,因为还没有分配插槽 rebalance平衡集群节点slot数量 语法: rebalance host:port--weight <arg>--auto-weights--threshold <arg>--use-empty-masters--timeout <arg>--simulate--pipeline <arg>host:port:这个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口。--weight <arg>:节点的权重,格式为node_id=weight,如果需要为多个节点分配权重的话,需要添加多个--weight <arg>参数,即--weight b31e3a2e=5 --weight 60b8e3a1=5,node_id可为节点名称的前缀,只要保证前缀位数能唯一区分该节点即可。没有传递 下载地址: Nginx实现Nacos反向代理的项目实践 解决tomcat启动 |