redis集群创建
2017-09-10 13:47
323 查看
1. 集群原理
1.1. redis-cluster架构图结构原理
⑴ 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
⑵ 节点的fail是通过集群中超过半数的节点检测失效时才生效。
⑶ 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点 |
2. redis-cluster投票:容错
⑴ 投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉。⑵ 什么时候整个集群不可用(cluster_state:fail)?
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps :redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
3. ruby环境
redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:安装ruby
yum install ruby
yum install rubygems
安装ruby和redis的接口程序
拷贝redis-3.0.0.gem至/usr/local下
执行:
gem install /usr/local/redis-3.0.0.gem
4. 创建集群
4.1. 集群结点规划
这里在同一台服务器用不同的端口表示不同的redis服务器,如下:主节点:192.168.1.128:8881 192.168.1.128:8882192.168.1.128:8883
从节点:192.168.1.128:8884 192.168.1.128:8885 192.168.1.128:8886
在/usr/local下创建redis-cluster目录,其下创建8881、8882,、8883、8884、8885、8886目录,如下:
将redis安装目录src下的文件拷贝到每个888X目录内,同时将redis源码目录src下的redis-trib.rb拷贝到redis-cluster目录下
adef
。
修改每个888X目录下的redis.conf配置文件:
port 888X
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
4.2. 启动节点
分别进入888X目录,执行:./redis-server ./redis.conf
当然,如果怕麻烦,我们可创建一个sh可以执行文件,一次性开始
[root@bogon redis-cluster]# vi startup.sh
cd 8881
./src/redis-server ./redis.conf
cd ../
cd 8882
./src/redis-server ./redis.conf
cd ../
cd 8883
./src/redis-server ./redis.conf
cd ../
cd 8884
./src/redis-server ./redis.conf
cd ../
cd 8885
./src/redis-server ./redis.conf
cd ../
cd 8886
./src/redis-server ./redis.conf
创建完成之后保存退出,最后别忘了给这个文件赋予可执行的权限chmod +X startup.sh
最后的目录如下
执行startup.sh,可以看到每个redis都启动成功了
4.3. 执行创建集群命令
执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。./redis-trib.rb create --replicas 1 192.168.1.128:8881 192.168.1.128:8882 192.168.1.128:8883 192.168.1.128:8884 192.168.1.128:8885 192.168.1.128:8886 |
redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点
replicas指定为1表示每个主节点有一个从节点
创建集群输出如下:
>>> Performing hash slotsallocation on 6 nodes...
Using 3 masters:
192.168.1.128:8881
192.168.1.128:8882
192.168.1.128:8883
Adding replica 192.168.1.128:8884 to192.168.1.128:8881
Adding replica 192.168.1.128:8885 to192.168.1.128:8882
Adding replica 192.168.1.128:8886 to192.168.1.128:8883
M: ea5507e120eba76959124c5bbf924ee06f6deb29192.168.1.128:8881
slots:0-5460 (5461 slots) master
M: 08f1da16e21450de7751993928d2641cdaab99b6192.168.1.128:8882
slots:5461-10922 (5462 slots) master
M: 4758d0f2886845e15f0cf40ec1dbd2dae066ab8d192.168.1.128:8883
slots:10923-16383(5461 slots) master
S: 9ba9bd643f994f7f3fe9844158641d82a488ec82192.168.1.128:8884
replicates ea5507e120eba76959124c5bbf924ee06f6deb29
S: 5cf6ec08bc52d0590b69b4485a5d2955f75a14f5192.168.1.128:8885
replicates 08f1da16e21450de7751993928d2641cdaab99b6
S: a38c2414c99111ef617d4de10221016c3e440ab3192.168.1.128:8886
replicates 4758d0f2886845e15f0cf40ec1dbd2dae066ab8d
Can I set the above configuration? (type'yes' to accept): yes
5. 查询集群信息
集群创建成功登陆任意redis结点查询集群中的节点情况。客户端以集群方式登陆:
[root@bogon 8881]# ./src/redis-cli -c -h192.168.1.128 -p 8881
192.168.1.128:8881> cluster nodes
08f1da16e21450de7751993928d2641cdaab99b6192.168.1.128:8882@18882 master - 0 1505022112770 2 connected 5461-10922
4758d0f2886845e15f0cf40ec1dbd2dae066ab8d192.168.1.128:8883@18883 master - 0 1505022111758 3 connected 10923-16383
a38c2414c99111ef617d4de10221016c3e440ab3192.168.1.128:8886@18886 slave 4758d0f2886845e15f0cf40ec1dbd2dae066ab8d 01505022111000 6 connected
5cf6ec08bc52d0590b69b4485a5d2955f75a14f5192.168.1.128:8885@18885 slave 08f1da16e21450de7751993928d2641cdaab99b6 01505022111000 5 connected
ea5507e120eba76959124c5bbf924ee06f6deb29192.168.1.128:8881@18881 myself,master - 0 1505022107000 1 connected 0-5460
9ba9bd643f994f7f3fe9844158641d82a488ec82192.168.1.128:8884@18884 slave ea5507e120eba76959124c5bbf924ee06f6deb29 01505022111000 4 connected
说明:
./redis-cli -c -h192.168.101.3 -p 7001
,其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号
cluster nodes 查询集群结点信息
至此已经完成了redis集群的搭建并且启动了
相关文章推荐
- 【redis】关于集群创建遇到的问题
- Redis原理与Redis集群创建
- redis-trib创建redis集群错误
- redis 集群 创建报错 [ERR] Node is not empty. Either the node already knows other nodes (check with C
- k8s第一个实例创建redis集群服务
- 【redis】 redis 创建集群时,Waiting for the cluster to join.... 一直等待
- redis创建集群失败——can't connect to node 192.168.*.*
- 创建redis集群时出现no such fileto load -- rubygems问题的解决
- 创建redis集群
- ubuntu下全自动创建Redis集群脚本
- 简单创建redis集群
- 创建redis集群报错 /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load suc
- redis集群创建
- Redis集群创建报错
- Redis的集群创建步骤(非redis-trib.rb脚本方式)
- 创建redis集群报错 /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load suc
- Redis密码验证情况下创建集群
- windows redis集群创建步骤
- 使用Elasticache创建多AZ的redis集群
- .NET使用Task动态创建多任务多线程并行程序计算Redis集群keys计算