-
概述:
- 自动将数据进行分片,每个master上放一部分数据
- 提供内置的高可用支持,部分master不可用时,还是可以继续工作的
- 在redis cluster架构下,每个redis要放开两个端口号(第二个端口由redis自动配置),比如一个是6379,另外一个就是加10000的端口号,比如16379;16379端口号是用来进行节点间通信的,也就是集群总线(cluster bus)。cluster bus的通信,用来进行故障检测、配置更新、故障转移授权等。cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间
- redis cluster模式下,不建议做物理的读写分离了,建议通过master的水平扩容,来横向扩展读写吞吐量,还有支撑更多的海量数据
-
搭建3主3从架构的cluster集群:
- 搭建6个cluster节点(端口号分别是:7001、7002、7003、7004、7005、7006,下面以7001端口号的节点为例进行搭建)
- 创建目录
# 放redis-cluster配置文件(注意:不是redis启动的配置文件,redis-cluster的配置文件是redis自己维护的) mkdir -p /etc/redis-cluster # 放redis日志文件 mkdir -p /var/redis/7001/log/ # 放redis持久化文件 mkdir -p /var/redis/7001/persistence/ - 将原来的
/etc/redis/6379.conf在原目录下拷贝一份命名为7001.conf,并调整如下配置# 端口号 port 7001 # 开启cluster模式 cluster-enabled yes # 配置cluster配置文件的路径(该配置文件由redis自己新建并维护) cluster-config-file /etc/redis-cluster/node-7001.conf # cluster节点超时时间(超时失联,则认为宕机) cluster-node-timeout 15000 # 后台启动 daemonize yes # pid文件 pidfile /var/run/redis_7001.pid # 持久化文件目录 dir /var/redis/7001/persistence # 日志文件目录 logfile /var/redis/7001/log/7001.log # 绑定ip bind 192.168.31.187 # 开启aof appendonly yes # 注释掉如下配置(之前配置读写分离集群时,redis自己热修改的配置) # replicaof 192.168.xx.xx 6379 - 将原来的
/etc/init.d/redis_6379在原目录下拷贝一份命名为redis_7001,并修改端口为7001 - (/etc/init.d目录下)启动redis服务:
redis_7001 start
- 创建目录
- 将6个节点组成cluster集群
- (旧的方式,已废弃,不推荐,了解即可)
- 安装ruby
yum install -y ruby yum install -y rubygems gem install redis - 执行第三步时报错“ERROR: Error installing redis-4.0.0.gem: redis requires Ruby version >= 2.2.2.”的解决方案:
sudo yum install curl curl -sSL https://get.rvm.io | bash -s stable source /usr/local/rvm/scripts/rvm rvm list known # 安装一个版本 rvm install 2.4.1 rvm use 2.4.1 # 卸载一个版本 # rvm remove 2.0.0 # 设置默认版本 rvm use 2.4.1 --default # gem install redis #redis-4.1.2 cp /usr/local/mysoftware/redis/redis-5.0.5/src/redis-trib.rb /usr/local/bin redis-trib.rb create --replicas 1 192.168.0.111:7001 192.168.0.111:7002 192.168.0.112:7003 192.168.0.112:7004 192.168.0.113:7005 192.168.0.113:7006
- 安装ruby
- 执行命令:
redis-cli --cluster create 192.168.0.111:7001 192.168.0.111:7002 192.168.0.112:7003 192.168.0.112:7004 192.168.0.113:7005 192.168.0.113:7006 --cluster-replicas 1 - 效果:
- 检查cluster集群状况:
redis-cli --cluster check 192.168.0.111:7001
- (旧的方式,已废弃,不推荐,了解即可)
- 搭建6个cluster节点(端口号分别是:7001、7002、7003、7004、7005、7006,下面以7001端口号的节点为例进行搭建)
-
cluster模式下的水平扩容、缩容:
- 检查已有cluster集群:
redis-cli --cluster check 192.168.2.141:7001 - 扩容:
- 新增一台cluster的master主节点
- 单机配置一台cluster的redis节点并启动(与上面的配置一样,略)
- 将新配置的cluster节点新增到集群中(新增的节点ip与端口:192.168.2.144:7007)
redis-cli --cluster add-node 192.168.2.144:7007 192.168.2.141:7001 - 检查新的集群信息
- 迁移slot到新的节点:
# redis-cli --cluster reshard 集群名称 redis-cli --cluster reshard 192.168.2.141:7001 # 输入先要移入新节点的slot数量:4096 # 输入接收slot的节点id # 依次输入slot的来源节点(输入all表示全部,输入done结束)
- 新增一台cluster的salve节点
- 单机配置一台cluster的redis节点并启动(与上面的配置一样,略)
- 给指定的master节点添加slave节点:
redis-cli --cluster add-node --cluster-slave --cluster-master-id c8d6e402532e941530e7cb9f08cdc96a7950ec4a 192.168.2.144:7008 192.168.2.141:7001 - 查看集群信息:
edis-cli --cluster check 192.168.2.141:7001
- 新增一台cluster的master主节点
- 缩容:
- 先用
reshard将数据都移除到其他节点(确保node为空之后,才能执行删除操作)- 依次向192.168.2.141:7001、192.168.2.142:7003、192.168.2.143:7005迁移1365、1365、1366个slot:
- 依次向192.168.2.141:7001、192.168.2.142:7003、192.168.2.143:7005迁移1365、1365、1366个slot:
- 删除节点:
redis-cli --cluster del-node 192.168.2.144:7007 c8d6e402532e941530e7cb9f08cdc96a7950ec4a - 查看集群信息:
- (附:)删除原master节点对应的salve node:
redis-cli --cluster del-node 192.168.2.144:7008 eeed6803b1da3388b422e7e2148065de9d7bdfc7
- 先用
欢迎访问我的个人博客:zephyrlai.github.io
- 检查已有cluster集群: