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

Linux下搭建Redis集群环境及测试集群 关闭redis

2018-03-25 16:33 585 查看

Redis集群环境

Redis集群相关概念

各redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽,无主机,客户端随意连接一个节点都可以



节点的fail是通过集群中超过半数的节点检测失效才生效



(1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):什么时候整个集群不可用(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)错误

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

假设有server1存放0-5000的槽,server2存放5001-10000的槽,server3存放10001-16383的槽,那么有

Key:a

计算a的hash值,例如值为100,100这个槽在server1上,所以a应该放到server1.

Key:hello

Hash值:10032,此槽在server3上。hello可以应该存在server3.

服务器上槽越多,那么存放的key就越多,当多分配一个服务器时,挪动一些槽到这个服务器上时,key也会挪到该服务器上,一个槽上可以有多个key

接下来演示一下集群,

我们的集群结构

集群中有三个节点的集群,每个节点有一主一备。需要6台虚拟机。(备是为了防止主机挂了导致整个redis集群不可用。)

搭建一个伪分布式的集群,使用6个redis实例来模拟。

搭建集群需要使用到官方提供的ruby脚本。

需要安装ruby的环境。(只需要一句apt-get install ruby就可以了)

redis集群管理工具redis-trib.rb



脚本需要的ruby包:



需要上传到linux上

我们先将其放到和redis一起的路径,然后安装

root@VM-98-105-ubuntu:/usr/local/jae# gem install redis-3.2.2.gem

接着 ,为了启动6个redis服务,我们需要创建一个文件夹存放

root@VM-98-105-ubuntu:/usr/local/jae# mkdir redis-cluster

1. 复制6份redis配置文件,一直到redis06,删掉快照文件

root@VM-98-105-ubuntu:/usr/local/jae/redis/redisfirst# cp -r bin /usr/local/jae/redis-cluster/redis01

root@VM-98-105-ubuntu:/usr/local/jae/redis/redisfirst# cp -r bin /usr/local/jae/redis-cluster/redis02

root@VM-98-105-ubuntu:/usr/local/jae/redis/redisfirst# cp -r bin /usr/local/jae/redis-cluster/redis03……

root@VM-98-105-ubuntu:/usr/local/jae/redis-cluster/redis01# rm -f dump.rdb

2. 修改他们的redis.conf文件

端口号从7001~7006,打开cluster





3. 把创建集群的ruby脚本复制到redis-cluster目录下。



4. 创建一个脚本,启动6个redis实例,内容





5. 创建集群,在有redis-trib.rb的目录下执行命令

./redis-trib.rb create –replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

此处127.0.0.1应是你在redis.conf中的host值。



到这里集群就配置完毕

测试集群

连接任接一个节点,执行一条命令,计算完槽后,如果redis能自动跳转说明集群成功

root@VM-98-105-ubuntu:/usr/local/jae/redis-cluster# redis01/redis-cli -h 127.0.0.1 -p 7002 -c

127.0.0.1:7002> set a 100

-> Redirected to slot [15495] located at 127.0.0.1:7003

OK

127.0.0.1:7003>

正常关闭redis

直接在客户端执行命令shutdown或直接在命令行里执行redis-cli -p 7001 shutdown

我们直接编写一个shutdown.sh



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: