您的位置:首页 > 数据库 > Redis

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

2017-10-16 21:52 459 查看
对于之前所讲的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 7001
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-7001.conf
cluster-node-timeout 15000
daemonize   yes
pidfile     /var/run/redis_7001.pid
dir         /var/redis/7001
logfile /var/log/redis/7001.log
bind 192.168.1.107
appendonly yes


在对应的每台机器下的/etc/init.d中,放2个对应端口号的启动脚本,分别为: redis_7001, redis_7002…需要注意的是每个启动脚本内,都一定要修改对应的端口号

我们需要安装官方提供的redis-trib.rb来完成集群的管理:

yum install -y ruby
yum install -y rubygems
gem install redis

但是上述这种方式安装的ruby版本比较低,最后会导致无法成功安装,所以可以采取下述方式:

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz tar -zxvf ruby-2.3.1.tar.gz
./configure -prefix=/usr/local/ruby
make && make install
cd /usr/local/ruby
cp bin/ruby /usr/local/bin
cp bin/gem /usr/local/bin

cd /usr/local
wget http://rubygems.org/downloads/redis-3.3.0.gem gem install -l ./redis-3.3.0.gem
gem list --check redis gem

执行gem install -l ./redis-3.3.0.gem可能会出现以下错误:
ERROR:  Loading command: install (LoadError)
cannot load such file -- zlib
ERROR:  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/local
gem 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进行读写分离。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 集群