创建集群

集群环境

拓扑结构

IP规划

工作原理


工作原理

  • 无论有多少台redis服务器,一共都会有0-16383共16384个槽
  • slot的作用:用来确定存储变量时,变量存储在哪一台redis服务器上的
  • 存取数据的过程:变量名与内置的crc16算法做一个hash计算,得到的数字再与16384进行取余,根据余数的结果确定在哪一台服务器节点
  • 0-5460
  • 5461-10922
  • 10923-16383
  • 能够存多少变量取决于本机的内存的大小

创建集群

  • 环境准备

=========================================1.确保每一台redis都是空的,由于前次试验在host51上操作,所以先将host51还原至空的状态,一定要保证redis是空的状态!!![root@host51 ~]# /etc/init.d/redis_6379  stop
Stopping ...
Redis stopped
[root@host51 ~]# vim /etc/redis/6379.conf   #将第501行注释掉,不使用密码登录501 #requirepass 123456
[root@host51 ~]# /etc/init.d/redis_6379  start
Starting Redis server...
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351
192.168.4.51:6351> exit#######################
如果此时重启报错,可能是pid冲突,可以进行如下操作
[root@host51 ~]# /etc/init.d/redis_6379  start
/var/run/redis_6379.pid exists, process is already running or crashed
[root@host51 ~]# rm  -rf  /var/run/redis_6379.pid
[root@host51 ~]# /etc/init.d/redis_6379   start
Starting Redis server...
#######################******************************2.接下来在host52-56主机分别准备好redis服务器,我们可以写一些简单的不能再简单的脚本,以host52主机为例[root@host52 ~]#  cd  /opt
[root@host52 opt]#   for i in 53 54 55 56
> do
> scp /opt/redis-4.0.8.tar.gz   root@192.168.4.$i:/opt
> done[root@host52 opt]#  vim redis.sh
#!/bin/bash
yum  -y  install  gcc                #下载依赖包
tar  -zxvf  redis-4.0.8.tar.gz    #解压缩
cd redis-4.0.8/
make && make install            #编译安装./utils/install_server.sh          [root@host52 opt]#  for i in 52 53 54 55 56
>do
>scp /opt/redis.sh  root@192.168.4.$i:/opt
>done[root@host52 opt]# bash redis.sh
[root@host52 opt]#ss  -nutlp |  grep 6379
[root@host52 opt]#/etc/init.d/redis_6379   stop    #停止服务
[root@host52 opt]#vim +70 /etc/redis/6379.conf      #修改IP地址70 bind 192.168.4.52
[root@host52 opt]#vim +93 /etc/redis/6379.conf    #将端口号改为635293 port 6352
[root@host52 opt]#/etc/init.d/redis_6379   start    #起服务
[root@host52 opt]#redis-cli  -p 6352  -h 192.168.4.52
*****
检查准备工作:
[root@host51 ~]# ss  -nutlp |  grep 6351
tcp    LISTEN     0      128    192.168.4.51:6351                  *:*                   users:(("redis-server",pid=1841,fd=6))
[root@host52 opt]# ss  -nutlp |  grep 6352
tcp    LISTEN     0      128    127.0.0.1:6352                  *:*                   users:(("redis-server",pid=4753,fd=6))
[root@host53 opt]# ss  -nutlp |  grep 6353
tcp    LISTEN     0      128    127.0.0.1:6353                  *:*                   users:(("redis-server",pid=4721,fd=6))
[root@host54 opt]# ss  -nutlp |  grep 6354
tcp    LISTEN     0      128    127.0.0.1:6354                  *:*                   users:(("redis-server",pid=4722,fd=6))
[root@host55 opt]# ss  -nutlp |  grep 6355
tcp    LISTEN     0      128    127.0.0.1:6355                  *:*                   users:(("redis-server",pid=4749,fd=6))
[root@host56 opt]# ss  -nutlp |  grep 6356
tcp    LISTEN     0      128    127.0.0.1:6356                  *:*                   users:(("redis-server",pid=4710,fd=6))每台redis服务器都必须是空的

redis-trib脚本

  • 用法:
  • [root@host57 ~]# redis-trib.rb <arguments…>
命令 描述
create 创建集群
check 检查集群
info 查看集群信息
reshard 重新分片
del-node 删除主机
add-node --slave 添加slave主机
add-node 添加master主机
rebalance 平均分配hash slots
  • 创建集群
===============================================1.配置管理主机host57,也可以部署在任意一台redis服务器上
[root@host57 opt]# rpm  -q  ruby
未安装软件包 ruby
[root@host57 opt]# which gem
/usr/bin/which: no gem in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@host57 opt]# yum  -y  install  rubygems  ruby
[root@host57 opt]# lsredis-4.0.8.tar.gz   redis-3.2.1.gem
[root@host57 opt]# gem  install  redis-3.2.1.gem
Successfully installed redis-3.2.1
Parsing documentation for redis-3.2.1
Installing ri documentation for redis-3.2.1
1 gem installed[root@host57 opt]# tar  -zvxf redis-4.0.8.tar.gz
[root@host57 opt]# cd redis-4.0.8/
[root@host57 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@host57 redis-4.0.8]# ls src/*.rb     #ruby脚本
src/redis-trib.rb
[root@host57 redis-4.0.8]# echo $PATH    #查看当前变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@host57 redis-4.0.8]# mkdir  /root/bin    #创建命令检索目录
[root@host57 redis-4.0.8]# cp src/redis-trib.rb   /root/bin     #创建管理集群脚本
[root@host57 redis-4.0.8]# chmod  +x  /root/bin/redis-trib.rb
[root@host57 redis-4.0.8]# redis-trib.rb  help   #查看命令帮助
[root@host57 redis-4.0.8]# redis-trib.rb   help
Usage: redis-trib <command> <options> <arguments ...>create          host1:port1 ... hostN:portN--replicas <arg>check           host:portinfo            host:portfix             host:port--timeout <arg>reshard         host:port--from <arg>--to <arg>--slots <arg>--yes--timeout <arg>--pipeline <arg>rebalance       host:port--weight <arg>--auto-weights--use-empty-masters--timeout <arg>--simulate--pipeline <arg>--threshold <arg>add-node        new_host:new_port existing_host:existing_port--slave--master-id <arg>del-node        host:port node_idset-timeout     host:port millisecondscall            host:port command arg arg .. argimport          host:port--from <arg>--copy--replacehelp            (show this help)For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.*************************************2.开启集群,以host51为例,每台redis集群都要做
[root@host51 ~]# redis-cli  -h 192.168.4.51  -p 6351
192.168.4.51:6351> cluster info
ERR This instance has cluster support disabled    #此时会报错,因为没有配置集群功能[root@host51 ~]# vim  +815  /etc/redis/6379.conf 815 cluster-enabled yes       #启用集群功能823 cluster-config-file nodes-6379.conf     #存储集群信息的配置文件829 cluster-node-timeout 5000          #集群节点的通信超时时间[root@host51 ~]# rm  -rf  /var/lib/redis/6379/*       #清空数据
[root@host51 ~]# vim  +43 /etc/init.d/redis_6379
$CLIEXEC -h 192.168.4.51 -p 6351 shutdown
:wq
[root@host51 ~]# /etc/init.d/redis_6379 start
Starting Redis server..[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351
192.168.4.51:6351> cluster info      #查看集群信息,此时没有将其他主机加入集群,所以查看集群状态是fail
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0
[root@host51 ~]# netstat  -nutlp  |  grep  redis-server
tcp        0      0 192.168.4.51:16351      0.0.0.0:*               LISTEN      1964/redis-server 1
tcp        0      0 192.168.4.51:6351       0.0.0.0:*               LISTEN      1964/redis-server 1
#16351为集群通信端口,默认端口服务+10000---------------------------------------------------------------
或者也可以写个脚本
[root@host51 ~]# vim redis2.sh
#!/bin/bash
sed -i '815s/# //' /etc/redis/6379.conf
sed -i '823s/# //' /etc/redis/6379.conf
sed -i '829s/# //' /etc/redis/6379.conf
sed -i '829s/15000/5000/' /etc/redis/6379.conf
redis-cli -h 192.168.4.$1 -p 63$1 shutdown
/etc/init.d/redis_6379 start
netstat -antulp | grep redis-server
-----------------------------------------------------------------
#########
如果查不到pid号,可以进行如下操作
[root@host51 ~]# ls /var/run/
auditd.pid   dbus             initramfs    mysqld          setrans      tuned
chrony       dmeventd-client  lock         netreport       sshd.pid     udev
chronyd.pid  dmeventd-server  log          NetworkManager  sudo         user
console      ebtables.lock    lvm          plymouth        syslogd.pid  utmp
crond.pid    faillock         lvmetad.pid  redis_6379.pid  systemd      vmware
cron.reboot  firewalld        mount        sepermit        tmpfiles.d   xtables.lock[root@host51 ~]# netstat  -nutlp | grep 6351    #查找pid号
tcp        0      0 192.168.4.51:16351      0.0.0.0:*               LISTEN      1964/redis-server 1
tcp        0      0 192.168.4.51:6351       0.0.0.0:*               LISTEN      1964/redis-server 1
[root@host51 ~]# ls /proc  |  grep  1964     #pid号文件在这里
1964
或者先停止redis服务,再重新启动
[root@host51 ~]# redis-cli -h 192.168.4.51  -p 6351  shutdown
[root@host51 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351########****************************************3.在管理主机57创建集群(记得关防火墙)[root@host57 ~]# redis-trib.rb  create  --replicas 1 192.168.4.51:6351   192.168.4.52:6352  192.168.4.53:6353  192.168.4.54:6354  192.168.4.55:6355  192.168.4.56:6356
#replicas 1,定义从服务器个数,给每台主服务器配置一台从服务器,加入后面写3,则要准备12台redis服务器才可以
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:      #选举出三个主服务器
192.168.4.51:6351
192.168.4.52:6352
192.168.4.53:6353
Adding replica 192.168.4.55:6355 to 192.168.4.51:6351
Adding replica 192.168.4.56:6356 to 192.168.4.52:6352
Adding replica 192.168.4.54:6354 to 192.168.4.53:6353
M: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351    #M代表主服务器slots:0-5460 (5461 slots) master
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:5461-10922 (5462 slots) master
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:10923-16383 (5461 slots) master
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354   #S代表从服务器,replicates代表4.54的主服务器是以ce822为结尾的主服务器replicates 7747411ab79e16a5493e66d4a46515bd110ce822
S: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355replicates 25991ad67a2e5b7c570ca87eed3140432cc78eee
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356replicates 23b46dfa5997798b02837b365122d0315a48a84e
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.4.51:6351)
M: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351slots:0-5460 (5461 slots) master1 additional replica(s)
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots: (0 slots) slavereplicates 25991ad67a2e5b7c570ca87eed3140432cc78eee
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:10923-16383 (5461 slots) master1 additional replica(s)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:5461-10922 (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.    #共占用了16384个hash槽,从服务器不占用槽,主服务器写入数据,从服务器自动同步*********************************************
4.在任意一台redis服务器本机,查看集群信息
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351
192.168.4.51:6351> cluster info        #查看集群信息
cluster_state:ok     #代表51本机已经在集群中
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6    #集群中有6台主机
cluster_size:3           #有三台主服务器
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:487
cluster_stats_messages_pong_sent:587
cluster_stats_messages_sent:1074
cluster_stats_messages_ping_received:582
cluster_stats_messages_pong_received:487
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1074
查看集群中的节点信息成员列表
192.168.4.51:6351> cluster nodes   #查看集群节点信息,带myself字样是本机自己
8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354@16354 slave 7747411ab79e16a5493e66d4a46515bd110ce822 0 1582890996432 4 connected
75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356@16356 slave 23b46dfa5997798b02837b365122d0315a48a84e 0 1582890997000 6 connected
b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355@16355 slave 25991ad67a2e5b7c570ca87eed3140432cc78eee 0 1582890998000 5 connected
7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353@16353 master - 0 1582890998449 3 connected 10923-16383
25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351@16351 myself,master - 0 1582890998000 1 connected 0-5460
23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352@16352 master - 0 1582890997442 2 connected 5461-10922[root@host51 ~]# cat  /var/lib/redis/6379/nodes-6379.conf   #存储集群信息的配置文件,在Redis中查看成员列表调用的就是该文件
8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354@16354 slave 7747411ab79e16a5493e66d4a46515bd110ce822 0 1582890552000 4 connected
75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356@16356 slave 23b46dfa5997798b02837b365122d0315a48a84e 0 1582890552000 6 connected
b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355@16355 slave 25991ad67a2e5b7c570ca87eed3140432cc78eee 0 1582890551442 5 connected
7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353@16353 master - 0 1582890552550 3 connected 10923-16383
25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351@16351 myself,master - 0 1582890551000 1 connected 0-5460
23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352@16352 master - 0 1582890552450 2 connected 5461-10922
vars currentEpoch 6 lastVoteEpoch 0在管理主机上查看集群统计信息
[root@host57 ~]# redis-trib.rb   info 192.168.4.51:6351
192.168.4.51:6351 (25991ad6...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.52:6352 (23b46dfa...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.在管理主机上看集群的详细信息[root@host57 ~]# redis-trib.rb   check 192.168.4.51:6351
>>> Performing Cluster Check (using node 192.168.4.51:6351)
M: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351slots:0-5460 (5461 slots) master1 additional replica(s)
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots: (0 slots) slavereplicates 25991ad67a2e5b7c570ca87eed3140432cc78eee
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:10923-16383 (5461 slots) master1 additional replica(s)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:5461-10922 (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
如果主服务器坏了,那么对应的从服务器就会自动变成主
*****************************************************还原操作                                              在每一台redis服务器上作如下操作:
1)停止redis服务
2)清空数据库目录  rm  -rf /var/lib/redis/6379/*
3)检查集群功能是否能启用
4)启动redis服务
5)查看端口,进程
6)在管理主机上创建集群
*****************************************************5.访问集群
在客户端可以连接集群中任意一台redis服务器,也可以在redis服务器本机访问
在任意一台redis服务器上写数据,数据都会存入相应的hash槽内,这就是分片式存储
[root@host51 ~]# redis-cli  -c -h  192.168.4.56  -p 6356    #在51主机访问56主机的redis服务
192.168.4.56:6356> keys  *
(empty list or set)
192.168.4.56:6356> set  a  456                     #在56服务器存入变量a,发现数据存到了53的服务器上,因为redis高可用集群会自动寻找hash值对应的槽,然后放入对应的服务器中
-> Redirected to slot [15495] located at 192.168.4.53:6353
OK
192.168.4.53:6353> keys *       #此时就会发现在53服务器上出现刚刚存入的变量,而根据redis集群信息查看,54主机是53主机的从服务器,所以此时,54主机也应该会有该数据
1) "a"
192.168.4.53:6353> exit
[root@host51 ~]# redis-cli  -c -h  192.168.4.54  -p 6354    #登录到54的服务器
192.168.4.54:6354> keys *          #查看,确有刚刚存入的新数据
1) "a"
192.168.4.54:6354> set  b 784      #再次赋新的变量,会对应存入相应的hash槽
-> Redirected to slot [3300] located at 192.168.4.51:6351
OK
192.168.4.51:6351> exit
[root@host51 ~]# redis-cli  -c -h  192.168.4.55  -p 6355
192.168.4.55:6355> keys *           #55主机是51主机的从服务器,此时存入51主机的数据会自动同步至55主机
1) "b"
192.168.4.55:6355> set x 23     #存数据时不能mset存多个,因为会找不到hash值对应的槽位
-> Redirected to slot [16287] located at 192.168.4.53:6353
OK
192.168.4.53:6353> keys  *
1) "a"
2) "x"
192.168.4.53:6353> get b             #此时,如果取一个不属于当前主机的数据,也一举可以取到
-> Redirected to slot [3300] located at 192.168.4.51:6351
"784"
192.168.4.51:6351>

管理集群

  • 测试管理集群功能
1.故障切换测试
先查看当前集群中的主服务器
[root@host57 ~]# redis-trib.rb   info 192.168.4.51:6351
192.168.4.51:6351 (25991ad6...) -> 1 keys | 5461 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 2 keys | 5461 slots | 1 slaves.
192.168.4.52:6352 (23b46dfa...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.[root@host57 ~]# redis-trib.rb   check 192.168.4.51:6351
>>> Performing Cluster Check (using node 192.168.4.51:6351)
M: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351slots:0-5460 (5461 slots) master1 additional replica(s)
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:10923-16383 (5461 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:5461-10922 (5462 slots) master1 additional replica(s)
S: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots: (0 slots) slavereplicates 25991ad67a2e5b7c570ca87eed3140432cc78eee
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.-----------------------------------------------------------------------停止master主机的redis服务,master宕机后对应的slave自动被选举为master;
[root@host51 ~]# ss  -nutlp | grep 6351
tcp    LISTEN     0      128    192.168.4.51:16351                 *:*                   users:(("redis-server",pid=1099,fd=8))
tcp    LISTEN     0      128    192.168.4.51:6351                  *:*                   users:(("redis-server",pid=1099,fd=6))[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351  shutdown    #把51主机的服务停掉,根据集群详细信息知道,55主机是51主机的从服务器,那么此时51主机挂掉,55主机就会自动变为主服务器
[root@host51 ~]# ss  -nutlp  |  grep 6351[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352      #此时55主机变成了主,并且没有从服务器
192.168.4.52:6352 (23b46dfa...) -> 0 keys | 5462 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 1 keys | 5461 slots | 0 slaves.
192.168.4.53:6353 (7747411a...) -> 2 keys | 5461 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.在客户端连接任意一台55主机写入数据
[root@host56 ~]# redis-cli  -c  -h 192.168.4.55  -p 6355
192.168.4.55:6355> set ar 66
-> Redirected to slot [9934] located at 192.168.4.52:6352
OK
192.168.4.52:6352> set kk 4444
-> Redirected to slot [2589] located at 192.168.4.55:6355
OK
192.168.4.55:6355> keys  *
1) "kk"
2) "b"
192.168.4.55:6355> set  pp 4575
-> Redirected to slot [14030] located at 192.168.4.53:6353
OK
192.168.4.53:6353> keys  *
1) "a"
2) "pp"
3) "x"
192.168.4.53:6353> set  ii 11123
-> Redirected to slot [3133] located at 192.168.4.55:6355
OK
192.168.4.55:6355> keys  *     #可以看到55主机多了两个变量
1) "ii"
2) "kk"
3) "b"-------------------------------------------------------------------------源master启动后,会自动配置为当前master的slave;
[root@host51 ~]# /etc/init.d/redis_6379   start
Starting Redis server...
[root@host51 ~]# ss  -nutlp |  grep 6351
tcp    LISTEN     0      128    192.168.4.51:16351                 *:*                   users:(("redis-server",pid=1748,fd=8))
tcp    LISTEN     0      128    192.168.4.51:6351                  *:*                   users:(("redis-server",pid=1748,fd=6))[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352   #此时可以看到,55主机有了从服务器
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 5462 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 5461 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 5461 slots | 1 slaves.
[OK] 7 keys in 3 masters.
0.00 keys per slot on average.[root@host57 ~]# redis-trib.rb   check 192.168.4.52:6352   #check检查发现,51主机变成了55主机的从
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:5461-10922 (5462 slots) master1 additional replica(s)
M: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots:0-5460 (5461 slots) master1 additional replica(s)
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:10923-16383 (5461 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351slots: (0 slots) slavereplicates b69bbe093c47927c88fa3eaf10cce898e4593cc5
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.连接51主机的服务器,会发现,在55主机上写入的数据自动同步到了51主机上
[root@host51 ~]# redis-cli  -c  -h 192.168.4.51 -p 6351
192.168.4.51:6351> keys  *
1) "b"
2) "kk"
3) "ii"用Redis集群存取数据时一定要确保每组主从服务器至少有一个是活着的,否则整个集群都会崩溃
  • 添加服务器

存储空间不足,或者当前已有的服务器处理不了客户并发访问量时,可以添加新的服务器到集群中

1.添加master服务器
1)部署一台新redis服务器host58,运行服务并启用集群配置
[root@host58 opt]# ls  /optredis-4.0.8.tar.gz
[root@host58 opt]# yum  -y  install gcc    #先安装gcc依赖
[root@host58 opt]#tar -zvxf   redis-4.0.8.tar.gz
[root@host58 opt]#cd redis-4.0.8/
[root@host58 redis-4.0.8]#make  &&  make  install
[root@host58 redis-4.0.8]# ./utils/install_server.sh  #一路回车
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
[root@host58 redis-4.0.8]# /etc/init.d/redis_6379   stop
Stopping ...
Redis stopped[root@host58 redis-4.0.8]# vim  /etc/redis/6379.conf 70 bind 192.168.4.5893 port 6358815 cluster-enabled yes         #启用集群823 cluster-config-file nodes-6379.conf      #存储集群信息文件829 cluster-node-timeout 5000[root@host58 redis-4.0.8]# /etc/init.d/redis_6379 start           #起服务
Starting Redis server...
[root@host58 redis-4.0.8]# ss  -nutlp |  grep 6358
tcp    LISTEN     0      128    192.168.4.58:16358                 *:*                   users:(("redis-server",pid=4940,fd=8))
tcp    LISTEN     0      128    192.168.4.58:6358                  *:*                   users:(("redis-server",pid=4940,fd=6))
[root@host58 redis-4.0.8]# redis-cli  -h 192.168.4.58  -p 6358
192.168.4.58:6358> ping
PONG
192.168.4.58:6358> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0
192.168.4.58:6358> exit2)在管理主机57,执行添加新服务的操作,添加master主机,分配hash槽(slots)[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352    #先查看当前的主服务器
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 5462 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 5461 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 5461 slots | 1 slaves.
[OK] 7 keys in 3 masters.[root@host57 ~]# redis-trib.rb  add-node 192.168.4.58:6358  192.168.4.52:6352  #添加新的集群节点
[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352   #查看集群信息,58主机成功添加为主服务器,但没有hash slots槽
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 5462 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 5461 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 5461 slots | 1 slaves.
192.168.4.58:6358 (5e0d1807...) -> 0 keys | 0 slots | 0 slaves.
[OK] 7 keys in 4 masters.
0.00 keys per slot on average.3)重新分片(hash slot)[root@host57 ~]# redis-trib.rb  reshard  192.168.4.52:6352        #重新分片
...
How many slots do you want to move (from 1 to 16384)?  4096             #移出hash槽个数,拿出4096个hash槽给主机58
What is the receiving node ID? 5e0d18070c3fecdfcb3d560e4550f200ab8e0d58   #接收hash槽主机IDType 'all' to use all the nodes as source nodes for the hash slots.  #键入“all”将所有节点用作hash槽的源节点。Type 'done' once you entered all the source nodes IDs.   #输入所有源节点ID后,键入“done”。   Source node #1: all    #移出hash槽主机ID,从所有主服务器移除slotsDo you want to proceed with the proposed reshard plan (yes/no)?  yes     #同意配置否[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352            #查看集群信息
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (5e0d1807...) -> 0 keys | 4096 slots | 0 slaves.                #主服务器58hash槽4096个
[OK] 7 keys in 4 masters.
0.00 keys per slot on average.[root@host57 ~]# redis-trib.rb  check  192.168.4.52:6352           #检测集群
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:0-1365,8193-10922 (4096 slots) master1 additional replica(s)
M: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots:1366-5461 (4096 slots) master1 additional replica(s)
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:5462-6826,13653-16383 (4096 slots) master1 additional replica(s)
M: 5e0d18070c3fecdfcb3d560e4550f200ab8e0d58 192.168.4.58:6358slots:6827-8192,10923-13652 (4096 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351slots: (0 slots) slavereplicates b69bbe093c47927c88fa3eaf10cce898e4593cc5
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.-------------------------------------------------------------------------2.添加slave角色主机到集群里
1)部署新的redis服务器192.168.4.59,运行redis服务,启用集群功能
[root@host59 opt]# ls
redis-4.0.8.tar.gz
[root@host59 opt]# yum  -y  install  gcc
[root@host59 opt]# tar  -zvxf  redis-4.0.8.tar.gz
[root@host59 opt]# cd redis-4.0.8/
[root@host59 redis-4.0.8]# make  &&  make  install  &&  ./utils/install_server.sh
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
[root@host59 redis-4.0.8]# /etc/init.d/redis_6379  stop
Stopping ...
Redis stopped[root@host59 redis-4.0.8]# vim  /etc/redis/6379.conf 70 bind 192.168.4.5993 port 6359815 cluster-enabled yes        #启用集群823 cluster-config-file nodes-6379.conf    #存储集群信息文件829 cluster-node-timeout 5000
[root@host59 redis-4.0.8]# /etc/init.d/redis_6379  start
Starting Redis server...
[root@host59 redis-4.0.8]# ss  -nutlp |  grep 6359
tcp    LISTEN     0      128    192.168.4.59:16359                 *:*                   users:(("redis-server",pid=14657,fd=8))
tcp    LISTEN     0      128    192.168.4.59:6359                  *:*                   users:(("redis-server",pid=14657,fd=6))[root@host59 redis-4.0.8]# redis-cli  -h 192.168.4.59  -p 6359
192.168.4.59:6359> ping
PONG
192.168.4.59:6359> cluster  info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:02)在管理主机添加slave角色主机
[root@host57 ~]# redis-trib.rb  add-node --slave 192.168.4.59:6359  192.168.4.58:6358
#如果不指定主节点的id的话,会把新节点随机添加为从节点最少的主库
[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352           #查看信息
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (5e0d1807...) -> 0 keys | 4096 slots | 1 slaves.           #58主机有一个从服务器
[OK] 7 keys in 4 masters.
0.00 keys per slot on average.[root@host57 ~]# redis-trib.rb  check  192.168.4.52:6352             #检测集群
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:0-1365,8193-10922 (4096 slots) master1 additional replica(s)
M: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots:1366-5461 (4096 slots) master1 additional replica(s)
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:5462-6826,13653-16383 (4096 slots) master1 additional replica(s)
M: 5e0d18070c3fecdfcb3d560e4550f200ab8e0d58 192.168.4.58:6358slots:6827-8192,10923-13652 (4096 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: a33e7cd079dceefb8d8fc699947e9d17a114515e 192.168.4.59:6359slots: (0 slots) slavereplicates 5e0d18070c3fecdfcb3d560e4550f200ab8e0d58
S: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351slots: (0 slots) slavereplicates b69bbe093c47927c88fa3eaf10cce898e4593cc5
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.如果reshard分配不平均的话,可以执行以下操作:
[root@host57 ~]# redis-trib.rb   rebalance  192.168.4.52:6352
  • 移出服务器
1)移除slave主机
从服务器没有hash槽,直接移除即可,一出事指定从服务器id值
[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352   #先查看当前集群中的主服务器
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (5e0d1807...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 7 keys in 4 masters.
0.00 keys per slot on average.
[root@host57 ~]# redis-trib.rb  check  192.168.4.52:6352   #查看主服务器对应的从服务器
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:0-1365,8193-10922 (4096 slots) master1 additional replica(s)
M: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots:1366-5461 (4096 slots) master1 additional replica(s)
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:5462-6826,13653-16383 (4096 slots) master1 additional replica(s)
M: 5e0d18070c3fecdfcb3d560e4550f200ab8e0d58 192.168.4.58:6358slots:6827-8192,10923-13652 (4096 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: a33e7cd079dceefb8d8fc699947e9d17a114515e 192.168.4.59:6359slots: (0 slots) slavereplicates 5e0d18070c3fecdfcb3d560e4550f200ab8e0d58
S: 25991ad67a2e5b7c570ca87eed3140432cc78eee 192.168.4.51:6351slots: (0 slots) slavereplicates b69bbe093c47927c88fa3eaf10cce898e4593cc5
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.[root@host57 ~]# redis-trib.rb   del-node  192.168.4.52:6352  25991ad67a2e5b7c570ca87eed3140432cc78eee       #将51主机移除
>>> Removing node 25991ad67a2e5b7c570ca87eed3140432cc78eee from cluster 192.168.4.52:6352
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.     #注:移除时也会同时将该主机的redis服务关闭
[root@host51 ~]# netstat  -nutlp |  grep  redis-server   #此时去51主机查看没有服务端口,再次开启服务也不会再存在于集群中
[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352   #可以看到55主机没有从服务器了
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 4096 slots | 0 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (5e0d1807...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 7 keys in 4 masters.
0.00 keys per slot on average.
[root@host51 ~]# /etc/init.d/redis_6379  start
Starting Redis server...
[root@host57 ~]# redis-trib.rb   info 192.168.4.52:6352   #再次重新开启服务后,55主机依旧没有从服务器
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 4096 slots | 0 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (5e0d1807...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 7 keys in 4 masters.
0.00 keys per slot on average.2)把master服务器移除集群
①在管理主机,先删除master服务器占用的hash槽
[root@host57 ~]# redis-trib.rb  reshard  192.168.4.52:6352
How many slots do you want to move (from 1 to 16384)? 4096   #移除4096个数槽
What is the receiving node ID? b69bbe093c47927c88fa3eaf10cce898e4593cc5   #要移动给谁的id即目标主机,可以随便写一个master的id(此处为master55的id)
Type 'all' to use all the nodes as source nodes for the hash slots.  #键入“all”将所有节点用作hash槽的源节点。Type 'done' once you entered all the source nodes IDs.   #输入所有源节点ID后,键入“done”。   Source node #1:5e0d18070c3fecdfcb3d560e4550f200ab8e0d58   #从谁那移动即援助局(这里写4.58的id)
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)?  yes   #同意配置否②在管理主机查看集群信息
[root@host57 ~]# redis-trib.rb   del-node  192.168.4.52:6352       5e0d18070c3fecdfcb3d560e4550f200ab8e0d58          #删除主机,删除谁就加谁的id
>>> Removing node 5e0d18070c3fecdfcb3d560e4550f200ab8e0d58 from cluster 192.168.4.52:6352
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@host57 ~]# redis-trib.rb   info  192.168.4.52:6352    #此时已经没有了58主机
192.168.4.52:6352 (23b46dfa...) -> 1 keys | 4096 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 3 keys | 8192 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 3 keys | 4096 slots | 1 slaves.
[OK] 7 keys in 3 masters.
0.00 keys per slot on average.[root@host57 ~]# redis-trib.rb   rebalance  192.168.4.52:6352   #将每个主机的hash槽平均
[root@host57 ~]# redis-trib.rb   info  192.168.4.52:6352        #查看集群信息
192.168.4.52:6352 (23b46dfa...) -> 2 keys | 5462 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.53:6353 (7747411a...) -> 5 keys | 5461 slots | 1 slaves.
[OK] 7 keys in 3 masters.      #主服务器个数3台,没有58
0.00 keys per slot on average.[root@host57 ~]# redis-trib.rb   check  192.168.4.52:6352     #此时59主机就自动变成了没有从服务器的55主机的从服务器
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:0-2731,8193-10922 (5462 slots) master1 additional replica(s)
M: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots:4097-5461,6827-8192,10923-13652 (5461 slots) master1 additional replica(s)
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:2732-4096,5462-6826,13653-16383 (5461 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: a33e7cd079dceefb8d8fc699947e9d17a114515e 192.168.4.59:6359slots: (0 slots) slavereplicates b69bbe093c47927c88fa3eaf10cce898e4593cc5
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
  • 把删除的主机再添加到集群中
[root@host57 ~]# redis-trib.rb  add-node 192.168.4.58:6358    192.168.4.52:6352
>>> Adding node 192.168.4.58:6358 to cluster 192.168.4.52:6352
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:0-2731,8193-10922 (5462 slots) master1 additional replica(s)
M: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots:4097-5461,6827-8192,10923-13652 (5461 slots) master1 additional replica(s)
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:2732-4096,5462-6826,13653-16383 (5461 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: a33e7cd079dceefb8d8fc699947e9d17a114515e 192.168.4.59:6359slots: (0 slots) slavereplicates b69bbe093c47927c88fa3eaf10cce898e4593cc5
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[ERR] Node 192.168.4.58:6358 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
#192.168.4.58主机不是空的状态,并且集群已经知道了该节点解决办法:1.可以将/var/lib/redis/6379/nodes-6379.conf删除,然后将该主机的redis服务关闭重启[root@host58 redis-4.0.8]# cat  /var/lib/redis/6379/nodes-6379.conf
a33e7cd079dceefb8d8fc699947e9d17a114515e 192.168.4.59:6359@16359 slave b69bbe093c47927c88fa3eaf10cce898e4593cc5 0 1582909828964 12 connected
8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354@16354 slave 7747411ab79e16a5493e66d4a46515bd110ce822 0 1582909828964 14 connected
75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356@16356 slave 23b46dfa5997798b02837b365122d0315a48a84e 0 1582909829000 13 connected
7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353@16353 master - 0 1582909828964 14 connected 2732-4096 5462-6826 13653-16383
b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355@16355 master - 0 1582909829000 12 connected 4097-5461 6827-8192 10923-13652
5e0d18070c3fecdfcb3d560e4550f200ab8e0d58 192.168.4.58:6358@16358 myself,master - 0 1582909828957 8 connected
23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352@16352 master - 0 1582909828964 13 connected 0-2731 8193-10922
vars currentEpoch 14 lastVoteEpoch 02.或者可以直接在redis服务器内执行cluster reset重置
[root@host58 redis-4.0.8]# redis-cli -h 192.168.4.58  -p 6358
192.168.4.58:6358> cluster  info    #此时查看,发现该主机还存在集群节点
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:7
cluster_size:3
cluster_current_epoch:14
cluster_my_epoch:8
cluster_stats_messages_ping_sent:631
cluster_stats_messages_sent:631
cluster_stats_messages_pong_received:631
cluster_stats_messages_received:631
192.168.4.58:6358> cluster reset       #重置集群信息
192.168.4.58:6358> cluster  info       #再次查看
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:14
cluster_my_epoch:8
cluster_stats_messages_ping_sent:719
cluster_stats_messages_sent:719
cluster_stats_messages_pong_received:719
cluster_stats_messages_received:719[root@host57 ~]# redis-trib.rb  add-node 192.168.4.58:6358    192.168.4.52:6352
>>> Adding node 192.168.4.58:6358 to cluster 192.168.4.52:6352
>>> Performing Cluster Check (using node 192.168.4.52:6352)
M: 23b46dfa5997798b02837b365122d0315a48a84e 192.168.4.52:6352slots:0-2731,8193-10922 (5462 slots) master1 additional replica(s)
M: b69bbe093c47927c88fa3eaf10cce898e4593cc5 192.168.4.55:6355slots:4097-5461,6827-8192,10923-13652 (5461 slots) master1 additional replica(s)
M: 7747411ab79e16a5493e66d4a46515bd110ce822 192.168.4.53:6353slots:2732-4096,5462-6826,13653-16383 (5461 slots) master1 additional replica(s)
S: 75917bffed4334444e2cf50165b9b03652f6bdc2 192.168.4.56:6356slots: (0 slots) slavereplicates 23b46dfa5997798b02837b365122d0315a48a84e
S: a33e7cd079dceefb8d8fc699947e9d17a114515e 192.168.4.59:6359slots: (0 slots) slavereplicates b69bbe093c47927c88fa3eaf10cce898e4593cc5
S: 8da07552c93155e4ac83c63bf1ee717cb15610a0 192.168.4.54:6354slots: (0 slots) slavereplicates 7747411ab79e16a5493e66d4a46515bd110ce822
[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.4.58:6358 to make it join the cluster.
[OK] New node added correctly.[root@host57 ~]# redis-trib.rb  info 192.168.4.58:6358
192.168.4.58:6358 (5e0d1807...) -> 0 keys | 0 slots | 0 slaves.
192.168.4.53:6353 (7747411a...) -> 5 keys | 5461 slots | 1 slaves.
192.168.4.55:6355 (b69bbe09...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.52:6352 (23b46dfa...) -> 2 keys | 5462 slots | 1 slaves.
[OK] 7 keys in 4 masters.
0.00 keys per slot on average.
  • 把集群中的主机还原成独立的数据库服务器
  1. 停止redis服务
  2. 清空数据库目录
  3. 注释集群功能
  4. 启动redis服务
  5. 查看端口只有服务端口,没有集群端口
  6. cluster info 显示enabled
[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 shutdown
[root@host51 ~]# rm  -rf  /var/lib/redis/6379/*
[root@host51 ~]# vim  /etc/redis/6379.conf 815 #cluster-enabled yes823 #cluster-config-file nodes-6379.conf829 #cluster-node-timeout 5000
[root@host51 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host51 ~]# netstat  -nutlp |  grep redis-server
tcp        0      0 192.168.4.51:6351       0.0.0.0:*               LISTEN      2005/redis-server 1
[root@host51 ~]# redis-cli  -h 192.168.4.51 -p 6351
192.168.4.51:6351> cluster info
ERR This instance has cluster support disabled[root@host51 ~]#sed  -i "815s/^/#/ ; 823s/^/#/ ; 829s/^/#/"  /etc/redis/6379.conf
部署redis脚本
#!/bin/bash
rpm -q gcc
if [ $? -eq 0 ];then
echo "gcc已经安装"
else
yum -y install gcc  expect
fi
redis(){tar -zxf redis-4.0.8.tar.gzcd redis-4.0.8/makemake installcd utils/
expect  <<ok
spawn ./install_server.sh
expect "Please select the redis port for this instance"                       {send "exit\r"}
expect "Please select the redis config file name "                            {send "exit\r"}
expect "Please select the redis log file name "                               {send "exit\r"}
expect "select the data directory for this instance "                         {send "exit\r"}
expect "Please select the redis executable path "                             {send "exit\r"}
expect "Is this ok? Then press ENTER to go on or Ctrl-C to abort."            {send "exit\r"}
expect "##"   {send "exit\r"}
expect "##"   {send "exit\r"}
ok
}
redis
echo "redis服务已安装完成"

NoSQL(二):创建、管理集群相关推荐

  1. 64: 创建集群 、 管理集群 、 总结和答疑

    Top NSD NOSQL DAY02 案例1:部署redis集群 案例2:添加服务器 案例3:移除服务器 1 案例1:部署redis集群 1.1 问题 具体要求如下: 部署管理主机 创建集群 查看集 ...

  2. 使用Kubeadm创建k8s集群之节点部署(三十二)

    前言 由于上次忘开申明原创,特再发一次. 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜 ...

  3. Linux下安装Weblogic10.3.6并创建简单集群测试

    Linux下安装Weblogic10.3.6并创建简单集群进行测试 一.卸载随系统安装的openjdk 1.先查看安装的jdk信息,常用命令有rpm -qa | grep java, rpm -qa  ...

  4. 使用Kubeadm创建k8s集群之部署规划(三十一)

    前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...

  5. 【VMware vSAN 7.0】5.4.2 创建 vSAN 集群

    [VMware vSAN 7.0]5.4.2 创建 vSAN 集群-我们有软硬件解决方案 IT干货 2021-03-31 10:19:32 123 收藏 1 分类专栏: 1.服务器虚拟化集群方案 文章 ...

  6. 使用docker创建swarm集群网络

    Docker集群网络,解决的问题是能同时响应多少请求.不是分布式计算,因为分布式计算是将一个任务拆分若干个子任务,然后将子任务分配到不同的机器上去执行. 集群网络的命令 (1)docker swarm ...

  7. 5 秒创建 k8s 集群[转]

    据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...

  8. 快速入门容器服务,创建Kubernetes集群

    使用须知 创建集群过程中,容器服务会进行如下操作: 创建 ECS,配置管理节点到其他节点的 SSH 的公钥登录,通过 CloudInit 安装配置 Kubernetes 集群. 创建安全组,该安全组允 ...

  9. 利用Packer自定义镜像创建容器集群

    阿里云容器服务Kubernetes集群支持CentOS操作系统,在绝大多数情况下可以满足客户的要求.但是有些客户由于业务系统对操作系统依赖比较高,希望定制化一些操作系统参数,则可以用自定义镜像来创建K ...

最新文章

  1. ASP.NET MVC+Bootstrap个人博客之打造清新分页Helper(三)
  2. 虚拟化技术KVM的搭建
  3. cvid matlab,WAKE-WIN10-SOFT-软件-Matlab配置及工具箱
  4. 某企业管理软件开发公司校园招聘的小组讨论面试题
  5. 工作41:解决vuex刷新数据丢失
  6. 推流工具_【软件分享】小熊录屏VIP版(手机直播游戏必备推流工具)
  7. python中if语句使用_Python学习笔记之if语句的使用示例
  8. 能提升你的东西,都不在舒适区
  9. 三个快速便捷的命令行小贴士
  10. Silverlight客户端和WCF服务器端共享类库
  11. linux服务之samba
  12. 使用PyInstaller2将Python脚本转化为可执行文件(下-进阶使用)
  13. 哪些是常用的数据分析方法
  14. python查找第k大的数_Python实现查找二叉搜索树第k大的节点功能示例
  15. Kafka从上手到实践-Zookeeper CLI:CRUD zNode | 凌云时刻
  16. 常用数据分析的基本方法
  17. java编程器宣传费湖南岚鸿驱动_EasyPRO系列通用编程器驱动程序
  18. 期刊论文公式编号、居中技巧
  19. separated by semicolons
  20. uml的用例图中扩展关系与包含关系

热门文章

  1. hadoop下实现kmeans算法——一个mapreduce的实现方法
  2. Oracle编程入门经典 第7章 表
  3. 聚类算法KMeans和KMedoid 的Matlab实现
  4. 【python图像处理】tiff文件的保存与解析
  5. 【OpenCV3】图像通道分离与合并——cv::split()与cv::merge()详解
  6. 阿里云自营建站买一年送一年
  7. React-Native学习指南
  8. Linux命令——cp
  9. Matlab 图像分块(不重叠、重叠)
  10. kafka的groupid