这次给大家带来的是redis cluster集群搭建。
1、首先,我们先根据文档建立6个文件夹,可以将目录cluster-test(文件夹名称及位置随意)建立在编译完成的redis根目录下,然后cd进入clustert-test,再创建7000-7005共6个文件夹,
- mkdir cluster-test
- cd cluster-test
- mkdir 7000 7001 7002 7003 7004 7005
再为每个文件夹添加一个redis.conf文件,redis.conf文件从我们的redis根目录获取即可。
2、然后我们需要在redis.conf中对应的代码修改为如下形式:
- port 7000
- cluster-enabled yes
- cluster-config-file nodes.conf
- cluster-node-timeout 5000
- appendonly yes
端口号从7000-7005依次配置即可
3、之后,我们需要分别启动6个redis,不过,首先需要进入redis.conf文件所在的目录,比如7000目录,然后再执行启动命令。
为什么这么做呢,其实运行之后再进入7000-7005文件夹一看就明白了,每个文件夹下面都产生了对应的一些文件,比如上面redis.conf配置第3行的nodes.conf,博主就被坑了下_(:з」∠)_......
启动命令:
- cd 7000
- redis-server ./redis.conf
redis-server为redis的启动命令,需要你自己添加到环境变量
4、现在需要安装redis的ruby模块,因为作者写的脚本需要
- yum install ruby
- yum install rubygems
- gem install redis
然后进入redis的src目录,执行下列语句
- ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
- 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
这样一来就完成了集群,6个redis为3主3从模式,
- redis-cli -p 7000 cluster nodes
通过这条语句,能够输出主从关系
5、最后我们可以试验下了:
- >redis-cli -c -h 127.0.0.1 -p 7000
注意,这里添加了参数-c,意思为进入集群模式。
- 127.0.0.1:7000> set a 10
- -> Redirected to slot [15495] located at 127.0.0.1:7002
这里,a这个缓存经过计算后,落在了端口为7002的master上,slot为槽:
HASH_SLOT = CRC16(key) mod 16384
通过cluster nodes可以看到每个master对应的槽
- 127.0.0.1:7002> cluster nodes
- b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 1458577108602 7 connected
- 3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458577109102 6 connected
- ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458577108100 7 connected 0-5460
- 56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458577110103 5 connected
- 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 myself,master - 0 0 3 connected 10923-16383
- 5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458577108601 2 connected 5461-1092
细心的读者可以发现,我的7000为slave,7003为master,这是因为我把7000手动kill掉之后又再次启动了。
6、关于cluster的扩容:
再创建7006与7007两个服务,过程同上,之后执行:
- ./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
第一个地址为我们需要添加的节点,第二个为集群中任意一个有效节点,输出
- >>> Adding node 127.0.0.1:7006 to cluster 127.0.0.1:7000
- >>> Performing Cluster Check (using node 127.0.0.1:7000)
- S: b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000
- slots: (0 slots) slave
- replicates ce09b994443852c51f75a82b032ee4a0c0a203c5
- M: 5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001
- slots:5461-10922 (5462 slots) master
- 1 additional replica(s)
- S: 56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004
- slots: (0 slots) slave
- replicates 5f29d9b84350df536d60a1b32d93196d2be1b338
- M: 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002
- slots:10923-16383 (5461 slots) master
- 1 additional replica(s)
- S: 3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005
- slots: (0 slots) slave
- replicates 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7
- M: ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003
- slots:0-5460 (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.
- >>> Send CLUSTER MEET to node 127.0.0.1:7006 to make it join the cluster.
- [OK] New node added correctly.
再查看下主从状态:
- 127.0.0.1:7000> cluster nodes
- b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 myself,slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 0 1 connected
- 5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458578163681 2 connected 5461-10922
- 56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458578164182 5 connected
- 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 master - 0 1458578163180 3 connected 10923-16383
- 3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458578163681 6 connected
- ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458578164182 7 connected 0-5460
- 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7006 master - 0 1458578164684 0 connecte
能够看到,7006已经成为了master,再将7007作为7006的slave加入集群:
- ./redis-trib.rb add-node --slave --master-id 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7007 127.0.0.1:7000
-slave 表示当前节点为slave,--master-id 表示作为谁的slave,然后进行确认:
- 127.0.0.1:7000> cluster nodes
- b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 myself,slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 0 1 connected
- 5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458578725767 2 connected 5461-10922
- 56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458578725265 5 connected
- 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 master - 0 1458578725767 3 connected 10923-16383
- 7a4d3410f9b4f06733a08b79c2aa10a3762e565b 127.0.0.1:7007 slave 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 0 1458578724264 0 connected
- 3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458578724764 6 connected
- ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458578724764 7 connected 0-5460
- 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7006 master - 0 1458578724264 0 connected
这是7007已经成为了7006的slave了。
7、这时候又来了一个问题,就是7006并没有分配slot
所以,我们可以执行下列语句,重新划分slot:
- > ./redis-trib.rb reshard 127.0.0.1:7000
中间会有几步选择:
- How many slots do you want to move (from 1 to 16384)? 1000
- What is the receiving node ID? 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9
- 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
1、1000表示从现有的slot中取出1000个slot,
2、node ID表示1中slot转移到的节点(此处为7006),
3、source node表示从哪个节点取出这1000个slot分配给目标节点。验证:
- 127.0.0.1:7000> cluster nodes
- b3b19495801d2bf7960ae857ac5acd41884ab20f 127.0.0.1:7000 myself,slave ce09b994443852c51f75a82b032ee4a0c0a203c5 0 0 1 connected
- 5f29d9b84350df536d60a1b32d93196d2be1b338 127.0.0.1:7001 master - 0 1458578948666 2 connected 5795-10922
- 56d52eb49e6f9bcd2652b7f4cc00028e28fb346c 127.0.0.1:7004 slave 5f29d9b84350df536d60a1b32d93196d2be1b338 0 1458578947665 5 connected
- 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 127.0.0.1:7002 master - 0 1458578949669 3 connected 11256-16383
- 7a4d3410f9b4f06733a08b79c2aa10a3762e565b 127.0.0.1:7007 slave 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 0 1458578948165 9 connected
- 3dff391695f54477b4290afe434b8bda4bfec4e2 127.0.0.1:7005 slave 3fcd607421bfe9be0f277653cfd924c2c6d1c3c7 0 1458578949167 6 connected
- ce09b994443852c51f75a82b032ee4a0c0a203c5 127.0.0.1:7003 master - 0 1458578948165 7 connected 333-5460
- 88645a7e5d89fb66de5ae9d7a4b90324a8acb7d9 127.0.0.1:7006 master - 0 1458578949167 9 connected 0-332 5461-5794 10923-11255
可以看到,我们已经为7006节点分配了1000个slot了。
8、最后,就是删除节点了:
- ./redis-trib.rb del-node 127.0.0.1:7000 7a4d3410f9b4f06733a08b79c2aa10a3762e565b
del-node 表示删除节点,第一个参数为任意一个有效节点,第二个参数为要删除的目标节点的ID
只有空的master节点以及slave节点能够删除,否则需要先reshard,将目标master的slot全部转移掉才行,并且此时该node的slave会寻找其他的master。
删除节点还会将目标节点的redis服务停止,需要注意。
获取【下载地址】 QQ: 313596790 【免费支持更新】
支持三大数据库 mysql oracle sqlsever 更专业、更强悍、适合不同用户群体
【新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统】
A 代码生成器(开发利器);
增删改查的处理类,service层,mybatis的xml,SQL( mysql 和oracle)脚本, jsp页面 都生成
就不用写搬砖的代码了,生成的放到项目里,可以直接运行
B 阿里巴巴数据库连接池druid;
数据库连接池 阿里巴巴的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势
C 安全权限框架shiro ;
Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠
D ehcache 分布式缓存;
是一个纯Java的进程内缓存框架,具有快速、精干等特点,广泛使用的开源Java分布式缓存。
E 微信接口开发(后续会加入Activiti5 工作流 )赠送一个jbpm工作流大型ERP系统(含OA、财务、分销)参考学习
F WebSocket 通信技术 (即时聊天、及时站内信并声音提醒、实时在线管理)