Redis的主从复制
主从复制的简介
1、redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。
2、通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。
主从复制的过程
主从复制的过程
1:当一个从数据库启动时,会向主数据库发送sync命令,
2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来
3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。
4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。
假设我们现在有3个redis服务,地址分别为
192.168.110.138(master),
192.168.110.138(slave),
192.168.110.140(slave)
salve的配置:修改etc/redis/redis.conf文件
sudo vim redis.conf
salve 修改slaveof配置,并填写master的地址
提示:如果主机服务器有密码的话,相应的在masterauth 进行填写master密码
重启redis
systemctl restart redies.service
进行验证
主机进行添加字符串
set nam 123
Slave能获取相应数据,则代表配置成功
get name
注意
1:默认情况下,在进行主从复制配置后,只有master才可以进行写的操作,
所以如果slave进行写的操作,会提示报错
2:配置主从一定要保证redis之间在同一网段
Redis配置哨兵模式
什么是哨兵模式
Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
· 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
· 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
· 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。
哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master.
每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置.
虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel).
修改配置sentinel.conf文件
#进去配置文件
vim redis-3.0.0/sentinel.conf
# 配置主redis 主节点 名称 IP 端口号 选举次数
sentinel monitor mymast 192.168.110.138 6379 1
# 修改心跳检测 5000毫秒
sentinel down-after-milliseconds mymaster 5000
#最多有多少个从节点
sentinel parallel-syncs mymaster 2
#启动哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf (启动的时候,关联哨兵配置文件)
#进入redis命令,查看状态
redis-cli
info
Redis事务
Redis事务简介
工作没啥用,面试参考就行
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:
开始事务。
命令入队。
执行事务。
实例
#开启事务
redis 127.0.0.1:6379> MULTI
OK
# 设置数据
redis 127.0.0.1:6379> SET name "123"
QUEUED
# 没有提交的结果
redis 127.0.0.1:6379> GET name
QUEUED
# 提交当前的事务
redis 127.0.0.1:6379> EXEC
#提交事务后的结果
redis 127.0.0.1:6379> GET name
"123"
在没有提交的时候,slave他是没法读取到未提交的数据的
Redis的持久化
就是将内存数据保存到硬盘。
RDB
RDB 是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
优点:使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能
缺点:RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
RDB 默认开启,redis.conf 中的具体配置参数如下;
#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb
#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
dir ./
##snapshot触发的时机,save
##如下为900秒后,至少有一个变更操作,才会snapshot
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度
##可以通过“save “””来关闭snapshot功能
#save时间,900s修过一次数据就保存数据,下面依次类推
save 900 1
save 300 10
save 60 10000
##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
stop-writes-on-bgsave-error yes
##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
rdbcompression yes
来源:https://blog.csdn.net/qq_42292373/article/details/99655657