CentOS 7下 部署Redis

redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redis高可用、可扩展等问题,redis集群提供了以下两个好处:
1)将数据自动切分(split)到多个节点
2)当集群中的某一个节点故障时,redis还可以继续处理客户端的请求

一个 Redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个  集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽 集群中的每一个节点负责处理一部分哈希槽
集群中的主从复制
集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作 这样集群就不会因为一个主节点的下线而无法正常工作

Redis Cluster集群功能推出已经有一段时间了 在单机版的Redis中,每个Master之间是没有任何通信的,所以一般在Jedis客户端或者Codis这样的代理中做Pre-sharding 按照CAP理论来说,单机版的Redis属于保证CP(Consistency & Partition-Tolerancy)而牺牲A(Availability),也就说Redis能够保证所有用户看到相同的数据(一致性,因为Redis不自动冗余数据)和网络通信出问题时,暂时隔离开的子系统能继续运行(分区容忍性,因为Master之间没有直接关系,不需要通信),但是不保证某些结点故障时,所有请求都能被响应(可用性,某个Master结点挂了的话,那么它上面分片的数据就无法访问了)

有了Cluster功能后,Redis从一个单纯的NoSQL内存数据库变成了分布式NoSQL数据库,CAP模型也从CP变成了AP 也就是说,通过自动分片和冗余数据,Redis具有了真正的分布式能力,某个结点挂了的话,因为数据在其他结点上有备份,所以其他结点顶上来就可以继续提供服务,保证了Availability 然而,也正因为这一点,Redis无法保证曾经的强一致性了 这也是CAP理论要求的,三者只能取其二

Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写 集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明 一个Key到底属于哪个Slot由crc16(key) % 16384 决定 在Redis Cluster里对于负载均衡和HA相关都已经支持的相当完善了

负载均衡(Load Balance):集群的Redis Instance之间可以迁移数据,以Slot为单位,但不是自动的,需要外部命令触发
集群成员管理:集群的节点(Redis Instance)和节点之间两两定期交换集群内节点信息并且更新,从发送节点的角度看,这些信息包括:集群内有哪些节点,IP和PORT是什么,节点名字是什么,节点的状态(比如OK,PFAIL,FAIL,后面详述)是什么,包括节点角色(master 或者 slave)等
关于可用性,集群由N组主从Redis Instance组成

主可以没有从,但是没有从 意味着主宕机后主负责的Slot读写服务不可用

一个主可以有多个从,主宕机时,某个从会被提升为主,具体哪个从被提升为主,协议类似于Raft,参见这里 如何检测主宕机?Redis Cluster采用quorum+心跳的机制 从节点的角度看,节点会定期给其他所有的节点发送Ping,cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态 通过节点之间交换信息收集到quorum个节点都认为这个节点为PFAIL,则将该节点标记为FAIL,并且将其发送给其他所有节点,其他所有节点收到后立即认为该节点宕机 从这里可以看出,主宕机后,至少cluster-node-timeout时间内该主所负责的Slot的读写服务不可用

redis cluster集群是为了降低单节点或单纯主从redis的压力,主主节点之间是不存在同步关系的,各主从之间的数据存在同步关系 有多少主节点,就会把16384个哈希槽(hash slot)平均分配到这些主节点上**,**当往redis里写入数据时,会根据哈希算法算出这个数的哈希槽,决定它放到哪一个主节点上,然后这个主节点的从节点去自动同步 在客户端随便连接一个主节点即可,主节点之间会进行内部跳转!当取对应数据时,各节点之间会自动跳转到所取数据所在的主节点上!

1)redis cluster节点分配
假设现有有三个主节点分别是:A、 B、C ,它们可以是一台机器上的三个端口,也可以是三台不同的服务器 那么,采用哈希槽 (hash slot)的方式
来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:
节点A         覆盖0-5460;
节点B         覆盖5461-10922;
节点C        覆盖10923-16383.

获取数据:
如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')%16384 = 6782 那么就会把这个key 的存储分配到 B 上了 同样,当我连接
(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据 

新增一个主节点:
新增一个节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验 大致就会变成这样:
节点A         覆盖1365-5460
节点B        覆盖6827-10922
节点C       覆盖12288-16383
节点D       覆盖0-1364,5461-6826,10923-12287

同样删除一个节点也是类似,移动完成后就可以删除这个节点了

2)Redis Cluster主从模式
redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据
备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉

上面那个例子里, 集群有A、B、C三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了 A和C的slot也无法访问
所以在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也
可以继续正确工作 B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务 当B重新开启后,它就会变成B1的从节点

不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了

由于最小的redis集群需要3个主节点(即Redis Cluster集群至少需要3个master节点,也就是说至少需要6个节点才能构建Redis cluster集群),一台机器可运行多个redis实例(一般使用两台机器,每台启动3个redis实例,即三个主节点,三个从节点) 很多案例使用单台服务器开6个端口,操作差不多,只是配置基本相对简单点,多台服务器更接近生产环境 【当集群最开始创建好后,要记住各节点的主从关系(或是创建的时候指定主从关系);若是其中一台机器重启,重启后,需重新将其加入到redis cluster集群中;这就需要将这台机器上的各节点之前的从节点变为主节点(客户端执行slaveof no one),然后再根据新的主节点添加这台机器的各节点到集群中,添加后变为从节点】

环境 : CentOS7 

redis01 : 192.168.94.11 端口 : 7000、7001、7002

redis02 : 192.168.94.22 端口 : 7003、7004、7005

redis03 : 192.168.94.33 端口 : 7006、7007、7008

关闭SElinux和防火墙

安装redis

1[root@redis01 ~]# yum install -y gcc g++ make gcc-c++ kernel-devel automake autoconf libtool make wget tcl vim ruby rubygems unzip git 2[root@redis01 ~]# wget http://download.redis.io/releases/redis-4.0.1.tar.gz 3[root@redis01 ~]# tar xf redis-4.0.1.tar.gz -C /usr/local/src/ 4[root@redis01 ~]# cd /usr/local/src/redis-4.0.1/ 5[root@redis01 redis-4.0.1]# make && make test && make PREFIX=/usr/local/redis install 6[root@redis01 redis-4.0.1]# mkdir /usr/local/redis/conf 7[root@redis01 redis-4.0.1]# cp *.conf /usr/local/redis/conf/ 8[root@redis01 redis-4.0.1]# cp /usr/local/src/redis-4.0.1/src/redis-trib.rb /usr/local/redis/bin/ 9[root@redis01 redis-4.0.1]# ln -s /usr/local/redis/bin/* /usr/local/bin/ 10# 进行操作系统基础调优设置 11[root@redis01 redis-4.0.1]# echo "* - nofile 10240" >> /etc/security/limits.conf 12[root@redis01 redis-4.0.1]# echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf 13[root@redis01 redis-4.0.1]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf 14[root@redis01 redis-4.0.1]# sysctl -p 15net.core.somaxconn = 10240 16vm.overcommit_memory = 1 17[root@redis01 redis-4.0.1]# echo never > /sys/kernel/mm/transparent_hugepage/enabled 18[root@redis01 redis-4.0.1]# echo never > /sys/kernel/mm/transparent_hugepage/defrag 19[root@redis01 redis-4.0.1]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local 20[root@redis01 redis-4.0.1]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local 21[root@redis01 redis-4.0.1]# su -l

创建节点

1# 创建集群节点目录 2[root@redis01 ~]# mkdir /data/redis/redis-cluster -p 3[root@redis01 redis-cluster]# cd /data/redis/redis-cluster/[root@redis01 redis-cluster]# mkdir 7000 7001 7002 # 修改节点配置文件,为了测试方便, 只做初步的简单配置 4[root@redis01 redis-cluster]# for i in 0 1 2; 5 do echo -e "port 700$i\n\ 6 bind `hostname -I`\n\ 7 daemonize yes\n\ 8 pidfile /var/run/redis_700$i.pid\n\ 9 cluster-enabled yes\n\ 10 cluster-config-file nodes_700$i.conf\n\ 11 cluster-node-timeout 10100" > 700$i/redis.conf; 12 done

1cluster-enabled yes 2bind 0.0.0.0 3port 7000 4pidfile /data/redis-cluster/7000/redis.pid 5logfile "/data/redis-cluster/7000/redis.log" 6dir /data/redis-cluster/7000/ 7tcp-backlog 1024 8timeout 0 9tcp-keepalive 0 10daemonize yes 11loglevel notice 12databases 16 13stop-writes-on-bgsave-error yes 14rdbcompression yes 15rdbchecksum yes 16dbfilename "dump.rdb" 17slave-serve-stale-data yes 18slave-read-only yes 19repl-diskless-sync no 20repl-diskless-sync-delay 5 21repl-disable-tcp-nodelay no 22slave-priority 100 23lazyfree-lazy-eviction no 24lazyfree-lazy-expire no 25lazyfree-lazy-server-del no 26slave-lazy-flush no 27appendonly no 28appendfilename "appendonly.aof" 29appendfsync everysec 30no-appendfsync-on-rewrite yes 31auto-aof-rewrite-percentage 100 32auto-aof-rewrite-min-size 64mb 33aof-load-truncated yes 34lua-time-limit 5000 35slowlog-log-slower-than 10000 36slowlog-max-len 128 37latency-monitor-threshold 0 38notify-keyspace-events "" 39hash-max-ziplist-entries 512 40hash-max-ziplist-value 64 41list-max-ziplist-entries 512 42list-max-ziplist-value 64 43set-max-intset-entries 512 44zset-max-ziplist-entries 128 45zset-max-ziplist-value 64 46hll-sparse-max-bytes 3000 47activerehashing yes 48client-output-buffer-limit normal 0 0 0 49client-output-buffer-limit slave 256mb 64mb 60 50client-output-buffer-limit pubsub 32mb 8mb 60 51hz 10 52aof-rewrite-incremental-fsync yes

详细配置(仅供参考)

1[root@redis01 redis-cluster]# tree 2. 3├── 7000 4│   └── redis.conf 5├── 7001 6│   └── redis.conf 7└── 7002 8 └── redis.conf 9 103 directories, 3 files

其他节点做以上相同操作即可 , 只把目录名按照端口号区别开即可

然后启动集群

1# 第一个节点上启动3个实例 2for i in 0 1 2; 3> do redis-server /data/redis/redis-cluster/700$i/redis.conf 4> done 568820:C 08 Oct 22:21:14.965 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 668820:C 08 Oct 22:21:14.965 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=68820, just started 768820:C 08 Oct 22:21:14.965 # Configuration loaded 868822:C 08 Oct 22:21:14.972 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 968822:C 08 Oct 22:21:14.972 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=68822, just started 1068822:C 08 Oct 22:21:14.972 # Configuration loaded 1168824:C 08 Oct 22:21:14.981 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1268824:C 08 Oct 22:21:14.981 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=68824, just started 1368824:C 08 Oct 22:21:14.981 # Configuration loaded 14# 第二个节点上启动3个实例 15[root@redis02 redis-cluster]# for i in 3 4 5; 16> do redis-server /data/redis/redis-cluster/700$i/redis.conf 17> done 1841766:C 08 Oct 22:21:42.369 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1941766:C 08 Oct 22:21:42.369 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=41766, just started 2041766:C 08 Oct 22:21:42.369 # Configuration loaded 2141768:C 08 Oct 22:21:42.375 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 2241768:C 08 Oct 22:21:42.375 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=41768, just started 2341768:C 08 Oct 22:21:42.375 # Configuration loaded 2441770:C 08 Oct 22:21:42.380 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 2541770:C 08 Oct 22:21:42.380 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=41770, just started 2641770:C 08 Oct 22:21:42.380 # Configuration loaded 27# 第三个节点上启动3个实例 28[root@redis03 redis-cluster]# for i in 6 7 8; 29> do redis-server /data/redis/redis-cluster/700$i/redis.conf 30> done 3141854:C 08 Oct 22:21:51.935 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 3241854:C 08 Oct 22:21:51.935 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=41854, just started 3341854:C 08 Oct 22:21:51.935 # Configuration loaded 3441856:C 08 Oct 22:21:51.939 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 3541856:C 08 Oct 22:21:51.939 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=41856, just started 3641856:C 08 Oct 22:21:51.939 # Configuration loaded 3741858:C 08 Oct 22:21:51.945 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 3841858:C 08 Oct 22:21:51.945 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=41858, just started 3941858:C 08 Oct 22:21:51.945 # Configuration loaded

检查各Redis节点的启动状态

1[root@redis01 redis-cluster]# netstat -antup|grep redis 2tcp 0 0 192.168.94.11:17000 0.0.0.0:* LISTEN 68821/redis-server 3tcp 0 0 192.168.94.11:17001 0.0.0.0:* LISTEN 68823/redis-server 4tcp 0 0 192.168.94.11:17002 0.0.0.0:* LISTEN 68828/redis-server 5tcp 0 0 192.168.94.11:7000 0.0.0.0:* LISTEN 68821/redis-server 6tcp 0 0 192.168.94.11:7001 0.0.0.0:* LISTEN 68823/redis-server 7tcp 0 0 192.168.94.11:7002 0.0.0.0:* LISTEN 68828/redis-server

安装ruby

1[root@redis01 redis-cluster]# yum -y install rh-ruby23 2[root@redis01 redis-cluster]# ruby -v 3ruby 2.0.0p648 (2015-12-16) [x86_64-linux] 4[root@redis01 redis-cluster]# scl enable rh-ruby23 bash 5[root@redis01 redis-cluster]# ruby -v 6ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-linux]

安装ruby的redis扩展

1[root@redis01 redis-cluster]# gem install redis 2Fetching: redis-4.0.2.gem (100%) 3Successfully installed redis-4.0.2 4Parsing documentation for redis-4.0.2 5Installing ri documentation for redis-4.0.2 6Done installing documentation for redis after 0 seconds 71 gem installed

使用redis自带的集群管理工具创建集群

1# 在任意一台上运行即可,不要在每台机器上都运行 2[root@redis01 redis-cluster]# redis-trib.rb create --replicas 1 192.168.94.11:7000 192.168.94.11:7001 192.168.94.11:7002 192.168.94.22:7003 192.168.94.22:7004 192.168.94.22:7005 192.168.94.33:7006 192.168.94.33:7007 192.168.94.33:7008 3>>> Creating cluster 4>>> Performing hash slots allocation on 9 nodes... 5Using 4 masters: 6192.168.94.11:7000 7192.168.94.22:7003 8192.168.94.33:7006 9192.168.94.11:7001 10Adding replica 192.168.94.22:7004 to 192.168.94.11:7000 11Adding replica 192.168.94.33:7007 to 192.168.94.22:7003 12Adding replica 192.168.94.11:7002 to 192.168.94.33:7006 13Adding replica 192.168.94.22:7005 to 192.168.94.11:7001 14Adding replica 192.168.94.33:7008 to 192.168.94.11:7000 15M: d8138e15d9cb69962abb7457125a7965b735a658 192.168.94.11:7000 16 slots:0-4095 (4096 slots) master 17M: 72f44da597f73c8d23c6d3fb60fa95489eb0168d 192.168.94.11:7001 18 slots:12288-16383 (4096 slots) master 19S: 711af78396c3ba966f751beef745ae10ff053a3f 192.168.94.11:7002 20 replicates af2e1c600ed2511155a6cad61cabeb095affff86 21M: 691428ae7c1728a76520b8f9d46fa6d83930f191 192.168.94.22:7003 22 slots:4096-8191 (4096 slots) master 23S: e752d865374c8ca4149737d81f19ac95cc9f6a44 192.168.94.22:7004 24 replicates d8138e15d9cb69962abb7457125a7965b735a658 25S: ba4ce74ba7b84bde9ea60cd8bf4c5996f1ca01e5 192.168.94.22:7005 26 replicates 72f44da597f73c8d23c6d3fb60fa95489eb0168d 27M: af2e1c600ed2511155a6cad61cabeb095affff86 192.168.94.33:7006 28 slots:8192-12287 (4096 slots) master 29S: b1e201b2acdc0a0740a764978436fa3946325a11 192.168.94.33:7007 30 replicates 691428ae7c1728a76520b8f9d46fa6d83930f191 31S: 6913f44486938c49eed6efa6f18c782df73e6456 192.168.94.33:7008 32 replicates d8138e15d9cb69962abb7457125a7965b735a658 33Can I set the above configuration? (type 'yes' to accept): yes 34>>> Nodes configuration updated 35>>> Assign a different config epoch to each node 36>>> Sending CLUSTER MEET messages to join the cluster 37Waiting for the cluster to join........ 38>>> Performing Cluster Check (using node 192.168.94.11:7000) 39M: d8138e15d9cb69962abb7457125a7965b735a658 192.168.94.11:7000 40 slots:0-4095 (4096 slots) master 41 2 additional replica(s) 42S: b1e201b2acdc0a0740a764978436fa3946325a11 192.168.94.33:7007 43 slots: (0 slots) slave 44 replicates 691428ae7c1728a76520b8f9d46fa6d83930f191 45S: e752d865374c8ca4149737d81f19ac95cc9f6a44 192.168.94.22:7004 46 slots: (0 slots) slave 47 replicates d8138e15d9cb69962abb7457125a7965b735a658 48M: 691428ae7c1728a76520b8f9d46fa6d83930f191 192.168.94.22:7003 49 slots:4096-8191 (4096 slots) master 50 1 additional replica(s) 51M: af2e1c600ed2511155a6cad61cabeb095affff86 192.168.94.33:7006 52 slots:8192-12287 (4096 slots) master 53 1 additional replica(s) 54M: 72f44da597f73c8d23c6d3fb60fa95489eb0168d 192.168.94.11:7001 55 slots:12288-16383 (4096 slots) master 56 1 additional replica(s) 57S: 711af78396c3ba966f751beef745ae10ff053a3f 192.168.94.11:7002 58 slots: (0 slots) slave 59 replicates af2e1c600ed2511155a6cad61cabeb095affff86 60S: ba4ce74ba7b84bde9ea60cd8bf4c5996f1ca01e5 192.168.94.22:7005 61 slots: (0 slots) slave 62 replicates 72f44da597f73c8d23c6d3fb60fa95489eb0168d 63S: 6913f44486938c49eed6efa6f18c782df73e6456 192.168.94.33:7008 64 slots: (0 slots) slave 65 replicates d8138e15d9cb69962abb7457125a7965b735a658 66[OK] All nodes agree about slots configuration. 67>>> Check for open slots... 68>>> Check slots coverage... 69[OK] All 16384 slots covered.# 三个服务器启动了9个实例,配置成45,其中一个是一主两从,其他都是一主一从

集群验证

选项 -c 可连接集群, 因为配置文件中bind改成了ip所以必须要用 -h 选项,-p选项后接端口号

1# 在redis01上的7000端口的实例上set一个key 2[root@redis01 redis-cluster]# redis-cli -h 192.168.94.11 -c -p 7000 3192.168.94.11:7000> set name weihan 4-> Redirected to slot [5798] located at 192.168.94.22:7003 5OK 6192.168.94.22:7003> get name 7"weihan" 8# 由上可见 , redis01 set name 后,将数据重定向到了redis02的7003端口的实例上 9# 在redis03的7008实例上get一个key 10[root@redis01 redis-cluster]# redis-cli -h 192.168.94.33 -c -p 7008 11192.168.94.33:7008> get name 12-> Redirected to slot [5798] located at 192.168.94.22:7003 13"weihan" 14192.168.94.22:7003> 15# get name 还是会重定向到7003这个实例上 , 这说明redis cluster集群已经是可用的了

检查集群状态(4个master会分配到4个服务器上, 而且每个服务器上必须有一个master,创建集群的时候可以指定master,我创建的时候没指定,是默认分配)

1[root@redis01 redis-cluster]# redis-trib.rb check 192.168.94.11:7000 2>>> Performing Cluster Check (using node 192.168.94.11:7000) 3M: d8138e15d9cb69962abb7457125a7965b735a658 192.168.94.11:7000 4 slots:0-4095 (4096 slots) master 5 2 additional replica(s) 6S: b1e201b2acdc0a0740a764978436fa3946325a11 192.168.94.33:7007 7 slots: (0 slots) slave 8 replicates 691428ae7c1728a76520b8f9d46fa6d83930f191 9S: e752d865374c8ca4149737d81f19ac95cc9f6a44 192.168.94.22:7004 10 slots: (0 slots) slave 11 replicates d8138e15d9cb69962abb7457125a7965b735a658 12M: 691428ae7c1728a76520b8f9d46fa6d83930f191 192.168.94.22:7003 13 slots:4096-8191 (4096 slots) master 14 1 additional replica(s) 15M: af2e1c600ed2511155a6cad61cabeb095affff86 192.168.94.33:7006 16 slots:8192-12287 (4096 slots) master 17 1 additional replica(s) 18M: 72f44da597f73c8d23c6d3fb60fa95489eb0168d 192.168.94.11:7001 19 slots:12288-16383 (4096 slots) master 20 1 additional replica(s) 21S: 711af78396c3ba966f751beef745ae10ff053a3f 192.168.94.11:7002 22 slots: (0 slots) slave 23 replicates af2e1c600ed2511155a6cad61cabeb095affff86 24S: ba4ce74ba7b84bde9ea60cd8bf4c5996f1ca01e5 192.168.94.22:7005 25 slots: (0 slots) slave 26 replicates 72f44da597f73c8d23c6d3fb60fa95489eb0168d 27S: 6913f44486938c49eed6efa6f18c782df73e6456 192.168.94.33:7008 28 slots: (0 slots) slave 29 replicates d8138e15d9cb69962abb7457125a7965b735a658 30[OK] All nodes agree about slots configuration. 31>>> Check for open slots... 32>>> Check slots coverage... 33[OK] All 16384 slots covered.

列出集群节点

1[root@redis01 redis-cluster]# redis-cli -h 192.168.94.11 -c -p 7000 2192.168.94.11:7000> CLUSTER NODES 3b1e201b2acdc0a0740a764978436fa3946325a11 192.168.94.33:7007@17007 slave 691428ae7c1728a76520b8f9d46fa6d83930f191 0 1539016061737 8 connected 4e752d865374c8ca4149737d81f19ac95cc9f6a44 192.168.94.22:7004@17004 slave d8138e15d9cb69962abb7457125a7965b735a658 0 1539016062000 5 connected 5691428ae7c1728a76520b8f9d46fa6d83930f191 192.168.94.22:7003@17003 master - 0 1539016064655 4 connected 4096-8191 6af2e1c600ed2511155a6cad61cabeb095affff86 192.168.94.33:7006@17006 master - 0 1539016062000 7 connected 8192-12287 772f44da597f73c8d23c6d3fb60fa95489eb0168d 192.168.94.11:7001@17001 master - 0 1539016063648 2 connected 12288-16383 8711af78396c3ba966f751beef745ae10ff053a3f 192.168.94.11:7002@17002 slave af2e1c600ed2511155a6cad61cabeb095affff86 0 1539016063000 7 connected 9d8138e15d9cb69962abb7457125a7965b735a658 192.168.94.11:7000@17000 myself,master - 0 1539016063000 1 connected 0-4095 10ba4ce74ba7b84bde9ea60cd8bf4c5996f1ca01e5 192.168.94.22:7005@17005 slave 72f44da597f73c8d23c6d3fb60fa95489eb0168d 0 1539016063000 6 connected 116913f44486938c49eed6efa6f18c782df73e6456 192.168.94.33:7008@17008 slave d8138e15d9cb69962abb7457125a7965b735a658 0 1539016063000 9 connected

打印集群信息

1192.168.94.11:7000> CLUSTER INFO 2cluster_state:ok 3cluster_slots_assigned:16384 4cluster_slots_ok:16384 5cluster_slots_pfail:0 6cluster_slots_fail:0 7cluster_known_nodes:9 8cluster_size:4 9cluster_current_epoch:9 10cluster_my_epoch:1 11cluster_stats_messages_ping_sent:1240 12cluster_stats_messages_pong_sent:1251 13cluster_stats_messages_sent:2491 14cluster_stats_messages_ping_received:1243 15cluster_stats_messages_pong_received:1240 16cluster_stats_messages_meet_received:8 17cluster_stats_messages_received:2491

指定redis cluster中的master和slave 可以用下面的方法

1# 添加主库 2[root@redis01 redis-cluster]# redis-trib.rb create 192.168.94.11:7000 192.168.94.22:7003 192.168.94.33:7006 3# 添加从库 4[root@redis01 redis-cluster]# redis-trib.rb add-node --slave 192.168.94.22:7001 192.168.94.11:7000 # 把192.168.94.117001 作为从库添加到192.168.94.117000
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )