redis集群
1. 三种集群
1.1 主从模式
- 特点1.主从模式中redis数据库分为两种:主数据库(master)和从数据库(slave)
- 2.主数据库负责读写,从数据库只能读数据,主数据库实时同步数据到从数据库。
- 3.一个master可以有多个slave,一个slave只能有一个master
- 4.master挂了不影响从库的读数据,但是整个集群此时不能写数据,当master重启后,集群继续支持读数据。
- 5.slave挂了不影响整个集群的读写数据,但是此slave停止服务,当重启后继续提供服务。
- 6.salve不能提升为master。
- 7.整个集群向外提供服务。
- 优势搭建简单
- 缺点数据库master存在单点故障,整个集群不能提供完全的高可用。
- 单机的内存限制了整个集群可写的数据量。
1.2 sentinel模式
sentinel模式中文读作哨兵模式,是从主从模式上发展过来的。
- 特点.在主从模式的基础上,增加了哨兵。
- 2.当master挂了后,sentinel会从slave从选择一个作为master,并修改他们的配置文件,其他slave的配置slaveof也会被修改。
- 3.当挂了的master重启后,将不再作为master,而是降级为slave。
- 4.为了防止sentinel挂了,整个集群停止服务,启动多个sentinel形成sentinel集群。
- 5.多个sentinel之间会自动监控
- 6.sentinel最好不要和redis部署在同一台机器上,不然redis的服务挂了后,sentinel也挂了。
- 7.sentinel集群对外提供服务,不需要直连master,slave
- 优势
- 整个集群不存在单点故障,master挂了后,选择slave自动提升为master。
- 缺点
- 由于本质还是主从模式,所以整个集权可写入的数据大小受限于
- 单个机器内存的大小。
1.3 cluster模式
cluster的出现是为了解决单机容量有限的集群方案,会对写入的数据进行分片,写入多个Redis实例中。
- 特点
- 1.多个redis节点网络互联,数据共享
- 2.如果配置了俩个副本三个分片,则需要六个Redis实例,当数据过大时,可以增加机器扩容。
- 3.每个集群至少需要三个主数据库才能正常运行。
- 4.所有节点都是一主一从(可以配置一主多从),其中slave不提供服务,只作为备用
- 5.不支持批量命令(如:mget,mset),因为redis需要把key均匀的分布到多个节点上。
- 优点
- 集群写入数据容量没有限制,支持大量数据缓存。高可用
- 缺点
- client实现复杂,提升了开发的难度
2.搭建
2.1单机安装redis安装
下载源码包
// redis命令默认目录
/usr/local/bin
// 我们新建的目录
//日志,aof,备份存放目录
/homepa1/redis/redisdataX
//配置文件的目录
/homepa1/redis/redisconf
//redis解压的源码
/homepa1/redis/redis-5.0.7
2.2 配置主从模式
机器信息
我们在一台机器上模拟。
ip | 主从 | 端口 |
192.168.0.1 | 主 | 6000 |
192.168.0.1 | 从 | 6001 |
192.168.0.1 | 从 | 6002 |
master-6000配置
cd /homepa1/redis/redisconf
vim redis6000.conf
bind 192.168.0.1 //监听ip, 多个ip以空格分割,客户端 -h 配置的参数(如果服务器有多个网卡,指定暴露服务的ip)
port 6000 //监听端口
daemonize yes // 允许后台启动
logfile "/homepa1/redis/redisdata6000/redis.conf" //日志文件
dir /homepa1/redis/redisdata600 //数据库备份文件存放目录
masterauth pass9527 //slave连接密码
requirepass pass9527 //master连接密码
appendonly yes /在配置的dir目录下生成,appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof文件
slave-6001配置
cd /homepa1/redis/redisconf
vim redis6001.conf
bind 192.168.0.1 //监听ip,多个ip以空格分割,客户端 -h 配置的参数(如果服务器有多个网卡,指定暴露服务的ip)
port 6001 //监听端口
replicaof 192.168.0.1 6000 // mastert ip和端口
daemonize yes // 允许后台启动
logfile "/homepa1/redis/redisdata6001/redis.conf" //日志文件
dir /homepa1/redis/redisdata6001 //数据库备份文件存放目录
masterauth pass9527 //slave连接密码
requirepass pass9527 //master连接密码
appendonly yes //在配置的dir目录下生成,appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof文件
slave-6002配置
cd /homepa1/redis/redisconf
vim redis6002.conf
bind 192.168.0.1 //监听ip, 多个ip以空格分割,客户端 -h 配置的参数(如果服务器有多个网卡,指定暴露服务的ip)
port 6002 //监听端口
replicaof 192.168.0.1 6000 // mastert ip和端口
daemonize yes // 允许后台启动
logfile "/homepa1/redis/redisdata6002/redis.conf" //日志文件
dir /homepa1/redis/redisdata6002 //数据库备份文件存放目录
masterauth pass9527 //slave连接密码
requirepass pass9527 //master连接密码
appendonly yes /在配置的dir目录下生成,appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof文件
分别启动三个redis实例
redis-server /homepa1/redis/redisconf/redis6000.conf
redis-server /homepa1/redis/redisconf/redis6001.conf
redis-server /homepa1/redis/redisconf/redis6002.conf
2.3 配置哨兵模式
机器信息
我们在一台机器上模拟。
ip | 主从 | 端口 |
192.168.0.1 | 主 | 6000 |
192.168.0.1 | 从 | 6001 |
192.168.0.1 | 从 | 6002 |
192.168.0.1 | 哨兵 | 6003 |
192.168.0.1 | 哨兵 | 6004 |
master和slalve的参考【配置主从模式】
配置sentinel-6003
cd /homepa1/redis/redisconf
vim sentinel6003.conf
daemonize yes //后台启动
logfile "/homepa1/redis/redisdata6003/sentinel.log" //日志文件
dir /homepa1/redis/redisdata6003 // 工作目录
sentinel monitor mymaster 192.168.0.1 6000 2 //判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
sentinel auth-pass mymaster pass9527 // password
sentinel down-after-milliseconds mymaster 30000 //判断master主观下线时间,默认30s
配置sentinel-6004
cd /homepa1/redis/redisconf
vim sentinel6004.conf
daemonize yes //后台启动
logfile "/homepa1/redis/redisdata6004/sentinel.log" //日志文件
dir /homepa1/redis/redisdata6004 // 工作目录
sentinel monitor mymaster 192.168.0.1 6000 2 //判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
sentinel auth-pass mymaster pass9527 // password
sentinel down-after-milliseconds mymaster 30000 //判断master主观下线时间,默认30s
启动哨兵
redis-sentinel /homepa1/redis/redisconf/sentinel6003.conf
redis-sentinel /homepa1/redis/redisconf/sentinel6004.conf