Redis5.0.8 Cluster模式安装部署手册
1.基础环境
- 软件版本:centos7.8 、redis5.0.7
- 资源:需要1台虚拟机(占用6个port)或者6个虚拟机
2.Redis Cluster 离线安装
Redis Cluster是一种服务器端数据Sharding技术,3.0版本开始正式提供。Redis Cluster并没有使用一致性hash,而是采用slot(槽)的概念,一共分成16384个槽。客户端将请求发送到集群任意节点,接收到请求的节点会将查询请求发送到正确的节点上执行。当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node,由Redis客户端完成,对业务应用开发人员而言,就像操作单一Redis实例一样,这有点儿像浏览器页面的302 redirect跳转。
Redis集群,要保证16384个槽对应的node都正常工作,如果某个node发生故障,那它负责的slots也就失效,整个集群将不能工作。为了增加集群的可访问性,官方推荐的方案是将node配置成主从结构,即一个master节点,挂n个slave节点。这时,如果主节点失效,Redis Cluster会根据选举算法从slave节点中选择一个上升为主节点,整个集群继续对外提供服务,集群模式具有以下特点:
无中心架构,支持动态扩容,对业务透明
具备Sentinel的监控和自动Failover能力
客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
高性能,客户端直连redis服务,免去了proxy代理的损耗
缺点是运维也很复杂,数据迁移需要人工干预,只能使用0号数据库,不支持批量操作,分布式逻辑和存储模块耦合等。
由于Redis cluster是redis官方提供的,目前官方一直都在维护中,具有代表性,建议生产使用。
官方推荐集群至少需要六个节点,即三主三从。六个节点的配置文件基本相同,只需要修改端口号。
角色 | 端口 | 描述 |
---|---|---|
master | 6383 | |
master | 6384 | |
master | 6385 | |
slave | 6386 | |
slave | 6387 | |
slave | 6388 |
配置文件内容如下(只是端口号不同):
port 6383
bind 127.0.0.1
daemonize yes
cluster-enabled yes
cluster-config-file nodes_6383.conf
cluster-node-timeout 15000
现在,先使用redis-server
命令将6个Redis节点启动。然后使用Redis官方提供的redis-trib.rb
这个工具创建集群:
./redis-trib.rb create --replicas 1 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 127.0.0.1:6387 127.0.0.1:6388
备注:在任意一台Redis节点上运行即可,不用在每台机器上都运行,一台就够了。
但是要运行redis-trib.rb
命令,我们的主机还是要安装一些软件的。而在一台新的机器上离线安装这些软件,会让你非常难受,下面就来说说如何离线安装这些软件,也就是详细的安装步骤了。
详细的安装步骤
1.离线安装Ruby
可以在这里下载ruby源码。编译源码,然后进行安装:
# 解压源码包
tar -xzvf ruby-2.5.1.tar.gz
cd ruby-2.5.1
# 生成编译配置
./configure --prefix=/home/jelly/ruby
# 编译并安装
make && make install
# 配置环境变量
PATH=$PATH:/home/jelly/ruby/bin
# 测试
ruby -v</pre>
2.离线安装zlib
可以在这里下载zlib源码。编译源码,然后进行安装:
# 解压缩源码
tar -xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
# 生成编译配置
./configure --prefix=/home/jelly/zlib
# 编译并安装
make && make install</pre>
3.离线安装rubygems
可以在这里下载rubygems源码。编译源码,然后进行安装:
# 编译ruby中的zlib
cd /home/jelly/ruby-2.5.1/ext/zlib
ruby extconf.rb --with-zlib-include=/home/jelly/zlib/include/ --with-zlib-lib=/home/jelly/zlib/lib
# 解压源码包
tar -xzvf rubygems-2.7.7.tgz
cd rubygems-2.7.7
# 执行安装脚本,在这个过程中可能需要安装zlib
ruby setup.rb
# 验证gem是否可以使用
gem -v
4.安装rubygems的redis api
可以在这里下载rubygems的redis api。然后进行安装:
gem install -l redis-4.0.1.gem
gem list redis
5.执行创建Redis集群的命令
# 创建集群
./redis-trib.rb create --replicas 1 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 127.0.0.1:6387 127.0.0.1:6388
# 查看集群信息
127.0.0.1:6383> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:717
cluster_stats_messages_pong_sent:250
cluster_stats_messages_sent:967
cluster_stats_messages_ping_received:250
cluster_stats_messages_pong_received:221
cluster_stats_messages_received:471
# 查看集群当前节点信息
127.0.0.1:6383> cluster nodes
97ec5f3606ef995f952ffa17f05a4b1e70dbc392 127.0.0.1:6383@16383 myself,master - 0 1531145554000 1 connected 0-5460
1bddffff033ccf2182b3937e2d5f8af257d97416 127.0.0.1:6388@16388 slave 85162c300cf1701ff7ab5ef2bb14b9e5d7a9fc9c 0 1531145554000 6 connected
85162c300cf1701ff7ab5ef2bb14b9e5d7a9fc9c 127.0.0.1:6384@16384 master - 0 1531145555880 2 connected 5461-10922
c7b6fef3312033ede2993fcb0b0acabe3f6b9d78 127.0.0.1:6386@16386 slave 6edac8e90957060ef176cf5ac627f9f68bac054e 0 1531145554874 4 connected
3865043ff47b60ddd099c93741d76abda3be9ecc 127.0.0.1:6387@16387 slave 97ec5f3606ef995f952ffa17f05a4b1e70dbc392 0 1531145555000 5 connected
6edac8e90957060ef176cf5ac627f9f68bac054e 127.0.0.1:6385@16385 master - 0 1531145553000 3 connected 10923-16383
# 查看集群状态信息
./redis-trib.rb check 127.0.0.1:6383
>>> Performing Cluster Check (using node 127.0.0.1:6383)
M: 97ec5f3606ef995f952ffa17f05a4b1e70dbc392 127.0.0.1:6383
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 1bddffff033ccf2182b3937e2d5f8af257d97416 127.0.0.1:6388
slots: (0 slots) slave
replicates 85162c300cf1701ff7ab5ef2bb14b9e5d7a9fc9c
M: 85162c300cf1701ff7ab5ef2bb14b9e5d7a9fc9c 127.0.0.1:6384
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: c7b6fef3312033ede2993fcb0b0acabe3f6b9d78 127.0.0.1:6386
slots: (0 slots) slave
replicates 6edac8e90957060ef176cf5ac627f9f68bac054e
S: 3865043ff47b60ddd099c93741d76abda3be9ecc 127.0.0.1:6387
slots: (0 slots) slave
replicates 97ec5f3606ef995f952ffa17f05a4b1e70dbc392
M: 6edac8e90957060ef176cf5ac627f9f68bac054e 127.0.0.1:6385
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.
到此,关于redis cluster如何搭建就总结完毕了。