redis集群搭建

来源:互联网 发布:大数金科网络 编辑:程序博客网 时间:2024/06/04 18:58

优势:

·        自动分割数据到不同的节点上。

·        整个集群的部分节点失败或者不可达的情况下能够继续处理命令

Redis 集群没有使用一致性hash,而是引入了 哈希槽的概念.Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:

  •  节点 A 包含 0 到 5500号哈希槽.
  • 节点 B 包含5501 到 11000 号哈希槽.
  • 节点 C 包含11001 到 16384号哈希槽.

这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D,我需要从节点 A, B, C中得部分槽到D上. 如果我像移除节点A,需要将A中得槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.

 

  i.     下面是一个最少选项的集群的配置文件:

port 7000                               #每个redis不一样,需要修改

cluster-enabled yes                 #开启实例的集群模式

cluster-config-file nodes.conf          #保存节点配置文件的路径,同一台服务器上的名称不能一样,最好改成例如nodes-7000.conf

cluster-node-timeout 5000

appendonly yes

 

 ii.     首先, 让我们进入一个新目录, 并创建六个以端口号为名字的子目录, 稍后我们在将每个目录中运行一个 Redis实例:

mkdir cluster-test

cd cluster-test

mkdir 7000 7001 7002 7003 7004 7005

cd 7000

./redis-server redis.conf

 

iii.      现在我们已经有了六个正在运行中的 Redis 实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。需要安装ruby与rubygems

apt-get install ruby

gem install redis

 

 iv.     搭建集群:

./redis-trib.rb create --replicas 1127.0.0.1:7000 127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004127.0.0.1:7005

这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。


之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave redis-trib 会打印出一份预想中的配置给你看,如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:

[OK] All 16384 slotscovered

这表示集群中的 16384 个槽都有至少一个主节点在处理,集群运作正常.

 

  v.     测试 Redis 集群

$ redis-cli-c -p 7000

redis127.0.0.1:7000> set foo bar

->Redirected to slot [12182] located at 127.0.0.1:7002

OK

redis127.0.0.1:7002> set hello world

->Redirected to slot [866] located at 127.0.0.1:7000

OK

redis127.0.0.1:7000> get foo

->Redirected to slot [12182] located at 127.0.0.1:7002

"bar"

redis127.0.0.1:7000> get hello

->Redirected to slot [866] located at 127.0.0.1:7000

     "world"

 

 vi.     集群重新分片

./redis-trib.rb reshard 127.0.0.1:7000        
./redis-trib.rb check 127.0.0.1:7000          #检查集群状态

 cluster nodes


0 0