- 简介
redis cluster: 自动做master+slave复制和读写分离,master+slave高可用和主备切换,支持多个master的hash slot支持数据分布式存储。 - 环境准备
redis cluster集群,要求至少3个master,去组成一个高可用,健壮的分布式的集群,每个master都建议至少给一个slave,
3个master,3个slave。正式环境下,建议都是说在6台机器上去搭建。3台机器的话要保证,每个master都跟自己的slave
不在同一台机器上,如果master和slave都在同一台机器的话,出了问题会一起死掉。
我们这里的三台机器如下:
eshop-cache01(192.168.191.101),
eshop-cache02(192.168.191.102),
eshop-cache03(192.168.191.103), - 在三台服务器上建立如下文件夹
- 创建6个配置文件,因为我们是3个master,3个slave,所以我们需要不同的实例端口
配置文件分别为:7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf
端口:7001,7002,7003,7004,7005,7006
文件分配:
eshop-cache01(192.168.191.101)---->7001.conf,7002.conf
eshop-cache02(192.168.191.102)---->7003.conf,7004.conf
eshop-cache03(192.168.191.103)---->7005.conf,7006.conf
提前将工作目录建好:
eshop-cache01(192.168.191.101)
mkdir -p /var/redis/7001
mkdir -p /var/redis/7002
eshop-cache02(192.168.191.102)
mkdir -p /var/redis/7003
mkdir -p /var/redis/7004
eshop-cache03(192.168.191.103)
mkdir -p /var/redis/7005
mkdir -p /var/redis/7006 - 修改redis.conf配置文件名为7001.conf,并且修改文件内容,如下
- #端口为5000
- port 7001
- #如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例
- cluster-enabled yes
- #虽然此配置的名字叫"集群配置文件",但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点
- #他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
- #集群搭建成功后会自动生成,在工作目录下
- cluster-config-file /etc/redis-cluster/node-7001.conf
- #节点宕机发现时间,可以理解为主节点宕机后从节点升级为主节点时间
- cluster-node-timeout 15000
- #守护进程模式
- daemonize yes
- #pid file所在目录
- pidfile "/var/run/redis_7001.pid"
- #指定工作目录,rdb,aof持久化文件将会放在该目录下,不同实例一定要配置不同的工作目录
- dir "/var/redis/7001"
- #指明日志文件名
- logfile "/var/log/redis/7001.log"
- #设置绑定IP地址
- bind 192.168.191.101 127.0.0.1
- #开启AOF模式
- appendonly yes
将文件上传到/etc/redis目录下。
- 继续创建7002.conf,7003.conf,7004.conf,7005.conf,7006.conf,并重新修改
port 、dir、cluster-config-file ,pidfile,logfile,bind等6个属性,根据不同的服务器地址修改,
最后将这些文件按照分配分发到不同机器的/etc/redis目录下。
eshop-cache01(192.168.191.101)---->7001.conf,7002.conf
eshop-cache02(192.168.191.102)---->7003.conf,7004.conf
eshop-cache03(192.168.191.103)---->7005.conf,7006.conf
- 准备环境的启动脚本,在/etc/init.d下,将/usr/local/module/redis-5.0.5/utils目录下redis_init_script拷贝到/etc/init.d下,分别
名称为redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006
eshop-cache01(192.168.191.101)---->redis_7001, redis_7002
eshop-cache02(192.168.191.102)---->redis_7003, redis_7004
eshop-cache03(192.168.191.103)----> redis_7005, redis_7006
修改内容:将REDISPORT修改为指定的7001,7002,7003,7004,7005,7006即可
- 在/etc/init.d下,分别通过redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006启动redis
例如:
- 安装ruby
构建 redis集群需要使用到ruby 并且版本ruby版本必须大于2.0 但是针对redis版本低于5.0的版本,对于高于5.0的版本在构建中
不需 要安装ruby,就能进行redis集群的构建。需要的话命令如下:
yum install -y ruby
yum install -y rubygems
gem install redis
cp /usr/local/module/redis-5.0.5/src/redis-trib.rb /usr/local/bin - 用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现),进入/etc/init.d目录下
命令:redis-cli --cluster create --cluster-replicas 1 192.168.191.101:7001 192.168.191.101:7002 192.168.191.102:7003 192.168.191.102:7004 192.168.191.103:7005 192.168.191.103:7006
--replicas: 每个master有几个slave
6台机器,3个master,3个slave,集群会尽量自己让master和slave不在一台机器上
- 目前的集群状态
读写分离:每个master都有一个slave
高可用:master宕机,slave自动被切换过去
多master:横向扩容支持更大数据量 - 使用redis-cli --cluster check 192.168.191.101:7001检查集群状态slots详细分配
上图可以发现显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别
映射了0-5460、5461-10922、10933-16383 solts。 - 测试效果
⑴实验多master写入 -> 海量数据的分布式存储
a:连接7001,插入数据
原因:
在redis cluster写入数据的时候,其实是你可以将请求发送到任意一个master上去执行,但是,每个
master都会计算这个key对应的CRC16值,然后对16384个hashslot取模,找到key对应的hash slot,找
到hash slot对应的master,如果对应的master就在自己本地的话,set mykey1 v1,mykey1这个key对应
的hashslot就在自己本地,那么自己就处理掉了,但是如果计算出来的hashslot在其他master上,那么就
会给客户端返回一个moved error,告诉你,你得到哪个master上去执行这条写入的命令。
什么叫做多master的写入?就是每条数据只能存在于一个master上,不同的master负责存储不同的数据,
分布式的数据存储。100w条数据,5个master,每个master就负责存储20w条数据,分布式数据存储.
所以我们到103服务器执行一下(获取也是一样):
⑵实验不同master各自的slave读取 -> 读写分离
在这个redis cluster中,如果你要在slave读取数据,那么需要带上readonly指令,get mykey1,比如102服务器的7004
就是101服务器7001的slave,我们获取一下:
或者使用 redis-cli -h 192.168.191.102 -p 7004 -c启动,就会自动进行各种底层的重定向的操作
redis cluster的架构下,实际上本身master就是可以任意扩展的,你如果要支撑更大的读吞吐量,或者写吞吐量,
或者数据量,都可以直接对master进行横向扩展就可以了,也可以实现支撑更高的读吞吐的效果,所以说扩容
master,跟之前扩容slave,效果是一样的。
⑶实验自动故障切换 -> 高可用性
比如把master1,101服务器的7001,杀掉,看看它对应的102:7004能不能自动切换成master,可以自动切换
检测集群状态:
Redis cluster之主从复制,高可用,多master集群搭建_redis cluster集群多个master怎么关联
CSDN博客 · · 337 次点击 · · 开始浏览- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
- 简介
redis cluster: 自动做master+slave复制和读写分离,master+slave高可用和主备切换,支持多个master的hash slot支持数据分布式存储。 - 环境准备
redis cluster集群,要求至少3个master,去组成一个高可用,健壮的分布式的集群,每个master都建议至少给一个slave,
3个master,3个slave。正式环境下,建议都是说在6台机器上去搭建。3台机器的话要保证,每个master都跟自己的slave
不在同一台机器上,如果master和slave都在同一台机器的话,出了问题会一起死掉。
我们这里的三台机器如下:
eshop-cache01(192.168.191.101),
eshop-cache02(192.168.191.102),
eshop-cache03(192.168.191.103), - 在三台服务器上建立如下文件夹
- 创建6个配置文件,因为我们是3个master,3个slave,所以我们需要不同的实例端口
配置文件分别为:7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf
端口:7001,7002,7003,7004,7005,7006
文件分配:
eshop-cache01(192.168.191.101)---->7001.conf,7002.conf
eshop-cache02(192.168.191.102)---->7003.conf,7004.conf
eshop-cache03(192.168.191.103)---->7005.conf,7006.conf
提前将工作目录建好:
eshop-cache01(192.168.191.101)
mkdir -p /var/redis/7001
mkdir -p /var/redis/7002
eshop-cache02(192.168.191.102)
mkdir -p /var/redis/7003
mkdir -p /var/redis/7004
eshop-cache03(192.168.191.103)
mkdir -p /var/redis/7005
mkdir -p /var/redis/7006 - 修改redis.conf配置文件名为7001.conf,并且修改文件内容,如下
- #端口为5000
- port 7001
- #如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例
- cluster-enabled yes
- #虽然此配置的名字叫"集群配置文件",但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点
- #他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
- #集群搭建成功后会自动生成,在工作目录下
- cluster-config-file /etc/redis-cluster/node-7001.conf
- #节点宕机发现时间,可以理解为主节点宕机后从节点升级为主节点时间
- cluster-node-timeout 15000
- #守护进程模式
- daemonize yes
- #pid file所在目录
- pidfile "/var/run/redis_7001.pid"
- #指定工作目录,rdb,aof持久化文件将会放在该目录下,不同实例一定要配置不同的工作目录
- dir "/var/redis/7001"
- #指明日志文件名
- logfile "/var/log/redis/7001.log"
- #设置绑定IP地址
- bind 192.168.191.101 127.0.0.1
- #开启AOF模式
- appendonly yes
将文件上传到/etc/redis目录下。
- 继续创建7002.conf,7003.conf,7004.conf,7005.conf,7006.conf,并重新修改
port 、dir、cluster-config-file ,pidfile,logfile,bind等6个属性,根据不同的服务器地址修改,
最后将这些文件按照分配分发到不同机器的/etc/redis目录下。
eshop-cache01(192.168.191.101)---->7001.conf,7002.conf
eshop-cache02(192.168.191.102)---->7003.conf,7004.conf
eshop-cache03(192.168.191.103)---->7005.conf,7006.conf
- 准备环境的启动脚本,在/etc/init.d下,将/usr/local/module/redis-5.0.5/utils目录下redis_init_script拷贝到/etc/init.d下,分别
名称为redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006
eshop-cache01(192.168.191.101)---->redis_7001, redis_7002
eshop-cache02(192.168.191.102)---->redis_7003, redis_7004
eshop-cache03(192.168.191.103)----> redis_7005, redis_7006
修改内容:将REDISPORT修改为指定的7001,7002,7003,7004,7005,7006即可
- 在/etc/init.d下,分别通过redis_7001, redis_7002, redis_7003, redis_7004, redis_7005, redis_7006启动redis
例如:
- 安装ruby
构建 redis集群需要使用到ruby 并且版本ruby版本必须大于2.0 但是针对redis版本低于5.0的版本,对于高于5.0的版本在构建中
不需 要安装ruby,就能进行redis集群的构建。需要的话命令如下:
yum install -y ruby
yum install -y rubygems
gem install redis
cp /usr/local/module/redis-5.0.5/src/redis-trib.rb /usr/local/bin - 用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现),进入/etc/init.d目录下
命令:redis-cli --cluster create --cluster-replicas 1 192.168.191.101:7001 192.168.191.101:7002 192.168.191.102:7003 192.168.191.102:7004 192.168.191.103:7005 192.168.191.103:7006
--replicas: 每个master有几个slave
6台机器,3个master,3个slave,集群会尽量自己让master和slave不在一台机器上
- 目前的集群状态
读写分离:每个master都有一个slave
高可用:master宕机,slave自动被切换过去
多master:横向扩容支持更大数据量 - 使用redis-cli --cluster check 192.168.191.101:7001检查集群状态slots详细分配
上图可以发现显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别
映射了0-5460、5461-10922、10933-16383 solts。 - 测试效果
⑴实验多master写入 -> 海量数据的分布式存储
a:连接7001,插入数据
原因:
在redis cluster写入数据的时候,其实是你可以将请求发送到任意一个master上去执行,但是,每个
master都会计算这个key对应的CRC16值,然后对16384个hashslot取模,找到key对应的hash slot,找
到hash slot对应的master,如果对应的master就在自己本地的话,set mykey1 v1,mykey1这个key对应
的hashslot就在自己本地,那么自己就处理掉了,但是如果计算出来的hashslot在其他master上,那么就
会给客户端返回一个moved error,告诉你,你得到哪个master上去执行这条写入的命令。
什么叫做多master的写入?就是每条数据只能存在于一个master上,不同的master负责存储不同的数据,
分布式的数据存储。100w条数据,5个master,每个master就负责存储20w条数据,分布式数据存储.
所以我们到103服务器执行一下(获取也是一样):
⑵实验不同master各自的slave读取 -> 读写分离
在这个redis cluster中,如果你要在slave读取数据,那么需要带上readonly指令,get mykey1,比如102服务器的7004
就是101服务器7001的slave,我们获取一下:
或者使用 redis-cli -h 192.168.191.102 -p 7004 -c启动,就会自动进行各种底层的重定向的操作
redis cluster的架构下,实际上本身master就是可以任意扩展的,你如果要支撑更大的读吞吐量,或者写吞吐量,
或者数据量,都可以直接对master进行横向扩展就可以了,也可以实现支撑更高的读吞吐的效果,所以说扩容
master,跟之前扩容slave,效果是一样的。
⑶实验自动故障切换 -> 高可用性
比如把master1,101服务器的7001,杀掉,看看它对应的102:7004能不能自动切换成master,可以自动切换
检测集群状态: