本次使用的是三个redis 在一台机器上演示,如果是在不同的机器上部署,需要将防火墙关闭或者允许端口访问
临时关闭防火墙 systemctl stop firewalld
禁止开机启动防火墙 systemctl disable firewalld
ip为 172.16.121.134
端口为 :
7001 主
7002 从
7003 从
一、安装redis
二、分别copy三个redis配置文件
三、分别修改三个配置文件
1、修改master7001
bind 0.0.0.0 # 任意ip可以连接 port 7001 logfile "7001.log" dbfilename "dump-7001.rdb" daemonize yes # 后台启动 rdbcompression yes # reb备份模式
2、修改slaveof7002
bind 0.0.0.0 # 任意ip可以连接 port 7002 logfile "7002.log" dbfilename "dump-7002.rdb" daemonize yes # 后台启动 rdbcompression yes # reb备份模式 slaveof 172.16.121.134 7001 # 指向master masterauth 123456 --- 主redis服务器配置了密码,则需要配置
3、修改slaveof7003
bind 0.0.0.0 # 任意ip可以连接 port 7003 logfile "7003.log" dbfilename "dump-7003.rdb" daemonize yes # 后台启动 rdbcompression yes # reb备份模式 slaveof 172.16.121.134 7001 # 指向master masterauth 123456 --- 主redis服务器配置了密码,则需要配置
四、分别启动三个redis
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_master_7001.conf /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_slave_7002.conf /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_slave_7003.conf
五、分别连接进三个redis(开三个窗口对比)
/usr/local/redis/bin/redis-cli -h 172.16.121.134 -p 7001 /usr/local/redis/bin/redis-cli -h 172.16.121.134 -p 7002 /usr/local/redis/bin/redis-cli -h 172.16.121.134 -p 7003
六、测试效果
1、主上面设置值,在备机可以取出值
2、备机存入值,会显示只有读的权限
七、分析
因为redis默认使用的是RDB持久化机制;在master挂之前如果存入了数据,此时master挂了,数据有可能不能够同步到slave上面,当master重新启动时,slave会把自己完整的数据同步给master;这个时候数据就会出现丢失的情况
RDB机制:RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
AOF机制:全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
对比:
RDB
优点:使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能
缺点:RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
AOF
优点:可以保持更高的数据完整性,如果设置追加 file 的时间是 1s,如果 redis 发生故障,最多会丢失 1s 的数据;且如果日志写入不完整支持 redis-check-aof 来进行日志修复;AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall)。
缺点:AOF 文件比 RDB 文件大,且恢复速度慢。