redis从3.0版本之后开始提供集群功能,集群的特点:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot(插槽)上,cluster 负责维护node<->slot<->value。
搭建集群的方法:
集群至少都需要三个redis才能称得上集群,我的搭建方法是伪集群。
1、分别设置三个redis的端口号:6379 6380 6381
2、修改配置文件redis.conf,开启集群和打开集群的配置文件:cluster-enabled yes cluster-config-file "nodes-xxxx.conf"
3、然后启动redis,会看到命令后面有[cluster],代表开启了集群功能。
4、创建集群,创建集群首先要安装ruby环境。
- 因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。
- yum -y install zlib ruby rubygems
- gem install redis
- 手动安装: rz上传redis-3.2.1.gem
- gem install -l redis-3.2.1.gem 中间是字母L(l小写的)
5、进入redis的安装包路径下的src:cd /usr/local/src/redis/redis-3.0.1/src/ 找到redis-trib.rb的可执行命令
直接执行redis-trib.rb 会出现这个命令的使用方法。
6、执行命令:./redis-trib.rb create --replicas 0 192.168.58.102:6379 192.168.58.102:6380 192.168.58.102:6381
--replicas 0:指定了从数据的数量为0
注意:这里不能使用127.0.0.1,否则在Jedis客户端使用时无法连接到!
然后开始创建集群功能。
7、新增一个节点的方法:在安装一个redis,设置端口号是6382,对它开启集群功能并且启动这个redis。然后执行
脚本 ./redis-trib.rb add-node 192.168.58.102:6382 192.168.58.102:6379 前面是插入的节点,后面是被插件集群的任何一个节点。只要是redi集群里面的ip加端口号就可以。添加成功之后,发现没有插槽数,需要为新增的这个节点分配插槽数。在src目录下输入 ./redis-trib.rb reshard 192.168.58.102:6379命令
查看节点情况:
8、删除集群节点:
1、想要删除集群节点中的某一个节点,需要严格执行2步:
- 将这个节点上的所有插槽转移到其他节点上;
- 假设我们想要删除6380这个节点
- 执行脚本:./redis-trib.rb reshard 192.168.56.102:6380
- 选择需要转移的插槽的数量,因为6380有5128个,所以转移5128个
- 输入转移的节点的id,我们转移到6382节点:82ed0d63cfa6d19956dca833930977a87d6ddf7
- 输入插槽来源id,也就是6380的id:
-
输入done,开始转移
2、使用redis-trib.rb删除节点
del-node host:port node_id
命令具体使用方法 ./redis-trib.rb del-node 192.168.56.102:6380 4a9b8886ba5261e82597f5590fcdb49ea47c4c6c
使用cluster nodes查看已经没有改节点。
9、上面的集群比较弱,其中一个节点断掉,其余的redis都不能使用啦,我们需要搭建一个集群的主从复制架构。
架构图:
如果其中的一个从架构出现宕机,不会影响系统的使用。如果主架构出现问题,从架构就会推荐一个然后默认变成一个主架构。下次启用之后启用的架构就会变成一个slave。master宕机,slave变成master,master启动之后变成slave。
至少需要六个redis实例:
6379(主) 6479(从)
6380(主) 6480(从)
6381(主) 6481(从)
分别启动,启动有一个快捷键:cd 6379/ && redis-server ./redis.conf && cd ../
然后进入安装目录的src下:输入下面的命令:
创建集群,指定了从库数量为1,创建顺序为主库(3个)、从库(3个):
./redis-trib.rb create --replicas 1 192.168.56.102:6379 192.168.56.102:6380 192.168.56.102:6381 192.168.56.102:6479 192.168.56.102:6480 192.168.56.102:6481
创建成功!查看集群信息:
然后进行测试:看是否成功!
10、集群的注意:
- 多键的命令操作(如MGET、MSET),如果每个键都位于同一个节点,则可以正常支持,否则会提示错误。
- 集群中的节点只能使用0号数据库,如果执行SELECT切换数据库会提示错误。