主从复制
主从模式也叫主从复制,主是主服务器,从是从服务器,主服务器(master )的数据如果更新了 也会同步到从服务器(slave),一个主服务器可以搭配很多个从服务器,主服务器负责写入 从服务器只能读取 不能写入
主从模式的作用:
- 数据备份:无论哪一台服务器宕机 数据都有备份 保证redis可用性高
- 扩展性能:搭建了很多服务器,提高服务器容量和带宽
- 读写分离:主负责写入 从负责读取
搭建主从模式步骤:
案例:搭建一个主服务器和两台从服务器
1.创建一个目录,保存主从模式的配置文件(有几个节点配置几个配置文件)
mkdir xxx
2.复制几份配置文件
cp redis,conf xxx/redis-1.conf
cp redis,conf xxx/redis-2.conf
cp redis,conf xxx/redis-3.conf3.分别修改每个配置文件(类似于之前的配置)
ip地址 端口号 PID文件 log文件 rdb文件 不要冲突
注:如果是从服务器 需要添加一个配置
replicaof 主服务器的ip地址 端口号4.开启redis服务
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf5.查看进程是否有三个redis节点
ps -ef | grep redis6.查看主从信息是否正确 1个主两个从
redis-cli -h ip地址 -p 端口 info replication结果:如果从节点宕机了 对其他节点没有任何影响如果主节点宕机了 对数据备份没有影响 但是不能写入
哨兵模式
主从模式的缺点:如果主节点宕机了需要人工介入切换主节点,手动通过命令将其他的从节点升为主节点 slaveof new master 这是运维人员的工作。
所以redis2.8以上引入哨兵模式 哨兵模式就是优化版的主从模式 唯一区别就是添加一个新的角色叫做哨兵,可以监控主和从节点的可用性 如果从宕机 哨兵不管 如果主宕机 哨兵会自动投票选择哪个从节点升为主节点。
搭建哨兵模式步骤:
案例:1个主 1个从 3个哨兵1.创建一个新目录sentinel保存配置文件(5个文件)2.cp复制5个配置文件3.编写配置文件(主从配置文件跟原来一致)4.编写哨兵配置文件#哨兵端口号port 10000#设置为守护进程,则进程启动后会在后台运行daemonize yes#pid保存文件pidfile /var/run/10000.pid#日志文件logfile "/usr/local/redis-5.0.3/log/10000.log"#哨兵配置sentinel monitor mymaster 192.168.190.147 7000 2#设置多少秒失效则认为主节点宕机sentinel down-after-milliseconds mymaster 10000#设置故障转移 最多可以有多少个从节点升为主节点sentinel parallel-syncs mymaster 1#设置故障转移最大时间sentinel failover-timeout mymaster 60000#关闭保护机制protected-mode no5.开启redisredis-server redis-7000.confredis-server redis-7001.conf开启哨兵redis-sentinel 10000.confredis-sentinel 10001.confredis-sentinel 10002.conf6.查看进程是否存在ps -ef | grep redis
集群模式
哨兵模式基本上可以解决大部分的问题,但是为了进一步的保证redis的高可用,哨兵模式也有自己的缺点,无法控制并发量 无法提升redis容量。
哨兵模式容量:不能无限扩容,因为就是一台主节点
哨兵模式并发量:一个redis主节点并发量大约是10万,也是不够的,所以redis推出了集群模式,集群最大可以增加到1000台节点,节点添加的越多,性能(容量和并发量)提高的也越多。
如果主节点宕机了 从节点会自动升为主节点,redis集群一共会设计16384个数据分槽(slot),每个数据分槽会去管理一部分数据。这么多数据分槽平均分配给不同的redis节点,每个redis节点同时也会搭配很多从节点。
主节点选取步骤:
- 槽分配:当 Redis 集群启动时,初始情况下所有槽都未分配给任何节点。节点会通过集群协调器(Cluster Coordinator)进行槽的分配,确保每个槽都由集群中的某个节点负责。
- 主节点选举:在槽分配完成后,集群会自动进行主节点的选举。主节点的选取过程包括考虑节点的负载、连接质量、数据分布等因素。通常情况下,集群会选择那些负责的槽数量较少、负载较低的节点作为主节点。
- 故障转移:当主节点发生故障或不可用时,Redis Cluster 会通过自动故障转移(Automatic Failover)机制选择一个从节点升级为主节点,确保集群的高可用性。
搭建集群模式步骤:
案例:redis-cluster(6个节点(3主3从))
1.创建目录cluster
mkdir cluster2.拷贝需要的配置文件
cp redis.conf cluster/redis-xxx.conf3.编写集群的配置文件
编写ip
端口号
开启守护进程
关闭保护机制
进程id (PID文件)
rdb文件(持久化)#集群配置
#开启集群
cluster-enabled yes
#指定集群文件的配置文件名,首次启动会自动生成
cluster-config-file nodes-7000.conf
#如果一个主节点宕机了 如果从服务器没有可以故障恢复的节点 集群是否仍然可用
cluster-require-full-coverage no4.启动redis集群的所有节点(由于节点太多不要单个运行)
推荐使用脚本语言 编写脚本 批量运行
linux编写的脚本是xxx.sh 类似于window下的 xxx.bat*.sh编写语法
#!/bin/bash一般表示脚本语言开始
#!/bin/bash
echo "开启redis集群"
#循环6次
for i in `seq 7000 7005`
do
redis-server redis-$i.conf ## $i表示获取i
echo $i"开启redis成功"
doneredis-server redis-7000.conf5.自动分配数据分槽 并且集群主从节点
不能换行 多个节点ip是空格相连
redis-cli --cluster create 192.168.190.147:7000 192.168.190.147:7001 192.168.190.147:7002 192.168.190.147:7003 192.168.190.147:7004 192.168.190.147:7005 --cluster-replicas 1注:如果配置集群时,出现is not empty是由于之前配置过,或者保存文件和原来的重名 删除data包 rdb文件 conf文件
重启redis服务器(先关闭 再开启)6.最后测试集群是否搭建成功
redis-cli -h ip地址 -p 端口号 进入客户端
cluster info查看集群信息7.测试java代码连接redis集群
以后搭建好集群只需要./start.sh启动redis就可以开启集群。
ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!
链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》