redis集群配置
redis集群是对redis的水平扩容,即启动N个redis节点,将整个数据分布存储在这个N个节点中,每个节 点存储总数据的1/N。
redis集群的数量必须是偶数,每一个主机都要有从机,至少有三个主机,三个从机,如果主机宕机,那么从机会自动变为主机,如果宕机的主机再恢复正常,那么则作为从机使用,以此轮询。
如下图:由3台master和3台slave组成的redis集群,每台master承接客户端三分之一请求和写入的数 据,当master挂掉后,slave会自动替代master,做到高可用。
1、配置3主3从集群
此处配置为在同一太计算机上的配置,所以是通过修改端口号来实现的,实际应用不需要修改端口号,修改ip地址即可
集群配置:
角色 | 端口 |
---|---|
master | 7001 |
master | 7002 |
master | 7003 |
slave | 7004 |
slave | 7005 |
slave | 7006 |
-
创建一个目录
/opt/cluster
,用来安装集群的redis服务器。mkdir /opt/cluster
-
安装6台redis服务器在
/opt/cluster
中,分别安装在7001-7006文件夹。并将redis安装文件中的redis.conf文件复制到/opt/cluster
中。cp /software/redis-3.0.0/redis.conf /opt/cluster/
-
创建配置文件,这里的6个服务器的配置文件除了端口号外其他信息都是一致的,6个配置文件分别命名为
redis-7001.conf
…redis-7006
,配置的端口号和其他文件地址改变一下就可以 了(ip地址也要改成自己的ip),详细配置如下(以7001为例):# 引入redis.conf文件 include /opt/cluster/redis.conf # 开启后台启动 daemonize yes # ip地址 bind 192.168.170.132 dir /opt/cluster/ # 端口 port 7001 # rdb文件 dbfilename dump_7001.rdb # pid文件 pidfile /var/run/redis_7001.pid #日志文件 logfile "./7001.log" # 开启集群设置 cluster-enabled yes # 设置节点配置文件 cluster-config-file node-7001.conf # 设置节点失联时间,超过该时间(毫秒),集群自动进行主从切换 cluster-node-timeout 15000
复制5份
redis-7001.conf
,把文件中的所有7001改为7002…7006即可。 -
分别启动六个服务器(后台启动)
./redis-server /opt/cluster/redis-7001.conf ./redis-server /opt/cluster/redis-7002.conf ./redis-server /opt/cluster/redis-7003.conf ./redis-server /opt/cluster/redis-7004.conf ./redis-server /opt/cluster/redis-7005.conf ./redis-server /opt/cluster/redis-7006.conf
-
查看集群的启动状态
ps -ef|grep redis
-
确保启动成功后,查看
/opt/cluster
中是否生成了六个nodes-xxx.conf
文件 -
确保以上都信息都正常后,将6个节点合成一个集群。
如果redis的版本是
redis-5.0.0
及以上版本,可以直接使用bin目录中的redis-cli
来创建集群:./redis-cli --cluster create --cluster-replicas 192.168.170.132:7001 192.168.170.132:7002 192.168.170.132:7003 192.168.170.132:7004 192.168.170.132:7005 192.168.170.132:7006
这里使用的是
redis-3.0.0
,所以不能使用这种方式创建redis集群,需要使用redis-3.0.0.gem
工具来创建redis集群。该工具安装:-
把下载该工具后上传到linux中的
/software
中。 -
进入
/software
目录,安装工具gem install redis-3.0.0.gem
如果直接安装的话会提示
-bash: gem: command not found
,这是因为该gem工具是用ruby语言编写的,所以需要先安装ruby语言的运行环境。联网安装即可。yum install ruby yum install rubygems
安装了ruby的运行环境后gem工具可以使用,此时把redis安装目录中的src目录里面的
redis-trib.rb
文件复制到/opt/cluster
中cp /software/redis-3.0.0/src/redis-trib.rb /opt/cluster/
继续配置redis的集群,
redis-5.0.0
以下的版本配置(使用gem工具创建集群):进入
/opt/cluster
目录,执行命令构建集群即可。./redis-trib.rb create --replicas 1 192.168.170.132:7001 192.168.170.132:7002 192.168.170.132:7003 192.168.170.132:7004 192.168.170.132:7005 192.168.170.132:7006
注意replicas后面有个1不要忘了。这里的1表示用最简单的方式创建配置集群,即每个master配置了一个salve。
至此,redis集群创建成功。
-
-
使用
redis-cli
登录7001,执行命令查看集群是否创建成功。# -c表示以集群的方式登录 ./redis-cli -h 192.168.170.132 -p 7001 -c #登录后查看集群信息 cluster nodes
2、redis集群的节点分配原则
一个集群至少有3个主节点,因为新master的选举需要大于半数的集群master节点同意才能选举成功, 如果只有两个master节点,当其中一个挂了,是达不到选举新master的条件的。 选项–cluster-replicas 1表示我们希望为集群中的每个主节点创建一个从节点。 分配原则尽量保证每个主库运行在不同的ip,每个主库和从库不在一个ip上,这样才能做到高可用。
3、redis集群存储数据的原理
通过网络将多台redis服务器连接在一起,形成redis集群后,系统将会产生16384个slots(哈希槽,slots是用于具体存储数据的空间,0-16383),而数据库中的每个key都属于16384个slots中的其中1个,当通过key读写数据的时候,redis需要先根据 key计算出key对应的slots,然后根据slots和master的映射关系找到对应的redis节点,key对应的数据 就在这个节点上面。 集群中使用公式 CRC16(key)%16384
计算key属于哪个槽。