redis cluster集群搭建与深入分析(1)

来源:互联网 发布:淘宝禁售商品管理规范 编辑:程序博客网 时间:2024/05/22 08:19

对于之前所讲的master+slave进行读写分离同时通过sentinel集群保障高可用的架构,对于一般的数据量系统已经足够。但是对于数据量庞大的T级别的数据,单master可能就无法满足横向扩展的场景。所以redis cluster支持多master+slave架构,支持读写分离和主备切换,多个master支持分片hash slot分布式存储数据

  • redis cluster的重要配置
cluster-enabled <yes/no>cluster-config-file <filename>:指定一个文件,供cluster模式下的redis实例将集群状态保存在起来,包括集群中其他机器的信息,比如节点的上线和下线,故障转移,这些不是我们去维护,提供一个文件地址,让redis自己去维护cluster-node-timeout <milliseconds>:节点存活超时时长,超过一定时长,认为节点宕机,master宕机的话就会触发主备切换,slave宕机就不会提供服务
  • 在3台机器上启动6个redis实例
    对于redis cluster集群,要求至少3个master,从而能够组成一个健壮的分布式的集群,每个master都建议至少给一个slave,3个master,3个slave,所以建议在正式环境下,能够部署6台机器去搭建redis cluster集群,最少的情况是有3台机器,此时需要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进行读写分离。

原创粉丝点击