BcLinux-Redis-集群(cluster)安装配置
系统版本信息:
bclinux
IP:192.168.2.23 端口:8001、8002
IP:192.168.2.24 端口:8001、8002
IP:192.168.2.25 端口:8001、8002
1、三个节点同样操作
[root@o-0034 setup]# yum install tcl
或者:
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar xzvf tcl8.6.1-src.tar.gz -C /home/local/
cd /home/local/tcl8.6.1/unix/
./configure
make
make install
[yyxt@o-0034 ~]$ tar -zxvf redis-6.2.7.tar.gz
[yyxt@o-0034 ~]$ cd redis-6.2.7/
[yyxt@o-0034 redis-6.2.7]$ pwd
/home/yyxt/redis-6.2.7
[yyxt@o-0034 redis-6.2.7]$ make
[yyxt@o-0034 redis-6.2.7]$ make test
[yyxt@o-0034 redis-6.2.7]$ make install PREFIX=/home/yyxt/redis_6.2.7
2、配置每个节点
在server-1上:
[root@server-1 redis_6.2.7]# mkdir -p /home/yyxt/redis_6.2.7/redis-cluster/{8001,8002}
[root@server-1 redis_6.2.7]# cp redis.conf /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
[root@server-1 redis_6.2.7]# vim /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
bind 192.168.2.23 #本机IP
port 8001 #改为设定的端口
daemonize yes #后台启动
cluster-enabled yes #启动集群模式
cluster-config-file nodes-8001.conf #集群内部配置文件,改掉端口号
cluster-node-timeout 15000 #节点超时时间,单位:毫秒
protected-mode: #由于配置了密码登录,这里将 protected-mode 设置为 no 关闭保护模式。
requirepass: #表示登录该 Redis 实例所需的密码
masterauth: #由于每个节点都开启了密码认证,因此又增加 masterauth 配置,使得从机可以登录到主机上。
dbfilename dump.rdb #单独配置不要共用rdb
bind 192.168.2.23
port 8001
daemonize yes
masterauth zt123789
requirepass zt123789
cluster-enabled yes
cluster-config-file nodes-8001.conf
cluster-node-timeout 15000
pidfile /home/yyxt/redis_6.2.7/redis_8001.pid
logfile "/home/yyxt/redis_6.2.7/redis_8001.log"
appendonly no
save 900 1
save 300 10
save 60 10000
[root@server-1 redis_6.2.7]# cp redis.conf /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
[root@server-1 redis_6.2.7]# vim /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
bind 192.168.2.23 #本机IP
port 8002 #改为设定的端口
daemonize yes #后台启动
cluster-enabled yes #启动集群模式
cluster-config-file nodes-8002.conf #集群内部配置文件,改掉端口号
cluster-node-timeout 15000 #节点超时时间,单位:毫秒
dbfilename dump_8001.rdb #单独配置不要共用rdb
bind 192.168.2.23
port 8002
daemonize yes
masterauth zt123789
requirepass zt123789
cluster-enabled yes
cluster-config-file nodes-8002.conf
cluster-node-timeout 15000
pidfile /home/yyxt/redis_6.2.7/redis_8002.pid
logfile "/home/yyxt/redis_6.2.7/redis_8002.log"
appendonly no
save 900 1
save 300 10
save 60 10000
dbfilename dump_8001.rdb
在server-2上:
[root@server-1 redis_6.2.7]# mkdir -p /home/yyxt/redis_6.2.7/redis-cluster/{8001,8002}
[root@server-1 redis_6.2.7]# cp redis.conf /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
[root@server-1 redis_6.2.7]# vim /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
bind 192.168.2.24
port 8001
daemonize yes
masterauth zt123789
requirepass zt123789
cluster-enabled yes
cluster-config-file nodes-8001.conf
cluster-node-timeout 15000
pidfile /home/yyxt/redis_6.2.7/redis_8001.pid
logfile "/home/yyxt/redis_6.2.7/redis_8001.log"
appendonly no
save 900 1
save 300 10
save 60 10000
dbfilename dump_8002.rdb
[root@server-1 redis_6.2.7]# cp redis.conf /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
[root@server-1 redis_6.2.7]# vim /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
bind 192.168.2.24
port 8002
daemonize yes
masterauth zt123789
requirepass zt123789
cluster-enabled yes
cluster-config-file nodes-8002.conf
cluster-node-timeout 15000
pidfile /home/yyxt/redis_6.2.7/redis_8002.pid
logfile "/home/yyxt/redis_6.2.7/redis_8002.log"
appendonly no
save 900 1
save 300 10
save 60 10000
dbfilename dump_8002.rdb
在server-3上:
[root@server-1 redis_6.2.7]# mkdir -p /home/yyxt/redis_6.2.7/redis-cluster/{8001,8002} //在/home/yyxt/redis_6.2.7目录下新建一个redis-cluster文件夹,并在里面新建2个文件夹,用来区分节点
[root@server-1 redis_6.2.7]# cp redis.conf /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
[root@server-1 redis_6.2.7]# vim /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf //必要需要修改如下,其他细化优化的配置项可暂时保持默认
bind 192.168.2.25
port 8001
daemonize yes
masterauth zt123789
requirepass zt123789
cluster-enabled yes
cluster-config-file nodes-8001.conf
cluster-node-timeout 15000
pidfile /home/yyxt/redis_6.2.7/redis_8001.pid
logfile "/home/yyxt/redis_6.2.7/redis_8001.log"
appendonly no
save 900 1
save 300 10
save 60 10000
dbfilename dump_8002.rdb
[root@server-1 redis_6.2.7]# cp redis.conf /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
[root@server-1 redis_6.2.7]# vim /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
bind 192.168.2.25
port 8002
daemonize yes
masterauth zt123789
requirepass zt123789
cluster-enabled yes
cluster-config-file nodes-8002.conf
cluster-node-timeout 15000
pidfile /home/yyxt/redis_6.2.7/redis_8002.pid
logfile "/home/yyxt/redis_6.2.7/redis_8002.log"
appendonly no
save 900 1
save 300 10
save 60 10000
dbfilename dump_8002.rdb
[test@localhost ~/redis_6.2.7/bin]$ /home/yyxt/redis_6.2.7/bin/./redis-server
3. 启动每个节点
在server-1上:
[root@server-1 redis_6.2.7]# /home/yyxt/redis_6.2.7/bin/./redis-server /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
[root@server-1 redis_6.2.7]# /home/yyxt/redis_6.2.7/bin/./redis-server /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
在server-2上:
[root@server-2 redis_6.2.7]# /home/yyxt/redis_6.2.7/bin/./redis-server /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
[root@server-2 redis_6.2.7]# /home/yyxt/redis_6.2.7/bin/./redis-server /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
在server-3上:
[root@server-3 redis_6.2.7]# /home/yyxt/redis_6.2.7/bin/./redis-server /home/yyxt/redis_6.2.7/redis-cluster/8001/redis-8001.conf
[root@server-3 redis_6.2.7]# /home/yyxt/redis_6.2.7/bin/./redis-server /home/yyxt/redis_6.2.7/redis-cluster/8002/redis-8002.conf
4. 创建集群
只需要执行一条长命令,如下:
./redis-4.0.1/src/redis-trib.rb create --replicas 1 192.168.1.21:7001 192.168.1.22:7002 192.168.1.23:7003 192.168.1.21:7004 192.168.1.22:7005 192.168.1.23:7006
说明:--replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。
这里因为测试,只用了3台机器,如果部署节点使用不同的IP地址,redis-trib-rb会尽可能保证主从节点不分配在同一台机器下,
因此会重新排序节点表顺序。节点列表顺序用于确定主从角色,先主节点之后是从节点。
创建过程中首先会给出主从节点角色分配的计划,如下图:
最后的输出报告说明:16384个槽全部被分配完,集群创建成功。
这里需要注意给redis-trib.rb的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群。
[test@localhost ~]$ /home/yyxt/redis_6.2.7/bin/./redis-cli --cluster create 192.168.2.23:8001 192.168.2.24:8001 192.168.2.25:8001 192.168.2.23:8002 192.168.2.24:8002 192.168.2.25:8002 --cluster-replicas 1 -a zt123789
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.2.24:8002 to 192.168.2.23:8001
Adding replica 192.168.2.25:8002 to 192.168.2.24:8001
Adding replica 192.168.2.23:8002 to 192.168.2.25:8001
M: 743b4d79c99ed20e07419b760822f08226a8ca96 192.168.2.23:8001
slots:[0-5460] (5461 slots) master
M: 69633d0900375635a34f01e90cb35108d3e3d6d9 192.168.2.24:8001
slots:[5461-10922] (5462 slots) master
M: 0b650cc22e36bc276a6290adee9616bad628eb8f 192.168.2.25:8001
slots:[10923-16383] (5461 slots) master
S: e13b85e73e3af6bd66ae30760d4b0b2713f3c463 192.168.2.23:8002
replicates 0b650cc22e36bc276a6290adee9616bad628eb8f
S: 49d6267795abda7b5a7235ca1127e32049d2779c 192.168.2.24:8002
replicates 743b4d79c99ed20e07419b760822f08226a8ca96
S: 08a93c88eac3c4ffa8237a81b4bb246ebf49cc44 192.168.2.25:8002
replicates 69633d0900375635a34f01e90cb35108d3e3d6d9
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 192.168.2.23:8001)
M: 743b4d79c99ed20e07419b760822f08226a8ca96 192.168.2.23:8001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 49d6267795abda7b5a7235ca1127e32049d2779c 192.168.2.24:8002
slots: (0 slots) slave
replicates 743b4d79c99ed20e07419b760822f08226a8ca96
S: 08a93c88eac3c4ffa8237a81b4bb246ebf49cc44 192.168.2.25:8002
slots: (0 slots) slave
replicates 69633d0900375635a34f01e90cb35108d3e3d6d9
M: 0b650cc22e36bc276a6290adee9616bad628eb8f 192.168.2.25:8001
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: e13b85e73e3af6bd66ae30760d4b0b2713f3c463 192.168.2.23:8002
slots: (0 slots) slave
replicates 0b650cc22e36bc276a6290adee9616bad628eb8f
M: 69633d0900375635a34f01e90cb35108d3e3d6d9 192.168.2.24:8001
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.
[test@localhost ~]$
[test@localhost ~/redis_6.2.7]$ redis-cli -h 192.168.2.24 -p 8001
(error) ERR unknown command `zt123789`, with args beginning with:
192.168.2.24:8001> auth zt123789
OK
192.168.2.24:8001> 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:119
cluster_stats_messages_pong_sent:118
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:238
cluster_stats_messages_ping_received:118
cluster_stats_messages_pong_received:120
cluster_stats_messages_received:238
192.168.2.24:8001>
6. 集群完整性检查
集群完整性指所有的槽都分配到存活的主节点上,只要16384个槽中有一个没有分配给节点则表示集群不完整。
可以用redis-trib.rb check命令检测之前创建的集群是否成功,check命令只需要给出集群中任意一个节点地址就可以
完成整个集群的检查工作,命令使用如下所示:
IP:192.168.2.23
[test@localhost ~/redis_6.2.7]$ redis-cli -h 192.168.2.24 -p 8001
192.168.2.24:8001> zt123789
(error) ERR unknown command `zt123789`, with args beginning with:
192.168.2.24:8001> auth zt123789
OK
192.168.2.24:8001> 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:119
cluster_stats_messages_pong_sent:118
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:238
cluster_stats_messages_ping_received:118
cluster_stats_messages_pong_received:120
cluster_stats_messages_received:238
192.168.2.24:8001>
7、查看集群信息
# 直接查询,任意节点
[test@localhost ~/redis_6.2.7]$ redis-cli -h 192.168.2.24 -p 8001
192.168.2.24:8001> zt123789
(error) ERR unknown command `zt123789`, with args beginning with:
192.168.2.24:8001> auth zt123789
OK
192.168.2.24:8001> 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:119
cluster_stats_messages_pong_sent:118
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:238
cluster_stats_messages_ping_received:118
cluster_stats_messages_pong_received:120
cluster_stats_messages_received:238
192.168.2.24:8001> quit
8、集群常用命令
# 进入集群
[test@localhost ~/redis_6.2.7]$ redis-cli --cluster info -h 192.168.2.24 -p 8001
[ERR] Wrong number of arguments for specified --cluster sub command
[test@localhost ~/redis_6.2.7]$ redis-cli -h 192.168.2.24 -p 8001 -c -a zt123789
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.2.24:8001> 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:627
cluster_stats_messages_pong_sent:584
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:1212
cluster_stats_messages_ping_received:584
cluster_stats_messages_pong_received:628
cluster_stats_messages_received:1212
192.168.2.24:8001>
# -c 表示集群支持,支持自动重定向 myredis表示密码
#进入后即可使用相关命令
集群(cluster): CLUSTER INFO # 查看集群信息 CLUSTER NODES # 查看集群所有节点信息
192.168.2.24:8001> 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:627
cluster_stats_messages_pong_sent:584
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:1212
cluster_stats_messages_ping_received:584
cluster_stats_messages_pong_received:628
cluster_stats_messages_received:1212
192.168.2.24:8001> CLUSTER NODES
e3df642f88a85663ad621374cf92161ee95b0c1f 192.168.2.25:8002@18002 slave c2592dd2dd102515a2592368e4a172ee834dd56d 0 1710169952000 2 connected
61781a535d89518171dad34c2b73e5bf7c362852 192.168.2.25:8001@18001 master - 0 1710169953166 3 connected 10923-16383
c2592dd2dd102515a2592368e4a172ee834dd56d 192.168.2.24:8001@18001 myself,master - 0 1710169951000 2 connected 5461-10922
308f32fe43988cae664f953b6d072c77209d5f1f 192.168.2.24:8002@18002 slave 4ec8059cc336222dc6805c9e03913c9a5a6c1a82 0 1710169952164 1 connected
175116147c09c0e9035288d37d19203587ffc14d 192.168.2.23:8002@18002 slave 61781a535d89518171dad34c2b73e5bf7c362852 0 1710169949000 3 connected
4ec8059cc336222dc6805c9e03913c9a5a6c1a82 192.168.2.23:8001@18001 master - 0 1710169951161 1 connected 0-5460
192.168.2.24:8001>
节点(node):
CLUSTER MEET IP PORT 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面
9、cluster重新创建
关闭所有已启动的redis节点
删除集群相关文件(在设置数据存储目录dir目录下) 删除每个节点下的appendonlydir 、dump.rdb和nodes.conf文件
启动所有Redis节点
10、重新创建cluster集群
redis-cli.exe --cluster create --cluster-replicas 1 10.41.170.30:6381 10.41.170.40:6381 10.41.170.130:6381 10.41.170.30:6382 10.41.170.40:6382 10.41.170.130:6382
若是创建失败,提示:
11、访问集群:
redis-cli -h 192.168.2.24 -p 8001 -c -a zt123789
或者
redis-cli -c -a qaz@123 -h 11.11.11.160 -p 6379
注:-c 以集群方式登陆,cluster。-a 密码,authority
12、关闭集群
关闭集群则需要逐个进行关闭,使用命令:
redis-cli -a qaz@123 -c -h 11.11.11.160 -p 6379 shutdown
13、手动管理redis集群
3、将 ip 和 port 所指定的节点添加到集群中
CLUSTER MEET <ip> <port>
4、从集群中移除 node_id 指定的节点
CLUSTER FORGET <node_id>
5、将当前节点设置为 node_id 指定的节点的从节点
CLUSTER REPLICATE <node_id>
6、将节点的配置文件保存到硬盘里面
CLUSTER SAVECONFIG
7、将一个或多个槽(slot)指派(assign)给当前节点
CLUSTER ADDSLOTS <slot> [slot ...]
8、移除一个或多个槽对当前节点的指派
CLUSTER DELSLOTS <slot> [slot ...]
9、 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
CLUSTER FLUSHSLOTS
10、将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派
CLUSTER SETSLOT <slot> NODE <node_id>
11、将本节点的槽 slot 迁移到 node_id 指定的节点中
CLUSTER SETSLOT <slot> MIGRATING <node_id>
12、从 node_id 指定的节点中导入槽 slot 到本节点
CLUSTER SETSLOT <slot> IMPORTING <node_id>
13、取消对槽 slot 的导入(import)或者迁移(migrate)
CLUSTER SETSLOT <slot> STABLE
14、计算键 key 应该被放置在哪个槽上
CLUSTER KEYSLOT <key>
15、返回槽 slot 目前包含的键值对数量
CLUSTER COUNTKEYSINSLOT <slot>
16、返回 count 个 slot 槽中的键
CLUSTER GETKEYSINSLOT <slot> <count>
17、数据验证:
IP:192.168.2.23
[test@localhost ~]$ redis-cli -h 192.168.2.23 -p 8001 -c -a zt123789
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.2.23:8001> 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:7045
cluster_stats_messages_pong_sent:6806
cluster_stats_messages_sent:13851
cluster_stats_messages_ping_received:6801
cluster_stats_messages_pong_received:7045
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:13851
192.168.2.23:8001> cluster nodes
c2592dd2dd102515a2592368e4a172ee834dd56d 192.168.2.24:8001@18001 master - 0 1710176098512 2 connected 5461-10922
4ec8059cc336222dc6805c9e03913c9a5a6c1a82 192.168.2.23:8001@18001 myself,master - 0 1710176093000 1 connected 0-5460
e3df642f88a85663ad621374cf92161ee95b0c1f 192.168.2.25:8002@18002 slave c2592dd2dd102515a2592368e4a172ee834dd56d 0 1710176095502 2 connected
308f32fe43988cae664f953b6d072c77209d5f1f 192.168.2.24:8002@18002 slave 4ec8059cc336222dc6805c9e03913c9a5a6c1a82 0 1710176097508 1 connected
175116147c09c0e9035288d37d19203587ffc14d 192.168.2.23:8002@18002 slave 61781a535d89518171dad34c2b73e5bf7c362852 0 1710176094498 3 connected
61781a535d89518171dad34c2b73e5bf7c362852 192.168.2.25:8001@18001 master - 0 1710176096505 3 connected 10923-16383
192.168.2.23:8001> ping
PONG
192.168.2.23:8001> set user zkm
-> Redirected to slot [5474] located at 192.168.2.24:8001
OK
192.168.2.24:8001> keys *
1) "user"
192.168.2.24:8001> get user
"zkm"
IP:192.168.2.24
[test@localhost ~]$ redis-cli -h 192.168.2.24 -p 8001 -c -a zt123789
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.2.24:8001> keys *
1) "user"
192.168.2.24:8001> get user
"zkm"
192.168.2.24:8001>

浙公网安备 33010602011771号