redis5.0布置集群情况_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

                                        redis5.0集群布置

一、集群引见

Redis 集群是一个能够在多个 Redis 节点之间举行数据同享的设备(installation)。

Redis 集群不支撑那些须要同时处置惩罚多个键的 Redis 敕令, 由于实行这些敕令须要在多个 Redis 节点之间挪动数据, 并且在高负载的情况下, 这些敕令将下降 Redis 集群的机能, 并致使弗成展望的行动。

Redis 集群经由历程分区(partition)来供应肯定水平的可用性(availability): 纵然集群中有一部分节点失效或许没法举行通信, 集群也能够继承处置惩罚敕令要求。

Redis 集群供应了以下两个优点:

    将数据自动切分(split)到多个节点的才能。
    当集群中的一部分节点失效或许没法举行通信时, 依然能够继承处置惩罚敕令要求的才能。

二、Redis 集群数据同享

Redis 集群运用数据分片(sharding)而非一致性哈希(consistency hashing)来完成: 一个 Redis 集群包罗 16384 个哈希槽(hash slot), 数据库中的每一个键都属于这 16384 个哈希槽的个中一个, 集群运用公式 CRC16(key) % 16384 来盘算键 key 属于哪一个槽, 个中 CRC16(key) 语句用于盘算键 key 的 CRC16 校验和 。

集群中的每一个节点负责处置惩罚一部分哈希槽。 举个例子, 一个集群能够有三个哈希槽, 个中:

  •     节点 A 负责处置惩罚 0 号至 5500 号哈希槽。
  •     节点 B 负责处置惩罚 5501 号至 11000 号哈希槽。
  •     节点 C 负责处置惩罚 11001 号至 16384 号哈希槽。


这类将哈希槽散布到分歧节点的做法使得用户能够很容易地向集群中增加或许删除节点。 比如说:

    若是用户将新节点 D 增加到集群中, 那末集群只须要将节点 A 、B 、 C 中的某些槽挪动到节点 D 就能够了。
    与此相似, 若是用户要从集群中移除节点 A , 那末集群只须要将节点 A 中的一切哈希槽挪动到节点 B 和节点 C , 然后再移除空缺(不包罗任何哈希槽)的节点 A 就能够了。

由于将一个哈希槽从一个节点挪动到另一个节点不会形成节点壅塞, 以是无论是增加新节点照样移除已存在节点, 又或许转变某个节点包罗的哈希槽数目, 都不会形成集群下线。

三、Redis 集群中的主从复制

为了使得集群在一部分节点下线或许没法与集群的大多数(majority)节点举行通信的情况下, 依然能够一般运作, Redis 集群对节点运用了主从复制功用: 集群中的每一个节点都有 1 个至 N 个复制品(replica), 个中一个复制品为主节点(master), 而其他的 N-1 个复制品为从节点(slave)。

在之前枚举的节点 A 、B 、C 的例子中, 若是节点 B 下线了, 那末集群将没法一般运转, 由于集群找不到节点来处置惩罚 5501 号至 11000 号的哈希槽。

另一方面, 假如在建立集群的时刻(或许至少在节点 B 下线之前), 我们为主节点 B 增加了从节点 B1 , 那末当主节点 B 下线的时刻, 集群就会将 B1 设置为新的主节点, 并让它替代下线的主节点 B , 继承处置惩罚 5501 号至 11000 号的哈希槽, 如许集群就不会由于主节点 B 的下线而没法一般运作了。

不外若是节点 B 和 B1 都下线的话, Redis 集群照样会住手运作。

四、建立并运用 Redis 集群

必需运用六个节点: 个中三个为主节点, 而其他三个则是各个主节点的从节点。不然集群没法一般运转!!
装置历程

1. 下载并解压

cd /root/software
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz 

2. 编译装置

cd redis-5.0.0
make && make install

3. 将 redis-trib.rb 复制到 /usr/local/bin 目次下

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-
cd src
cp redis-trib.rb /usr/local/bin/

4. 建立 Redis 节点

首先在 10.90.6.157 机械上 /root/software/redis-5.0.0 目次下建立 redis_cluster 目次;

mkdir redis_cluster  

在 redis_cluster 目次下,建立名为6379的目次,并将 redis.conf 拷贝到这个目次中

mkdir 6379
cp redis.conf redis_cluster/6379 

离别修正这三个设置装备摆设文件,修正以下内容

port  6379                                        //端口默许      
#bind 127.0.0.1                                   //解释掉默许ip为127.0.0.1 须要改成其他节点机械可接见的ip 不然建立集群时没法接见对应的端口,没法建立集群
daemonize    yes                                //redis背景运转
pidfile  /var/run/redis_6379.pid               //pidfile文件对应6379
cluster-enabled  yes                           //开启集群  把解释#去掉
cluster-config-file  nodes_6379.conf         //集群的设置装备摆设  设置装备摆设文件初次启动自动天生 6379
cluster-node-timeout  15000                //要求超时  默许15秒,可自行设置
appendonly  yes                           //aof日记开启  有须要就开启,它会每次写操纵都纪录一条日记 

集群的完全设置装备摆设文件以下:

protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

Redis 官方供应了 redis-trib.rb 这个对象是用 ruby 完成的,以是须要装置 ruby。装置敕令以下:

yum -y install ruby ruby-devel rubygems rpm-build
gem install redis 

个中 gem install redis敕令实行时涌现了:

 redis requires Ruby version >= 2.2.2的报错,查了材料发现是Centos默许支撑ruby到2.0.0,可gem 装置redis须要最低是2.2.2

解决办法是 先装置rvm,再把ruby版本提升至2.3.3

1.装置curl

sudo yum install curl

2. 装置RVM

curl -L get.rvm.io | bash -s stable

3.

source /usr/local/rvm/scripts/rvm

4. 检察rvm库中已知的ruby版本

rvm list known

5. 装置一个ruby版本

rvm install 2.3.3

6. 运用一个ruby版本

rvm use 2.3.3

7. 设置默许版本

rvm remove 2.0.0

8. 卸载一个已知版本

ruby --version

9. 再装置redis就能够了
gem install redis


好了,反复以上的装置步凑把剩下的5个节点布置好!!!

10.建立集群
在6个节点中实行以下敕令启动redis:

src/redis-server ./redis_cluster/6379/redis.conf &

在1个节点上实行以下建立集群敕令:
src/redis-cli --cluster create 10.90.6.156:6379 10.90.6.157:6379 10.90.6.158:6379 10.90.6.159:6379 10.90.6.160:6379 10.90.6.161:6379 --cluster-replicas 1

[root@Redis1 redis-5.0.0]# src/redis-cli --cluster create 10.90.6.156:6379 10.90.6.157:6379 10.90.6.158:6379 10.90.6.159:6379 10.90.6.160:6379 10.90.6.161:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.90.6.159:6379 to 10.90.6.156:6379
Adding replica 10.90.6.160:6379 to 10.90.6.157:6379
Adding replica 10.90.6.161:6379 to 10.90.6.158:6379
M: ddebff330f23552db26eadb51c4f9926473cb485 10.90.6.156:6379
   slots:[0-5460] (5461 slots) master
M: 4256ffaa3ad3d1c8ad3174898f97114629922a8e 10.90.6.157:6379
   slots:[5461-10922] (5462 slots) master
M: 9b7c727852f4bde936b8bb8f6cbda2cf621b7c9b 10.90.6.158:6379
   slots:[10923-16383] (5461 slots) master
S: e52195f35519ac8c360b008a354415ad39190027 10.90.6.159:6379
   replicates ddebff330f23552db26eadb51c4f9926473cb485
S: 06d022e927a8f166cd08e333e8723d4c5b5a1092 10.90.6.160:6379
   replicates 4256ffaa3ad3d1c8ad3174898f97114629922a8e
S: b57ebc5c247f01e9e35cf798bd6932bdaee04098 10.90.6.161:6379
   replicates 9b7c727852f4bde936b8bb8f6cbda2cf621b7c9b
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 10.90.6.156:6379)
M: ddebff330f23552db26eadb51c4f9926473cb485 10.90.6.156:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: b57ebc5c247f01e9e35cf798bd6932bdaee04098 10.90.6.161:6379
   slots: (0 slots) slave
   replicates 9b7c727852f4bde936b8bb8f6cbda2cf621b7c9b
S: e52195f35519ac8c360b008a354415ad39190027 10.90.6.159:6379
   slots: (0 slots) slave
   replicates ddebff330f23552db26eadb51c4f9926473cb485
S: 06d022e927a8f166cd08e333e8723d4c5b5a1092 10.90.6.160:6379
   slots: (0 slots) slave
   replicates 4256ffaa3ad3d1c8ad3174898f97114629922a8e
M: 4256ffaa3ad3d1c8ad3174898f97114629922a8e 10.90.6.157:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 9b7c727852f4bde936b8bb8f6cbda2cf621b7c9b 10.90.6.158:6379
   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.

若是报错,请看下面!!
[root@Redis1 redis-5.0.0]# src/redis-cli --cluster create 10.90.6.156:6379 10.90.6.157:6379 10.90.6.158:6379 10.90.6.159:6379 10.90.6.160:6379 10.90.6.161:6379 --cluster-replicas 1
[ERR] Node 10.90.6.157:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
的题目
解决办法:
1)将每一个节点下aof、rdb、nodes.conf当地备份文件删除;
[root@redis-5.0.0]# rm -fr appendonly.aof dump.rdb nodes-*^C
[root@redis-5.0.0]# pwd
/fs01/redis-5.0.0
2)10.90.6.157:6379> flushdb #清空以后数据库
3)以后再实行剧本,胜利实行;
这里解释一下dump.rdb文件:
dump.rdb是由Redis服务器自动天生的 默许情况下 每隔一段时间redis服务器顺序会自动对数据库做一次遍历,把内存快照写在一个叫做“dump.rdb”的文件里,这个耐久化机制叫做SNAPSHOT。有了SNAPSHOT后,若是服务器宕机,从新启动redis服务器顺序时redis会自动加载dump.rdb,将数据库状况规复到上一次做SNAPSHOT时的状况。
SNAPSHOT即快照
从新衔接redis集群,胜利

8. 集群考证
在一台机械上衔接体式格局为 redis-cli -h  -c 10.90.6.157 ,加参数 -c 可衔接到集群,由于上面 redis.conf 将 bind 改成了ip地点,以是 -h 参数不能够省略。

[root@Redis2 src]# ./redis-cli -c -h 10.90.6.157
10.90.6.157:6379> get hello
"2"
10.90.6.157:6379> 

 



-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。