redis集群创建

来源:互联网 发布:网络交通扣分处理 编辑:程序博客网 时间:2024/04/27 20:17

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目录下。



修改每个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集群的搭建并且启动了


原创粉丝点击