搭建Redis集群
Redis分片特点:
1.可以实现Redis内存数据的扩容
2.Redis分片本身没有高可用性效果,如果宕机将直接影响用户的使用
Redis哨兵特点:
1.可以实现Redis节点的高可用,但是哨兵本身没有实现高可用机制(最好不要引入第三方)
2.Redis哨兵有主从的结构,实现内存数据的备份,但是没有实现内存扩容的效果
Redis集群特点:
既可以内容扩容又可以高可用性
为什么要搭建集群
通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。
Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿。
由于内存大小的限制,使用一台 Redis 实例显然无法满足需求,这时就需要使用多台 Redis作为缓存数据库。但是如何保证数据存储的一致性呢,这时就需要搭建redis集群.采用合理的机制,保证用户的正常的访问需求.
采用redis集群,可以保证数据分散存储,同时保证数据存储的一致性.并且在内部实现高可用的机制.实现了服务故障的自动迁移.
集群搭建
(主从划分:3台主机3台从机,共6台 端口划分:7000-7005)
1.准备集群文件
mkdir cluster
2.在cluster文件夹中分别创建7000-7005文件
mkdir 7000 7001 7002 7003 7004 7005
3.复制配置文件
将redis目录中的redis.conf文件复制到cluster/7000/ 并以原名保存
cp redis.conf cluster/7000/
修改配置文件
vim redis.conf
1.注释本地绑定IP地址
69行 #bind 127.0.0.1
2.关闭保护模式
88行 protected-mode no
3.修改端号
92行 port 7000
4.启动后台启动
136行 daemonize yes
5.修改pid文件
158行 pidfile /usr/local/src/redis/cluster/7000/redis.pid
6.修改持久化文件路径
263行 dir /usr/local/src/redis/cluster/7000
7.设定内存优化策略
597行 maxmemory-policy volatitle-lru
8.关闭AOF模式
699行 appendonly no
9.开启集群配置
838行 cluster-enabled yes
10.开启集群配置文件
846行 cluster-config-file nodes.conf
11.修改集群超时时间
852行 cluster-node-timeout 15000
复制修改后的配置文件
将7000文件夹下redis.conf文件分别复制到7001-7005中
[root@localhost cluster]# cp 7000/redis.conf 7001/
[root@localhost cluster]# cp 7000/redis.conf 7002/
[root@localhost cluster]# cp 7000/redis.conf 7003/
[root@localhost cluster]# cp 7000/redis.conf 7004/
[root@localhost cluster]# cp 7000/redis.conf 7005/
批量修改
将7001-7005文件中的7000端口改为对应的端口名称
:%s/7000/7001/g
4.通过脚本编辑启动/关闭指令
创建启动脚本
vim start.sh
#!/bin/sh
redis-server 7000/redis.conf &
redis-server 7001/redis.conf &
redis-server 7002/redis.conf &
redis-server 7003/redis.conf &
redis-server 7004/redis.conf &
redis-server 7005/redis.conf &
创建关闭的脚本
vim shutdown.sh
#!/bin/sh
redis-cli -p 7000 shutdown &
redis-cli -p 7001 shutdown &
redis-cli -p 7002 shutdown &
redis-cli -p 7003 shutdown &
redis-cli -p 7004 shutdown &
redis-cli -p 7005 shutdown &
启动redis节点
sh start.sh
检查redis节点启动是否启动正常
ps -ef | grep redis
5.创建redis集群
#5.0版本执行
redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000 192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003 192.168.126.129:7004 192.168.126.129:7005
关于集群面试题
问题:Redis集群中最对存储16384个数据???
错误 分区只负责数据的划分 数据的储存由内存决定
crc16(key1)%16384 = 1000
crc16(key2)%16384 = 1000
问题:Redis集群中最多有多少台主机???
16384主机 (一台主机占用一个槽道)