redis集群的搭建
一、Redis集群的搭建
1.1、redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
如何实现?
集群中节点的数据是不同的。
如何保证节点数据是不用的。
在集群中每一个节点之间是互相连接的。客户端只需要连接集群中的某一个节点,皆可以获得整个集群的数据。
槽机制 0-16383 节点分配槽值的范围
redis集群在不考虑主备的情况下,服务器节点的数量是奇数。考虑主备的话服务器的节点的数量是偶数。
-->redis集群中有投票机制。超过半数的节点投票说连不上的话,是否真或假的挂了,都是挂了。
一、集群所需的环境:
redis : 至少三个节点(投票机制),为保证每个节点高可用,每个节点要有备份机(主备思想),故至少六台redis服务器。(也可以主备交叉,这样的话就三台就ok)
这里搭建redis伪分布式,在一台虚拟机上运行6个redis实例,需要修改redis端口号。复制/usr/local/redis/bin下的所有文件到集群目录下。
1、在usr/local 下创建集群的目录 redis-cluster
mkdir redis-cluster
2、将usr/local/redis/bin下的所有文件到集群目录下,一共复制6个,分别是redis01、redis02、redis03、redis04、redis05、redis06
3、删除复制的 6 个redis01~redis06 下的 dump.db 文件。该文件是redis 数据库的文件,如果不删除无法进行集群。
4、修改每份redis的配置文件,redis.conf,改端口号,打开集群配置cluster-enabled。
分别将redis01~redis06配置文件redis.conf的端口修改为7001~7006。并将每个配置文件的cluster-enabled的注释去掉;
由于redis.conf中的cluster-enabled所在文件比较偏后。所以可以在vim命令里面使用ctrl+f向后翻页 ctrl+b向前翻页;这两个命令要在查看状态下操作,如果在编辑状态(也就是按过 a i 等等键),这个时候先退出编辑状态,按esc,再进行向后或者向前翻页。

5、启动redis01~redis06。我们可以一个一个的去启动,但是为了效率我们建立一个批处理文件来一次启动redis01~redis06。批处理文件如下
5.1、创建一个批处理文件
vim startall_redis.sh
5.2、批处理文件内容
cd /usr/local/redis-cluster/redis01
./redis-server redis.conf
cd /usr/local/redis-cluster/redis02
./redis-server redis.conf
cd /usr/local/redis-cluster/redis03
./redis-server redis.conf
cd /usr/local/redis-cluster/redis04
./redis-server redis.conf
cd /usr/local/redis-cluster/redis05
./redis-server redis.conf
cd /usr/local/redis-cluster/redis06
./redis-server redis.conf
5.3、修改start_redis.sh 的执行权限
chmod +x startall_redis.sh -->修改文件的执行权限
5.4、执行startall_redis.sh ,启动 redis01~redis06
以上,redis环境就准备好了。但是还不是集群环境,每个redis之间还没有相互关联。
二、ruby 脚本搭建集群
1、使用ruby 脚本搭建集群。需要ruby 运行环境和运行 ruby 的gem 命令。
# 在线安装 ruby
yum install ruby
# ruby运行脚本包的执行gem命令
yum install rubygems
2、将ruby脚本运行使用的包 redis-3.0.0.gem 上传到 /usr/local/redis-cluster/ 下
2.1、redis-3.0.0.gem 文件
2.2、将 redis-3.0.0.gem 上传到linux系统中
2.3、在linux系统中,将 redis-3.0.0.gem 拷贝到/usr/local/redis-cluster/
2.4、安装ruby脚本运行使用的包。在/usr/local/redis-cluster/目录下执行
gem install redis-3.0.0.gem
2.5、搭建redis集群还需要redis源码包中的ruby脚本,该脚本在
/usr/local/upload/redis/redis-3.0.0/src目录中
2.6、将该目录下的 redis-trib.rb 拷贝到 /usr/local/redis-cluster/ 目录中
2.7、使用ruby脚本搭建集群,在 /usr/local/redis-cluster/ 目录下执行如下命令:
先开启所有的集群redis,使用我们写好的批处理
startall_redis.sh
执行如下命令开启集群(一定要保证先将所有的redis都启动)
./redis-trib.rb create --replicas 1 192.168.25.128:7001 192.168.25.128:7002 192.168.25.128:7003 192.168.25.128:7004 192.168.25.128:7005 192.168.25.128:7006
注意:IP地址(192.168.25.128)和端口(7001~7006)
运行后问询问操作人员配置是否可行,输入yes即可
所有槽都覆盖了,表示集群搭建完毕
2.8、集群搭建完毕,接下来我们使用Redis-cli连接集群。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
2.9、集群环境ok了,接下来创建关闭集群的脚本。在/usr/local/redis-cluster/目录下创建一个 shutdownall_redis.sh 。如下:
/usr/local/redis-cluster/redis01/redis-cli -p 7001 shutdown
/usr/local/redis-cluster/redis01/redis-cli -p 7002 shutdown
/usr/local/redis-cluster/redis01/redis-cli -p 7003 shutdown
/usr/local/redis-cluster/redis01/redis-cli -p 7004 shutdown
/usr/local/redis-cluster/redis01/redis-cli -p 7005 shutdown
/usr/local/redis-cluster/redis01/redis-cli -p 7006 shutdown
修改shutdownall_redis.sh 的执行权限
chmod u+x shutdownall_redis.sh
关闭集群
./shutdownall.sh

浙公网安备 33010602011771号