1、单机节点弊端
- 单点故障
- 容量有限
- 连接压力
2、集群模型
说明:
AKF
X:全量,镜像,横向扩容
Y:业务,功能,根据业务纵向扩容
Z:优先级,逻辑再拆分,纵向的集群根据一定规则再次划分
3、集群演变
4、集群搭建
使用install_server命令新建两个Redis实例,端口分别为6380、6381
为了方便看日志,设置Redis实例日志直接打印在控制台做如下配置
将配置文件全部复制到一个临时目录中:
2、分别修改各自配置文件:
- 配置改成no 表示输入控制台。
- /var/log/redis_6379.log 将日志显示在控制台,不要记录在日志文件中。
- no AOF关闭。
3、同步命令
5.0版本之前的版本使用SALVEOF,5.0之后的版本使用新命令:REPLICAOF。
主Redis日志信息
从Redis日志信息
测试主从同步情况
6379主Redis设置一个key值
6380从Redis查看keys情况,且从Redis默认不允许写操作(可在配置文件修改成可写操作)
场景一:从机器(6381)突然挂了,挂了之后主机器还在持续写数据,从机器开启后会同步数据么?
从机器6381已经宕机,然后6379主Redis继续写数据
从机器6380能正常获取到数据
从机器6381使用命令
redis-server /redis/test/6381.conf --REPLICAOF 127.0.0.1 6379
客户端重新连接6381,发现数据会正常同步
场景二:主Redis挂了,使用手工切换主从
将6379停止服务
丛Redis将提示连接不上信息,但是能正常查询数据,无法写数据。
人工拯救
Redis不跟随之前的6379
命令:REPLICAOF no one
REPLICAOF no one设置之后,此从Redis实例就变成了主实例。
Redis实例跟随这台新的主机器
使用命令:REPLICAOF 127.0.0.1 6380
测试是否跟随成功
发现已正常同步6380新的主Redis数据
场景二:主Redis挂了,使用哨兵模式自动切换主Redis
设置三个sentinel配置文件分别为:
26379.conf
port 26379 sentinel monitor mymonitor 127.0.0.1 6379 2 //2 数字代表 2票通过
26380.conf
port 26380 sentinel monitor mymonitor 127.0.0.1 6379 2
26381.conf
port 26381 sentinel monitor mymonitor 127.0.0.1 6379 2
发现redis-sentinel 其实就是使用的redis-server同一个命令,只不过参数不一样,所以启动sentinel命令还是redis-server
分别启动三台哨兵
redis-server 26379.conf --sentinel
redis-server 26380.conf --sentinel
redis-server 26381.conf --sentinel
启动哨兵成功界面
此时手动停止6379服务,哨兵是否会正常切换主从?等待几秒之后发现,哨兵和之前两个从Redis实例控制台有日志输出:
6380控制台日志显示:6381来请求访问自己并接受,说明6380是主Redis
6381机器的控制台日志显示:去连接了6380机器并跟随了6380。
测试6381是否正常跟随了6380:
发现6381已正常跟随了6380机器,6380自动切换成主Redis成功。
再次打开刚开始编辑的哨兵配置文件发现文件内容已被程序追加新内容
问题:一个哨兵是怎么知道其他哨兵呢?
答:Redis的发布订阅功能