redis cluster 搭建
来源:互联网 发布:数据库查询手机号是 编辑:程序博客网 时间:2024/04/30 11:28
一、关于redis cluster
1、redis cluster的现状
reids-cluster计划在redis3.0中推出,目前最新版本3.2.0
目前redis支持的cluster特性(已亲测):
1):节点自动发现
2):slave->master 选举,集群容错
3):Hot resharding:在线分片
4):进群管理:cluster xxx
5):基于配置(nodes-port.conf)的集群管理
6):ASK 转向/MOVED 转向机制.
2、redis cluster 架构
1)redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
2) redis-cluster选举:容错
(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.
b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
二、redis cluster的使用
1、安装redis cluster
1):安装redis-cluster依赖:redis-cluster的依赖库在使用时有兼容问题,在reshard时会遇到各种错误,请按指定版本安装.
(1)确保系统安装zlib,否则gem install会报(no such file to load -- zlib)
- #download:zlib-1.2.6.tar
- ./configure
- make
- make install
(1)安装ruby:version(1.9.2)
Java代码
- # ruby1.9.2
- cd /path/ruby
- ./configure -prefix=/usr/local/ruby
- make
- make install
- sudo cp ruby /usr/local/bin
Java代码
- # rubygems-1.8.16.tgz
- cd /path/gem
- sudo ruby setup.rb
- sudo cp bin/gem /usr/local/bin
Java代码
- gem install redis --version 3.0.0
- #由于源的原因,可能下载失败,就手动下载下来安装
- #download地址:http://rubygems.org/gems/redis/versions/3.0.0
- gem install -l /data/soft/redis-3.0.0.gem
2)安装redis-cluster
Java代码
- cd /path/redis
- make
- sudo cp /opt/redis/src/redis-server /usr/local/bin
- sudo cp /opt/redis/src/redis-cli /usr/local/bin
- sudo cp /opt/redis/src/redis-trib.rb /usr/local/bin
2:配置redis cluster
1)redis配置文件结构:
使用包含(include)把通用配置和特殊配置分离,方便维护.
3、redis cluster 运维操作
1)初始化并构建集群
(1)启动集群相关节点(必须是空节点),指定配置文件和输出日志
Java代码
- redis-server /opt/redis/conf/redis-6380.conf > /opt/redis/logs/redis-6380.log 2>&1 &
- redis-server /opt/redis/conf/redis-6381.conf > /opt/redis/logs/redis-6381.log 2>&1 &
- redis-server /opt/redis/conf/redis-6382.conf > /opt/redis/logs/redis-6382.log 2>&1 &
- redis-server /opt/redis/conf/redis-7380.conf > /opt/redis/logs/redis-7380.log 2>&1 &
- redis-server /opt/redis/conf/redis-7381.conf > /opt/redis/logs/redis-7381.log 2>&1 &
- redis-server /opt/redis/conf/redis-7382.conf > /opt/redis/logs/redis-7382.log 2>&1 &
(2)使用自带的ruby工具(redis-trib.rb)构建集群
Java代码
- #redis-trib.rb的create子命令构建
- #--replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点
- #节点角色由顺序决定,先master之后是slave(为方便辨认,slave的端口比master大1000)
- redis-trib.rb create --replicas 1 10.10.34.14:6380 10.10.34.14:6381 10.10.34.14:6382 10.10.34.14:7380 10.10.34.14:7381 10.10.34.14:7382
Java代码
- #redis-trib.rb的check子命令构建
- #ip:port可以是集群的任意节点
- redis-trib.rb check 1 10.10.34.14:6380
Java代码
- [OK] All nodes agree about slots configuration.
- >>> Check for open slots...
- >>> Check slots coverage...
- [OK] All 16384 slots covered.
三、重启redis cluster
1、重启部分redis node
/usr/local/bin/redis-cli shutdown该命令会停止当前服务器上6379端口的redis node
67d89b4f617b9cb83899bb5631167ec577c00827 10.86.45.137:6379 myself,slave 337241090f64e602e5f917ef840809ed52025565 0 0 10 connected9899dae2ea13c350c5ad0dd562a76c32fdf1522d 10.86.45.136:6379 slave,fail 9e2ebd2d76d708045f7117dd8a4d922d988dfa9d 1435577082442 1435577078233 17 disconnected7b86c086200b5078b6a97fa6152bbabd97569d5f 10.86.45.138:6379 master - 0 1435577092279 18 connected 10000-163839e2ebd2d76d708045f7117dd8a4d922d988dfa9d 10.86.41.39:6379 master - 0 1435577095290 0 connected 0-4999337241090f64e602e5f917ef840809ed52025565 10.86.41.40:6379 master - 0 1435577093285 15 connected 5000-99991ba8070f2057e312517dc002660957e66431d676 10.86.41.41:6379 slave 7b86c086200b5078b6a97fa6152bbabd97569d5f 0 1435577094286 18 connected
看9899dae2ea13c350c5ad0dd562a76c32fdf1522d这个节点,已经是disconnected状态,说明该节点已经从redis cluster断开
sudo /usr/local/bin/redis-server /etc/redis.conf
此时redis cluster的节点状态变为
67d89b4f617b9cb83899bb5631167ec577c00827 10.86.45.137:6379 myself,slave 337241090f64e602e5f917ef840809ed52025565 0 0 10 connected9899dae2ea13c350c5ad0dd562a76c32fdf1522d 10.86.45.136:6379 slave 9e2ebd2d76d708045f7117dd8a4d922d988dfa9d 0 1435577341917 17 connected7b86c086200b5078b6a97fa6152bbabd97569d5f 10.86.45.138:6379 master - 0 1435577342418 18 connected 10000-163839e2ebd2d76d708045f7117dd8a4d922d988dfa9d 10.86.41.39:6379 master - 0 1435577338910 0 connected 0-4999337241090f64e602e5f917ef840809ed52025565 10.86.41.40:6379 master - 0 1435577339913 15 connected 5000-99991ba8070f2057e312517dc002660957e66431d676 10.86.41.41:6379 slave 7b86c086200b5078b6a97fa6152bbabd97569d5f 0 1435577342919 18 connected
看9899dae2ea13c350c5ad0dd562a76c32fdf1522d这个节点,已经是connected状态,说明该节点已经重新连回redis cluster
注意:当集群正常动行时,某有部分节点重启后,node id是不发生变化的
2、重启整个redis cluster
特别注意:重启整个集群的时候,redis id有可能会发生变化,导致集群启动失败
启动失败的修复方法
1、cluster nodes,查看当前集群结点状态,找出各节点新ID2、cluster meet,将没有在集群中的结点连入集群,如果所有结点都已连入集群,可以忽略这步3、cluster forget,将已经没有IP的结点清除掉4、cluster replicate,将结点手工分配为另一个节点的salve5、cluster slots,给master分别slot
执行完以上五步,查看集群状态,此时集群状态应该已经恢复正常
- redis-cluster的搭建
- redis cluster搭建
- redis cluster 搭建
- redis cluster集群搭建
- Linux 搭建redis-cluster
- Redis cluster搭建
- redis-cluster 集群搭建
- redis cluster集群搭建
- redis cluster搭建
- redis cluster 搭建
- redis-cluster集群搭建
- redis cluster 集群搭建
- 搭建Redis-Cluster集群
- redis-cluster集群搭建
- redis cluster搭建使用
- redis 3.2 cluster搭建
- redis cluster集群搭建
- Redis Cluster搭建记要
- linux C判断文件是否存在
- LAMP related 1
- java 访问https忽略证书
- Android Stability test occured SWT restart issue
- MeanShift聚类
- redis cluster 搭建
- 【图文教程】de4dot实战字符串解密(演示:hishop微分销系统)
- [Objective-C] #include和#import的区别
- Linux下CMake使用介绍
- JSONObject与JSONArray的使用
- Linux学习笔记(九)
- 黑马程序员-java基础-基础小知识
- 华硕X550C 安装Ubuntu 14.10 无线网络显示硬件被禁用的解决方法
- 手机如何截屏?