关闭

linux下redis集群配置与设置密码

标签: redis集群cluster
1748人阅读 评论(0) 收藏 举报
分类:

1.  RedisCluster的架构图。

          

        (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

        (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

        (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

        (4)redis-cluster把所有的物理节点映射到[0-16383]slot上(哈希槽),cluster负责维护

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

2.  redis-cluster

         

        (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 Thecluster is down)错误。

3.  redis哈希槽概念

"用了哈希槽的概念,而没有用一致性哈希算法,不都是哈希么?这样做的原因是为什么呢?"
Redis Cluster是自己做的crc16的简单hash算法,没有用一致性hash。Redis的作者认为它的crc16(key) mod 16384的效果已经不错了,虽然没有一致性hash灵活,但实现很简单,节点增删时处理起来也很方便。

"为了动态增删节点的时候,不至于丢失数据么?"
节点增删时不丢失数据和hash算法没什么关系,不丢失数据要求的是一份数据有多个副本。

“还有集群总共有2的14次方,16384个哈希槽,那么每一个哈希槽中存的key 和 value是什么?”
当你往Redis Cluster中加入一个Key时,会根据crc16(key) mod 16384计算这个key应该分布到哪个hash slot中,一个hash slot中会有很多key和value。你可以理解成表的分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里;改用Redis Cluster以后会自动为你生成16384个分区表,你insert数据时会根据上面的简单算法来决定你的key应该存在哪个分区,每个分区里有很多key。

作者:胖了胖了的
链接:https://www.zhihu.com/question/53927336/answer/137347302
来源:知乎

4.  redis集群安装

因为redis-cluster的运行要依赖于ruby脚本,所以首先要安装ruby相关组件。
1.安装ruby与相关组件:

查看服务器是否安装ruby:
yum list | grep ruby
rpm -qa | grep ruby

若没有安装,则安装组件:
yum install ruby
然后输入y则安装成功

安装gcc用于编译redis:
yum install gcc

安装gem相关:
yum install rubygems
gem install redis

2.安装redis:
进入/usr/local目录:cd /usr/local
创建redis-cluster文件夹: mkdir redis-cluster
进入redis-cluster:cd redis-cluster
在redis-cluster下创建:
redis01 redis02 redis03 redis04 redis05 redis06文件夹.
至于为什么要这样做,是因为redis-cluster要求最少6个节点(maseter*3 + slave*3)
在redis-cluster文件夹下做如下操作:
下载redis-3.0.5.tar.gz(我这里采用的是编译源码的方式):    http://download.csdn.net/detail/shy_snow/9226455
解压目录到linux下/usr/local/redis-cluster目录下:
解压命令:tar -zxvf  redis-3.0.5.tar.gz
进入解压后的文件夹redis-3.0.5下编译src:
执行make命令,如果执行报错,可尝试: make MALLOC=libc
拷贝/redis-3.0.5/src目录下的4个文件:
redis-server    redis-cli       redis.conf    redis-benchmark到redis-3.0.5目录
复制redis-3.0.5的文件到6个redis文件夹下,执行命令:
cp -Rf ./redis-3.0.5/* /redis01
......
cp -Rf ./redis-3.0.5/* /redis06
修改六个文件夹下redis.conf,主要修改三个内容:
daemonize yes------修改yes为守护进程,no为独占线程
prot 7001  各个文件夹下分别为7001-7006
cluster-enabled yes

启动每个redis,如果认为麻烦,可创建脚本启动:
.进入每个redis文件夹:
分别执行命令: ./redis-server ./redis.conf
如果没有权限,提升权限: chmode 777 ./redis-server

启动完成后:
执行ps -ef|grep redis可看到如下:


集群启动:
将src文件夹下的redis-trib.rb文件拷贝到redis-cluster目录下,执行命令:
./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
----即可启动redis集群
启动成功如下:

[OK] All nodes agree about slotsconfiguration.

>>> Check for open slots...

>>> Check slots coverage...

这样就可以登录客户端查看集群状况:
进入redis01
执行:
./redis-cli -c -p 7001则进入客户端.
集群状态查看:
cluster nodes
cluster info 

修改redis日志文件和持久化路径:

vim  redis.conf 

logfile /data/redis_cache/logs/redis.log    #日志路径

dir /data/redis_cache      #持久化路径,修改后 记得要把dump.rdb持久化文件拷贝到/data/redis_cache下

关闭redis:
./redis.cli -p 7001 shutdown

redis集群重启需要删除各个节点下的文件,删除命令如下:

rm -rf appendonly.aof | rm -rf dump.rdb | rm -rf nodes.conf | rm -rf redis.log


如果集群要设置密码,集群启动后要在各个节点下设置:

config set masterauth xxx
config set requirepass xxx

然后在各个节点下重置配置:
config rewrite

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:218493次
    • 积分:3482
    • 等级:
    • 排名:第9503名
    • 原创:98篇
    • 转载:98篇
    • 译文:0篇
    • 评论:25条
    最新评论