安装了一下 redis的相关集群配置 发现问题还是挺多的。
注:本文中使用的服务器为阿里云centos7版本
1.安装redis 单机版
//安装redis
yum -y install redis 启动命令 redis-server &
2. redis集群
2.1. 集群原理
2.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 会根据节点数量大致均等的将哈希槽映射到不同的节点
2.1.2. redis-cluster投票:容错
3.1. ruby环境(redis版本为3.x.x)
使用到的Redis版本为3.x.x (其他版本可能略有不同)
redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:
安装ruby
yum install ruby
yum install rubygems
安装ruby和redis的接口程序 具体资料(链接:https://pan.baidu.com/s/1UthfYzctmKMkoeJephg1ZQ 密码:kzjc)
拷贝redis-3.0.0.gem至/usr/local下(或者 /usr/local/develope/redisGem下)
执行:
gem install /usr/local/redis-3.0.0.gem(install后为gem文件放置路径)
redis 节点配置
同一台服务器用不同端口表示不同的redis服务器
在/usr/local/develope/(个人习惯)下创建redis-cluster目录,其下创建7001、7002。。7006目录 如图
·
将/etc目录下 redis-cli redis-server redis.conf 分别复制到上图所创建目录中7001 7002.....7006
redis.conf 文件文件没有可以使vim 创建一个 命令 vim redis.conf创建
redis.conf常用配置
#端口配置
port 7001
#启动守护进程
appendonly yes
#启动集群
cluster-enabled yes
cluster-config-file "nodes.conf"
#设置超时
cluster-node-timeout 5000
logfile "./out.log"
#指定访问ip地址
bind 0.0.0.0
分别在7001.7002 ...7006 文件夹中 修改 redis.conf 修改port 为7001 7002..7006
上述步骤完成后 进行启动每个 redis 启动命令 为 ./redis-server ./redis.conf &(注意两点1,分别在7001--7006文件夹进行启动 2.启动命令 一定要加上& 命令为:./redis-server ./redis.conf & 配置后台启动 否则退出窗口 redis服务就停止了 )
启动完成后可以使用 netstat -tnulp | grep redis和ps aux | grep redis查看redis运行情况
这样的 就6个redis都启动了 yeah
实际上,Redis集群的操作在后文你可以看到是通过Ruby脚本来完成的,因此我们需要安装Ruby相关的RPM包,以及Redis和Ruby的接口包。我们要用到之前安装的Ruby (同样链接:https://pan.baidu.com/s/1UthfYzctmKMkoeJephg1ZQ 密码:kzjc 这里面可以下载到)
解压redis-3.0.0.tar.gz目录下的src中可以找到
上传到 redis-cluster目录下 (7001---7006 文件夹都在这里面)
在redis-cluster 目录下
执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。
./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
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集群至少需要3个主节点,每个主节点有一个从节点总共6个节点
replicas指定为1表示每个主节点有一个从节点
注意:
如果执行时报如下错误:
[ERR]Node XXXXXX is not empty. Either the node already knows other nodes (check withCLUSTER NODES) or contains some key in database 0
解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb
启动成功后的输出 (由于已经启动过 没有保存相关日志 所以借个图用下 )
在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
输出日志 为 ()
选择yes节点配置更新后结果如下
集群创建成功登陆任意redis结点查询集群中的节点情况。
客户端以集群方式登陆:
cluster info 查询集群状态信息
完工后测试下
大功告成 另外 redis桌面管理工具 上面网盘中已经有
redis-cluster(5.0版本)集群安装
下载文件(linux)
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
创建文件夹 redis-cluster
复制6份redis-5.0.5 到redis-cluster
修改 每个文件名称 搭建3主 3从 这里直接使用 7001到7006 进行命令 完成后结果如图(单节点的话只需要一个节点就可以
使用原始的配置文件 在目录下进行启动入在 7001 目录下 进行启动 ./src/redis-server & 后台模式运行)
依次进入到每个文件进行修改redis.conf 将port替换为对应的每个文件夹名称 (如下为示例配置文件 可以修改 或者增加其他配置)
#端口配置
port 7001
#启动守护进程
appendonly yes
#启动集群
cluster-enabled yes
cluster-config-file "nodes.conf"
#设置超时
cluster-node-timeout 5000
logfile "./out.log"
#指定访问ip地址
bind 0.0.0.0
配置修改完成后
依次对每个redis进行启动
cd 7001
./src/redis-server ./redis.conf & (后台模式启动) (启动失败的话 查看 输出的日志 注意配置中不能有空格)
ps aux | grep redis 检查Redis是否启动
发现6个Redis 已经全部启动了
进行集群化配置
Redis3.0.0是通过redis-trib.rb进行集群化配置 redis5.0.0中通过 redis-cli --cluster 命令就可以
进入到7001目录下
集群化命令 [root@iZbp12hyscnjnyd7lo0iglZ 7001]# ./src/redis-cli --cluster create 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 --cluster-replicas 1
进行分配hash槽 输入yes
hash槽分配完成 查看下集群的状态
连接到客户端 当前在7001目录下
执行 ./src/redis-cli -p 7001 -c
连接上Redis进行 查看127.0.0.1:7001> cluster info
发现集群状态正常
同样输入cluster nodes 可以查看集群下所有的节点
redis5.0 cluster 集群安装结束
博文中参考文档为https://www.cnblogs.com/xuliangxing/p/7146868.html
2. 淘淘商城文档