REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
这增加两个节点7004和8004,一个主一个从
mkdir 7004 8004 echo 7004 8004 | xargs -t -n 1 cp redis.conf
修改配置文件
printf '%s\n' 7004 8004 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf
启动新加入的两个节点
printf '%s\n' 7004 8004 | xargs -I{} -t redis-server /root/redis/{}/redis.conf ps -ef | grep redis
将7004加入到集群中去
redis-cli --cluster add-node 192.168.3.22:7004 192.168.3.22:7001 >>> Adding node 192.168.3.22:7004 to cluster 192.168.3.22:7001 >>> Performing Cluster Check (using node 192.168.3.22:7001) M: e332154d4c091ebe757e32931e03d11c3005a342 192.168.3.22:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 431d6bc41d9a105720d338dec227835d556d22b2 192.168.3.22:8003 slots: (0 slots) slave replicates 248616ebb7959cda67dc975282ee81c56eb26d18 M: 454222018bec479ffc33209296287ad95cbd8f30 192.168.3.22:7002 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: c757128a130008a4d92a47322b48ca9745613ecb 192.168.3.22:8002 slots: (0 slots) slave replicates 454222018bec479ffc33209296287ad95cbd8f30 S: 0e4edb04379ca7fd152c89de72229ebb77030673 192.168.3.22:8001 slots: (0 slots) slave replicates e332154d4c091ebe757e32931e03d11c3005a342 M: 248616ebb7959cda67dc975282ee81c56eb26d18 192.168.3.22:7003 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. >>> Send CLUSTER MEET to node 192.168.3.22:7004 to make it join the cluster. [OK] New node added correctly.
查看节点信息
redis-cli -p 7001 cluster nodes 0d6f140607b0b2eedec2b8042c0994ad6d0beb17 192.168.3.22:7004@17004 master - 0 1643114198000 0 connected 431d6bc41d9a105720d338dec227835d556d22b2 192.168.3.22:8003@18003 slave 248616ebb7959cda67dc975282ee81c56eb26d18 0 1643114199542 3 connected e332154d4c091ebe757e32931e03d11c3005a342 192.168.3.22:7001@17001 myself,master - 0 1643114198000 1 connected 0-5460 454222018bec479ffc33209296287ad95cbd8f30 192.168.3.22:7002@17002 master - 0 1643114199000 2 connected 5461-10922 c757128a130008a4d92a47322b48ca9745613ecb 192.168.3.22:8002@18002 slave 454222018bec479ffc33209296287ad95cbd8f30 0 1643114199000 2 connected 0e4edb04379ca7fd152c89de72229ebb77030673 192.168.3.22:8001@18001 slave e332154d4c091ebe757e32931e03d11c3005a342 0 1643114198505 1 connected 248616ebb7959cda67dc975282ee81c56eb26d18 192.168.3.22:7003@17003 master - 0 1643114199644 3 connected 10923-16383
可以看到7004已经成为了master节点,但是注意,此时7004并没有被分配插槽,所以不会被分配数据,使用reshard分配插槽
redis-cli --cluster reshard 192.168.3.22:7001 # 输出内容 How many slots do you want to move (from 1 to 16384)? # 询问要移动多少个插槽,这里移动3000个,输入3000 What is the receiving node ID? # 谁来接收该插槽,这里输入7004的ID(0d6f140607b0b2eedec2b8042c0994ad6d0beb17) 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: # 这里问从哪里作为数据源进行拷贝,这里从7001拷贝,输入7001的ID(e332154d4c091ebe757e32931e03d11c3005a342) Source node #2: # 这里不再从其他节点拷贝了,输入done Do you want to proceed with the proposed reshard plan (yes/no)? # 输入yes即可
再次查看节点信息
redis-cli -p 7001 cluster nodes 0d6f140607b0b2eedec2b8042c0994ad6d0beb17 192.168.3.22:7004@17004 master - 0 1643115501537 7 connected 0-2999 431d6bc41d9a105720d338dec227835d556d22b2 192.168.3.22:8003@18003 slave 248616ebb7959cda67dc975282ee81c56eb26d18 0 1643115501000 3 connected e332154d4c091ebe757e32931e03d11c3005a342 192.168.3.22:7001@17001 myself,master - 0 1643115500000 1 connected 3000-5460 454222018bec479ffc33209296287ad95cbd8f30 192.168.3.22:7002@17002 master - 0 1643115502184 2 connected 5461-10922 c757128a130008a4d92a47322b48ca9745613ecb 192.168.3.22:8002@18002 slave 454222018bec479ffc33209296287ad95cbd8f30 0 1643115500000 2 connected 0e4edb04379ca7fd152c89de72229ebb77030673 192.168.3.22:8001@18001 slave e332154d4c091ebe757e32931e03d11c3005a342 0 1643115501967 1 connected 248616ebb7959cda67dc975282ee81c56eb26d18 192.168.3.22:7003@17003 master - 0 1643115501000 3 connected 10923-16383
可以看到7004已经分配0-2999的插槽。
把8004分配给7004作为从节点
redis-cli --cluster add-node 192.168.3.22:8004 192.168.3.22:7001 --cluster-slave --cluster-master-id 0d6f140607b0b2eedec2b8042c0994ad6d0beb17
删除一个节点
redis-cli --cluster del-node 192.168.3.22:8004 69cdee589bdc6db5af5a0a2545e129bf3d5fd4c2
查看帮助信息
redis-cli --cluster help Cluster Manager Commands: create host1:port1 ... hostN:portN --cluster-replicas <arg> check host:port --cluster-search-multiple-owners info host:port fix host:port --cluster-search-multiple-owners --cluster-fix-with-unreachable-masters reshard host:port --cluster-from <arg> --cluster-to <arg> --cluster-slots <arg> --cluster-yes --cluster-timeout <arg> --cluster-pipeline <arg> --cluster-replace rebalance host:port --cluster-weight <node1=w1...nodeN=wN> --cluster-use-empty-masters --cluster-timeout <arg> --cluster-simulate --cluster-pipeline <arg> --cluster-threshold <arg> --cluster-replace add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id <arg> del-node host:port node_id call host:port command arg arg .. arg --cluster-only-masters --cluster-only-replicas set-timeout host:port milliseconds import host:port --cluster-from <arg> --cluster-from-user <arg> --cluster-from-pass <arg> --cluster-from-askpass --cluster-copy --cluster-replace backup host:port backup_directory help For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster. Cluster Manager Options: --cluster-yes Automatic yes to cluster commands prompts
Java小强
未曾清贫难成人,不经打击老天真。
自古英雄出炼狱,从来富贵入凡尘。
发表评论: