Redis 5.0.5
1. Redis Linux 安装
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make
以下命令均在Redis目录下执行
修改redis.conf
vi redis.conf
设置守护进程为yes,支持后台运行
修改密码
修改bind
默认情况下,未指定bind配置指令,Redis侦听来自服务器上所有可用网络接口的连接。
也可以设置仅收听一个或多个选定的接口,在bind配置指令,后接一个或多个IP地址。
这里用于测试改成0.0.0.0
安装目录下新建backup文件夹,修改备份文件夹和rdb备份文件名
开启aof,修改aof备份文件名
启动redis,为了读取配置文件,Redis必须是以文件路径作为第一个参数开头,否则用的默认配置
src/redis-server redis.conf
运行客户端,设值测试
src/redis-cli
2. 主从复制
将redis安装文件夹分发到从节点,未设置免密登陆需要输入从节点密码
scp -r /usr/local/softwares/redis/ hadoop-slave1:/usr/local/softwares/redis/
scp -r /usr/local/softwares/redis/ hadoop-slave2:/usr/local/softwares/redis/
在从节点执行命令
删除原备份文件夹,重新创建备份文件夹
rm -rf backup/
mkdir backup
从节点添加主节点配置,修改redis.conf,再启动两个从节点
在主节点设值
两个从节点也得到值
在客户端下输入info,可查看服务器的统计信息
3. Redis Sentinel
首先搭建好Redis环境并可以进行主从同步
vi sentinel.conf
修改bind,关闭保护模式
分别新建文件夹sentinel,修改工作目录
配置集群中主节点的地址和主副节点的密码,密码要么一致,要么关闭验证
哨兵程序每5秒检测一次Master是否正常
这里没有把哨兵守护进程打开,是为了查看打印信息
分发哨兵配置
scp /usr/local/softwares/redis/redis-5.0.5/sentinel.conf hadoop-slave1:/usr/local/softwares/redis/redis-5.0.5/sentinel.conf
scp /usr/local/softwares/redis/redis-5.0.5/sentinel.conf hadoop-slave2:/usr/local/softwares/redis/redis-5.0.5/sentinel.conf
分别启动主从的三个Redis和哨兵
src/redis-server redis.conf
src/redis-sentinel sentinel.conf
主节点
从1节点
从2节点
使用Redis客户端连接任意一个哨兵,26379为哨兵默认端口
src/redis-cli -p 26379
输入info查看哨兵,可看到当前master为110.40
关闭master的redis,选举slave1为master,完成选举
主节点哨兵信息,主节点挂了
从1哨兵信息,选举为新主节点
从2哨兵信息
原从1升为master,可写入
从2可读到值
4. Redis Cluster
4.1 创建集群
创建Redis Cluster文件夹,在一台虚拟机上启动六个redis实例,组成集群,端口为7001~7006
复制master的单机redis
mkdir redis-cluster
cd redis-cluster
cp -r ../redis-5.0.5/ redis-1
修改端口为7001
开启集群,修改集群配置文件名称 ,修改集群超时时间
集群配置 | 解释 |
---|---|
cluster-enabled <yes/no> | 如果是yes,表示启用集群,否则以单例模式启动 |
cluster-config-file < filename> | 可选,这不是一个用户可编辑的配置文件,这个文件是Redis集群节点自动持久化每次配置的改变,为了在启动的时候重新读取它。 |
cluster-node-timeout < milliseconds> | 超时时间,集群节点不可用的最大时间。如果一个master节点不可到达超过了指定时间,则认为它失败了。注意,每一个在指定时间内不能到达大多数master节点的节点将停止接受查询请求。 |
cluster-slave-validity-factor < factor> | 如果设置为0,则一个slave将总是尝试故障转移一个master。如果设置为一个正数,那么最大失去连接的时间是node timeout乘以这个factor。 |
cluster-migration-barrier < count> | 一个master和slave保持连接的最小数量(即:最少与多少个slave保持连接),也就是说至少与其它多少slave保持连接的slave才有资格成为master。 |
cluster-require-full-coverage < yes/no> | 如果设置为yes,这也是默认值,如果key space没有达到百分之多少时停止接受写请求。如果设置为no,将仍然接受查询请求,即使它只是请求部分key。 |
修改pid
修改logfile
重命名redis.conf为nodes-7001.conf
mv redis.conf nodes-7001.conf
删除并新建备份文件夹
rm –rf backup
mkdir backup
复制redis-1五份
cp -r redis-1/ redis-2
cp -r redis-1/ redis-3
cp -r redis-1/ redis-4
cp -r redis-1/ redis-5
cp -r redis-1/ redis-6
修改nodes-7001.conf文件名为相应端口;在vim命令模式下,全局搜索7001,替换为相应端口
# 全局范围(%)查找7001并替换为7002,所有出现都会被替换(g)
:%s/7001/7002/g
在集群文件夹新增启动脚本,方便快速启动
vi start-all.sh
cd redis-1
./src/redis-server nodes-7001.conf
cd ..
cd redis-2
./src/redis-server nodes-7002.conf
cd ..
cd redis-3
./src/redis-server nodes-7003.conf
cd ..
cd redis-4
./src/redis-server nodes-7004.conf
cd ..
cd redis-5
./src/redis-server nodes-7005.conf
cd ..
cd redis-6
./src/redis-server nodes-7006.conf
cd ..
chmod +x start-all.sh
./start-all.sh
Redis5.0集群管理工具redis-trib.rb已经被废弃,所以不用安装ruby。当时redis-trib.rb的功能,现在已经集成到了redis-cli中,可查看使用方式。使用六个实例任意一个客户端即可。
src/redis-cli --cluster help
创建集群,会显示配置方案,再输入yes确认创建
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 -a redis
--cluster create
创建集群
--cluster-replicas 1
表示我们希望为集群中的每个主节点创建一个从节点
-a redis
密码
连接集群
src/redis-cli -c -p 7001 -a redis
-c
使用集群方式连接,根据分片情况可完成redis实例间跳转
-p
端口,任意一个都可以连上集群
-a
密码
查看集群信息
查看集群节点信息
查看集群信息,包括分片情况,端口任意一个都可以
src/redis-cli --cluster check 127.0.0.1:7001 -a redis
设值,根据hash,分片存储
4.2 扩容
复制7007,7008
将7007作为master添加到集群中
src/redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 -a redis
将7008作为7007的slave,需要指定7007的nodeid
src/redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001 --cluster-slave --cluster-master-id e2860a1e75b4b47ef89ab54ebb19ce495a00b992 -a redis
重新分区,端口任意一个都可以
src/redis-cli --cluster reshard 127.0.0.1:7003 -a redis
接收方指定为是7007的节点id,提供方可指定具体节点id或者所有节点
7007接收了7001,7002,7003的分片
4.3 缩容
del-node后面的ip:port只要是cluster中有效节点即可,最后一个参数为目标节点的id
只有slave节点和空的master节点可以删除,如果master非空,先用reshard把上面的slot移动到其它node后再删除,如果有一组master-slave节点,将master上所有slot移到其它节点,然后将master删除,剩下的slave会另寻他主,变成其它master的slave。
现在打算删除7007,让7007有key
src/redis-cli --cluster del-node 127.0.0.1:7007 e2860a1e75b4b47ef89ab54ebb19ce495a00b992 -a redis
master非空的话,删除报如下错误:
直接删除7007会报错,所有需要重新分区,将7007分区给其他master
这里将7007的1000 slots分给7001
7008成了7001的slave
成功删除7007
删除7008
src/redis-cli --cluster del-node 127.0.0.1:7008 dde8c62d94db3162ad3d2dd75801ec5923f0c0c5 -a redis
可使用kill关闭集群,重新启动时不需要重新创建集群,直接运行 start-all.sh 即可
参考:
Redis中文官网 下载
Linux安装redis和部署
Redis 的主从同步,及两种高可用方式
Redis进阶实践之十 Redis哨兵集群模式
Redis中文官网 Redis 集群教程
redis集群搭建(非常详细,适合新手)
Redis 学习笔记4: Redis 3.2.1 集群搭建
redis 5.0.2 搭建集群
关于在vim中的查找和替换