redis 集群 高可用
redis集群三种模式
主从复制 奇数台 3 一主两从
哨兵模式 3 一主两从
cluser 集群 6 3 3 3 9
主从复制:和mysql的主从复制类似,写入主的数据通过rdb方式把数据同步到从服务器。从不能更新到主,也是哨兵模式的基础
缺点:故障自动化恢复,只有主能够写
哨兵:故障自动化恢复,主从复制完成之后,从服务器会变成只读模式,故障切换时,主故障,变成从之后,也会进入只读模式
缺点:从节点一旦故障,读会受到影响
集群:把每两台服务器作为主从模式,形成一个大的主从的集群解决了写操作的负载均衡。较为完善的高可用方案
缺点:保证高可用,对数据的完整性要求不高。
主从复制:
主节点和从节点
数据的复制是单向的,由主复制到从
主从复制的流程:
redis主从复制的实验:
实验准备:
主从 | IP地址 |
---|---|
master | 192.168.233.41 |
slave1 | 192.168.233.42 |
slave2 | 192.168.233.43 |
实验前准备好三台源码编译安装好的redis虚拟机
实验步骤:
步骤一:修改master节点的配置文件
vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改监听地址为0.0.0.0(生产环境中,尤其是多网卡最好填写物理网卡的IP)daemonize yes #137行,开启守护进程,后台启动 logfile /var/log/redis_6379.log #172行,指定日志文件存放目录dir /var/lib/redis/6379 #264行,指定工作目录appendonly yes #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart #重启redis服务
步骤二:修改slave节点的配置文件
#修改slave1和slave2的配置文件
vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)daemonize yes #137行,开启守护进程,后台启动logfile /var/log/redis_6379.log #172行,指定日志文件目录dir /var/lib/redis/6379 #264行,指定工作目录replicaof 192.168.73.105 6379 #288行,指定要同步的Master节点的IP和端口appendonly yes #700行,修改为yes,开启AOF持久化功能/etc/init.d/redis_6379 restart #重启redis
netstat -natp | grep redis #查看主从服务器是否已建立连接
步骤三:使用redis工具在主中创建键值查看
哨兵:故障自动化恢复,主从复制完成之后,从服务器变成只读模式
故障切换时,主故障,变成从服务器,主变成从之后,也会进入只读模式
缺点:从节点一旦故障,读会收到影响
切换方式:不是按照权重来进行切换 是以投票的方式:主宕机其他服务器投票,选举,Raft算法,选一个离当前时间点更新最快的从变成主
sentinel monitor mymaster 192.168.233.7 6379 2
初始化监听,都是监听主,监听主动服务器的状态
2 对应的从服务器的数量以及投票的参与者 参与者要和从服务器的数量一致
2台服务器投票通过,主才能进行故障转移。
sentinel down-after-milliseconds mymaster 30000
判断服务器宕机的时间周期 30秒,每30秒检测一次
sentinel failover-timeout mymaster 180000
判断故障节点的超时的最大时间 180秒
redis-sentinel sentinel.conf &
启动哨兵模式命令
redis-cli -p26379 info Sentinel
查看哨兵模式的状态命令
redis哨兵模式的部署
实验组件部署
主从 | ip地址 |
master | 192.168.233.41 |
slave1 | 192.168.233.42 |
slave2 | 192.168.233.43 |
实验具体操作步骤 :
步骤一:修改哨兵节点的配置文件(三台一起)
哨兵的的配置文件是redis软件中自带的配置
vim /opt/redis-5.0.7/sentinel.conf
......
protected-mode no #17行,取消注释,关闭保护模式
port 26379 #21行,Redis哨兵默认的监听端口
daemonize yes #26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log" #36行,指定日志文件存放路径
dir "/var/lib/redis/6379" #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.73.105 6379 2 #84行,修改
#指定该哨兵节点监控192.168.73.105:6379这个主节点,该主节点的名称是mymaster。
#最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 3000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000 #146行,同一个sentinel对同一个master两次failover之间的间隔时间(180秒)
步骤二:启动 哨兵模式
#启动三台哨兵
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
集群:
redis3.0之后的分布式存储方案
集群由多个节点组成,redis数据保存在这些节点中
集群中的节点分为主和从
主负责读写以及维护集群的信息
从节点进行主从数据的复制(也可以查)
redis集群的数据分片
在集群概念中,引用的是hash槽的概念
创建了集群就有16384个哈希槽
3个节点:
主1 0-5460
主2 5461-10922
主3 10923-16383
节点当中如果主和从全部失败整个集群都将不可用
redis-cluster集群实验
实验准备:
六台主机
准备六台主机
redis1 192.168.233.41
redis2 192.168.233.42
redis3 192.168.233.43
redis5 192.168.233.45
redis6 192.168.233.46
redis7 192.168.233.47关闭防火墙和安全机制
vim /etc/redis/6379.conf
70行
bind 0.0.0.0
#监听所有端口
89行
protected-mode no
#关闭保护模式
136行
daemonize yes
700
appendonly yes
#开启aof持久化
833行
cluster-enabled yes
841行取消注释
cluster-config-file nodes-6379.conf
847行取消注释
cluster-node-timeout 15000cd /etc/redis
sz 6379.conf
#将6379这个配置文件发送到其他五台主机同步配置文件/etc/init.d/redis_6379 restart
#所有主机重启redis服务回到redis1:
redis-cli -h 192.168.233.41 --cluster create 192.168.233.41:6379 192.168.233.45:6379 192.168.233.42:6379 192.168.233.46:6379 192.168.233.43:6379 192.168.233.47:6379 --cluster-replicas 1进入redis1:
redis-clli
cluster nodes
#查看主从详细信息
set test1 1
keys *
#在redis1上创建一个键值对到从主机上查看一下