Redis 集群

搭建Redis 集群的过程:

 

  集群介绍:

          redis3.x 后的集群 ,是多主多从的集群,多个主机组成一个集群的主体,共同负责对外提供读写服务。

每个主机都有自己的从机,从机的主要工作是:1. 同步主机数据 2.当主机宕机时顶替主机。

  搭建过程(在linux系统模拟)

一、安装依赖

          安装流程:

     1、yum -y install gcc zlib-devel openssl openssl-devel

     2、tar -zxvf ruby-2.4.2.tar.gz

     3、cd到解压目录

     4../configure --prefix=/usr/local/ruby2.4.2

     5、make && make install

     6、yum -y install rubygems

     7、rm -f /usr/bin/ruby

            rm -f /usr/bin/gem

             ln -s /usr/local/ruby2.4.2/bin/gem /usr/bin/gem**

            ln -s /usr/local/ruby2.4.2/bin/ruby /usr/bin/ruby

     8、gem install redis -v 3.3.5 #测试3.2.1到3.3.5都可以,4.x以上的分片报错

 

注意,集群的搭建,至少需要6台虚拟机,因为至少3台主机才能形成集群,每个主机至少有一个从机。

二  、搭建配置

当前虚拟机的Redis,开启cluster支持
cluster-enabled yes

当前虚拟机的Redis 用来保存集群信息的文件,保存位置在工作目录下
cluster-config-file nodes-8001.conf

bind配置中不配置127.0.0.1,否则redis会自动以127.0.0.1作为ip,使得无法通过java远程连接集群
bind 192.168.110.135

 将此目录直接上传给linux,放在 "/usr/local"目录即可。

三、启动redis

在/usr/local/rediss目录下执行,启动6个redis服务
 注意是否有执行权限
./startall.sh
  查看redis服务
ps -ef | grep redis

四、创建集群

  在 /usr/local/redis-4.0.14/src 目录下执行,开始创建集群  (redis-4.0.14 redis解压目录)
./redis-trib.rb create --replicas 1(从机个数) 192.168.110.135:8001  192.168.110.135:8002  192.168.110.135:8003 192.168.110.135:8004 192.168.110.135:8005 192.168.110.135:8006

  最后输入 “yes”

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.110.135:8001
192.168.110.135:8002
192.168.110.135:8003
Adding replica 192.168.110.135:9005 to 192.168.110.135:8001
Adding replica 192.168.110.135:9006 to 192.168.110.135:8002
Adding replica 192.168.110.135:9004 to 192.168.110.135:8003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: c3e026595c56e989cbcef7bcb6ac868b458141df 192.168.110.135:8001
   slots:0-5460 (5461 slots) master
M: 29fe6ceb1d7b698bfe161f8d8e15f9ee8d735527 192.168.110.135:8002
   slots:5461-10922 (5462 slots) master
M: 67e692825590b41b5017e93c9090eed82fc9f3b1 192.168.110.135:8003
   slots:10923-16383 (5461 slots) master
S: 27ecc39812069e764d880002d67bd252c78b051d 192.168.110.135:8004
   replicates 29fe6ceb1d7b698bfe161f8d8e15f9ee8d735527
S: 721c200f8e5cff46ab5b3332d9be01c988e37c9e 192.168.110.135:8005
   replicates 67e692825590b41b5017e93c9090eed82fc9f3b1
S: 07401d81b187002cbca95ec979580436a14e0d5d 192.168.110.135:8006
   replicates c3e026595c56e989cbcef7bcb6ac868b458141df
Can I set the above configuration? (type 'yes' to accept): yes

 

M: c3e026595c56e989cbcef7bcb6ac868b458141df 192.168.110.135:8001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 67e692825590b41b5017e93c9090eed82fc9f3b1 127.0.0.1:8003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 721c200f8e5cff46ab5b3332d9be01c988e37c9e 127.0.0.1:8005
   slots: (0 slots) slave
   replicates 67e692825590b41b5017e93c9090eed82fc9f3b1
S: 27ecc39812069e764d880002d67bd252c78b051d 127.0.0.1:8004
   slots: (0 slots) slave
   replicates 29fe6ceb1d7b698bfe161f8d8e15f9ee8d735527
M: 29fe6ceb1d7b698bfe161f8d8e15f9ee8d735527 127.0.0.1:8002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 07401d81b187002cbca95ec979580436a14e0d5d 127.0.0.1:8006
   slots: (0 slots) slave
   replicates c3e026595c56e989cbcef7bcb6ac868b458141df
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 

见到如上输出,集群即创建完毕。

 五. 槽

slot : 槽,集群共有16384个slot,索引为 0-16383。

M: c3e026595c56e989cbcef7bcb6ac868b458141df 192.168.110.135:8001 【主机1】
   slots:0-5460 (5461 slots) master 【主机1】
   1 additional replica(s) 【主机1有1个从机】
M: 67e692825590b41b5017e93c9090eed82fc9f3b1 127.0.0.1:8003 【主机2】
   slots:10923-16383 (5461 slots) master 【主机2】
   1 additional replica(s) 【主机2有1个从机】
S: 721c200f8e5cff46ab5b3332d9be01c988e37c9e 127.0.0.1:8005 【从机a】
   slots: (0 slots) slave 【从机a】
   replicates 67e692825590b41b5017e93c9090eed82fc9f3b1 【从机a的主机的id,则从机a是属于主机2的】
S: 27ecc39812069e764d880002d67bd252c78b051d 127.0.0.1:8004 【从机b】
   slots: (0 slots) slave 【从机b】
   replicates 29fe6ceb1d7b698bfe161f8d8e15f9ee8d735527  【从机b的主机的id,则从机b是属于主机3的】
M: 29fe6ceb1d7b698bfe161f8d8e15f9ee8d735527 127.0.0.1:8002 【主机3】
   slots:5461-10922 (5462 slots) master 【主机3】
   1 additional replica(s) 【主机3有1个从机】
S: 07401d81b187002cbca95ec979580436a14e0d5d 127.0.0.1:8006 【从机c】
   slots: (0 slots) slave 【从机c】
   replicates c3e026595c56e989cbcef7bcb6ac868b458141df  【从机c的主机的id,则从机c是属于主机1的】
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

     如上是集群中的3主 3从,主机1持有槽【0-5460】 主机2持有槽【10923-16383】 主机3持有槽【5461-10922】。

      注意:只有主机才占有槽,槽并不是一个存储单位。槽是redis集群做负载均衡的计量。

六、 连接集群

 redis-cli -c -p 9001 -h 192.168.110.135

七、集群操作

192.168.110.135:9001> set name AAA
-> Redirected to slot [5798] located at 127.0.0.1:9002 【经计算 name应该由9002存储】
OK

192.168.110.135:9002> set gender na
-> Redirected to slot [15355] located at 127.0.0.1:9003 【经计算 gender应该由9003存储】
OK

      所谓的计算,是对读/写 操作中的 key 做一致性hash运算,得到一个数字 num, 然后 num%16384

得到 一个 [0--16383]区间的数字

如 name 的运算结果为 5798 gender的运算结果为15355 age的运算结果为741

5798,15355,741是槽的下标,则对应的key由对应主机存储

 

八、添加主节点

      添加一套Redis 主机配置    启动redis

做如下配置:

                                 新机器的ip:port      集群某个成员的ip:port
[root@z src]# ./redis-trib.rb add-node 192.168.79.128:9007 192.168.79.128:9006

 

如果成功,会有如下输出
>>> Adding node 192.168.79.128:9007 to cluster 192.168.79.128:8006
>>> Performing Cluster Check (using node 192.168.79.128:9006)
S: f6eb31694591a3d7d4d63a13d6775d0397ccabcc 192.168.79.128:8006
   slots: (0 slots) slave
   replicates 9a4d54b36e525118b1b9c0f94c65320e5584feb7
S: 3ababf9bd48fab51f0e786ba36dfbdab43e31741 192.168.79.128:8005
   slots: (0 slots) slave
   replicates 8c8acf426bc93340b01942b8567230db7bd82577
M: 8c8acf426bc93340b01942b8567230db7bd82577 192.168.79.128:8003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 9b7d58f0be57d54e6044dc1a8101f12e0fddc849 192.168.79.128:8004
   slots: (0 slots) slave
   replicates 798e705d85c0e6bd432e7103a6b5ccad0f30f29c
M: 9a4d54b36e525118b1b9c0f94c65320e5584feb7 192.168.79.128:8001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 798e705d85c0e6bd432e7103a6b5ccad0f30f29c 192.168.79.128:8002
   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.
>>> Send CLUSTER MEET to node 192.168.79.128:9007 to make it join the cluster.
[OK] New node added correctly.

  重新分片 :

      新加的主机没有slot,需要将已有主机的slot分出部分给它。最终保证所有主机的slot个数是均衡的。

执行如下指令,开始重新分片:

# ./redis-trib.rb reshard 192.168.79.128:8006 (集群中的任意一个)

  下一步,会有如下输出
How many slots do you want to move (from 1 to 16384)? [在此输入要给新机器分配的槽的数量]

下一步,会有如下输出
What is the receiving node ID? [在此输入新机器的节点id]

下一步,会有如下输出
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1:[再次输入"all"]

下一步,会有如下输出
Do you want to proceed with the proposed reshard plan (yes/no)? [在此输入”yes“]
之后便会进行分片操作

 分片后,执行如下指令检查 集群状态
[root@z src]# ./redis-trib.rb check 192.168.79.128:8002

 

添加从节点:

添加一套Redis 主机配置    启动redis

                                                               从机                             主机id
[root@z src]# ./redis-trib.rb  add-node --slave --master-id ad27f044c31b8c3e0e43a5b1dff080144d9ca85f 192.168.79.128:9008 192.168.79.128:9006
      新机器ip:port           已有机器ip:port

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值