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

redis-cluster

2017-01-08 22:48 330 查看
服务器:
Master: 192.168.1.200 192.168.1.202 192.168.1.203
Slave: 192.168.1.206 192.168.1.207 192.168.1.208
所有服务器已编译安装redis

一、准备redis-cluster集群环境:
yum install -y ruby
yum install -y rubygems
gem install redis //速度很慢

二、创建集群:
1.集群配置参数
cluster-enabled <yes/no> //是否启用集群

cluster-config-file <filename>
//指定一个文件,由集群自动维护,用于保存集群相关的信息

cluster-node-timeout <milliseconds> //节点超时时间,单位为毫秒

cluster-slave-validity-factor <factor>
//举例:如果设置超时时间为5秒,factor10.master宕机后,如果slave节点与该master节点断开时间超过50秒(即5*10)的时候,该slave不会被选举为master

cluster-migration-barrier <count>
//举例,如果设置为2,表示master后面至少要维持2slave,多余的slave可以被迁移到其他孤立的master

cluster-require-full-coverage <yes/no>
//槽位是否全覆盖,即当有master宕机且没有slave可以顶替的情况下是否还允许集群继续工作

实验中配置:
bind 192.168.1.200
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-enabled yes
appendonly yes

2. 创建集群
各个节点启动redis
redis-server /etc/redis/redis.conf




创建集群
redis-trib.rbcreate --replicas 1 192.168.1.200:6379 192.168.1.202:6379 192.168.1.203:6379192.168.1.206:6379 192.168.1.207:6379 192.168.1.208:6379











3. 简单测试
redis-cli -c -h192.168.1.200 -p 6379
//使用-c选项,可以自动切换到其他节点上





redis-cli -h192.168.1.200 -p 6379 //指定访问200节点,不自动切换




redis-cli -h192.168.1.206 -p 6379 //指定访问slave节点









三、测试故障转移:
1.关闭203节点








2. 重启203节点




3. 关闭并重置203节点




4. 移除203节点



停止所有节点上的redis服务


修改各节点的nodes.conf
vim nodes.conf




重启所有redis服务




5. 重建203节点
启动redis服务


添加203节点
redis-trib.rbadd-node 192.168.1.203:6379192.168.1.200:6379
//可以通过集群内任一节点添加新节点




redis-trib.rbdel-node 192.168.1.203:6379 4246aef39ae381bca47835132902293d4bac6b00
//删除203节点重新以slave身份添加,还需要删除203节点上的nodes.conf文件

redis-trib.rbadd-node --slave 192.168.1.203:6379 192.168.1.200:6379
//使用--master-id可以指定作为哪一个masterslave




关闭208节点








四、集群扩容:
1.准备两个redis节点
Master: 192.168.1.204
Slave: 192.168.1.205

2. 加入两个节点
redis-trib.rbadd-node 192.168.1.204:6379 192.168.1.200:6379




redis-trib.rbadd-node --slave --master-id 0996e2a2cf52fab07f85cfdd729573915ce55359 192.168.1.205:6379 192.168.1.200:6379
//指定为204节点的slave

3. 重新分配槽位




redis-trib.rbrebalance --use-empty-masters 192.168.1.200:6379
//让空节点参与rebalance





redis-trib.rbreshard 192.168.1.200:6379 //可以手动选择迁移多少槽位

五、手动降级Master:



1.使用cli登录207(即202节点的slave节点)
redis-cli -h192.168.1.207 -p 6379









六、测试slave节点的自动迁移:
1.重新准备redis集群
Master: 192.168.1.200 192.168.1.202 192.168.1.203
Slave: 192.168.1.206 192.168.1.207 192.168.1.208

bind 192.168.1.200
cluster-config-filenodes.conf
cluster-node-timeout15000
cluster-enabled yes
appendonly yes
cluster-migration-barrier1
//指定每个master后面应该有一个slave





2. 新添加204,205节点,都作为200节点的slave




3.移除 202节点的slave




附:
计算key的插槽值:
key的有效部分使用CRC16算法计算出哈希值,再将哈希值对16384取余,得到插槽值。

什么是有效部分?
1、如果key中包含了{符号,且在{符号后存在}符号,并且{和}之间至少有一个字符,则有效部分是指{和}之间的部分;
key={hello}_tatao的有效部分是hello

2、如果不满足上一条情况,整个key都是有效部分;
key=hello_taotao的有效部分是全部
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cluster redis