本文共 2801 字,大约阅读时间需要 9 分钟。
对于之前所讲的master+slave进行读写分离同时通过sentinel集群保障高可用的架构,对于一般的数据量系统已经足够。但是对于数据量庞大的T级别的数据,单master可能就无法满足横向扩展的场景。所以redis cluster支持多master+slave架构,支持读写分离和主备切换,多个master支持分片hash slot分布式存储数据
cluster-enabledcluster-config-file :指定一个文件,供cluster模式下的redis实例将集群状态保存在起来,包括集群中其他机器的信息,比如节点的上线和下线,故障转移,这些不是我们去维护,提供一个文件地址,让redis自己去维护cluster-node-timeout :节点存活超时时长,超过一定时长,认为节点宕机,master宕机的话就会触发主备切换,slave宕机就不会提供服务
我们模拟7001-7006端口号来部署6个redis节点,每台机器部署两个节点:
mkdir -p /etc/redis-cluster 存放cluster-config-file信息mkdir -p /var/log/redis 存放redis.conf配置信息mkdir -p /var/redis/7001 存放redis的持久化文件配置文件中的改动:port 7001cluster-enabled yescluster-config-file /etc/redis-cluster/node-7001.confcluster-node-timeout 15000daemonize yes pidfile /var/run/redis_7001.pid dir /var/redis/7001 logfile /var/log/redis/7001.logbind 192.168.1.107 appendonly yes
在对应的每台机器下的/etc/init.d中,放2个对应端口号的启动脚本,分别为: redis_7001, redis_7002…需要注意的是每个启动脚本内,都一定要修改对应的端口号
我们需要安装官方提供的redis-trib.rb来完成集群的管理:
yum install -y rubyyum install -y rubygemsgem install redis但是上述这种方式安装的ruby版本比较低,最后会导致无法成功安装,所以可以采取下述方式:wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gztar -zxvf ruby-2.3.1.tar.gz./configure -prefix=/usr/local/rubymake && make installcd /usr/local/rubycp bin/ruby /usr/local/bincp bin/gem /usr/local/bincd /usr/localwget http://rubygems.org/downloads/redis-3.3.0.gemgem install -l ./redis-3.3.0.gemgem list --check redis gem执行gem install -l ./redis-3.3.0.gem可能会出现以下错误:ERROR: Loading command: install (LoadError) cannot load such file -- zlibERROR: While executing gem ... (NoMethodError) undefined method `invoke_with_build_args' for nil:NilClass解决方法:进入ruby源码文件夹安装ruby自身提供的zlib包#cd ext/zlib#ruby ./extconf.rb#make#make install#cd ext/openssl#ruby ./extconf.rb#make#make install最后再执行cd /usr/localgem install -l ./redis-3.3.0.gem 即可成功安装通过gem list可以查看到redis
将redis-trib.rb配置到环境变量:
cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin
执行如下命令:
redis-trib.rb create --replicas 1 192.168.1.107:7001 192.168.1.107:7002 192.168.1.104:7003 192.168.1.104:7004 192.168.1.105:7005 192.168.1.105:7006
replicas表示每个master对应的slave节点数量,后续为所有节点服务地址。成功执行后会自动将所有节点配置成集群架构模式,会自动有以下特点:
读写分离、master-slave高可用主备切换、横向master数据分片
可以通过以下命令来核查:
redis-trib.rb check 192.168.31.187:7001
之前我们所搭建的一主多从架构模式,是为来水平扩展,但是基于redis cluster本身的master就可以进行横向扩展,所以我们使用redis cluster架构模式,读写都在master即可,对应的slave节点主要是进行热备切换。并且,redis cluster默认是没有开启在slave节点上的读操作,需要执行readonly命令来开启,此外,jedis也会将请求都发送至master,需要重新封装或者修改源码来达到基于redis cluster的读写分离实现,所以也没有必要在redis cluster进行读写分离。
转载地址:http://qqrgi.baihongyu.com/