redis主从复制
2种原理图
主从复制通信过程
集群好处
主从备份,防止主机宕机
读写分离,分担master的任务
主从复制案例
1个主机7369端口,并行的2个从机7380,7381端口
配置前准备
2 3个redis.conf配置文件
[root@fei redis]# ls
back bin redis6380.conf redis6381.conf redis.conf
1配置从服务器6380
vim redis6380.conf
设置rdb
save 900 1
save 300 10
save 60 100
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6380.rdb
dir /usr/local/src/redis/back
取消aof,因为主服务器已经设置
#端口
port 6380
#pid文件
pidfile /usr/local/src/redis/pid/redis_6380.pid
#dump文件(由6380服务器来进行rdb工作,主服务器不进行rdb工作)
dbfilename dump6380.rdb
#配置主服务的地址
slaveof 127.0.0.1 6379
#6380端口只读
slave-read-only yes
2配置从服务器6381
vim redis6381.conf
取消rdb
取消AOP
port 6381
pidfile /usr/local/src/redis/pid/redis_6381.pid
dbfilename dump6381.rdb
slaveof 127.0.0.1 6379
slave-read-only yes
3配置主服务器6379
vim redis.conf
取消rdb--因为从服务器已经配置
设置aof--可取消可不取消,因为从服务器已经配置,这里设置
# 是否打开 aof日志功能
appendonly yes
# aof文件存放位置(默认与rdb在一个路径下)
appendfilename appendonly.aof
# 每秒写1次
appendfsync everysec
# 正在导出rdb快照的过程中,不要停止同步aof
no-appendfsync-on-rewrite yes
#aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-percentage 100
#aof文件,至少超过64M时,重写
auto-aof-rewrite-min-size 8mb
#端口
port 6379
#pid文件
pidfile /usr/local/src/redis/pid/redis_6379.pid
4 打开所有的服务器
[root@fei redis]# ./bin/redis-server ./redis.conf
[root@fei redis]# ./bin/redis-server ./redis6380.conf
[root@fei redis]# ./bin/redis-server ./redis6381.conf
5 测试
主服务器上设置
[root@fei redis]# ./bin/redis-cli
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> keys *
1) "num"
127.0.0.1:6379> set str 123
OK
127.0.0.1:6379>
从服务检验
[root@fei redis]# ./bin/redis-cli -p 6380
127.0.0.1:6380> get num
"1"
127.0.0.1:6380> get str
"123"
[root@fei redis]# ./bin/redis-cli -p 6381
127.0.0.1:6381> get num
"1"
127.0.0.1:6381> get str
"123"
设置主从复制通信密码
1主机设置密码,如果从服务器不输入密码,无法获取主服务的数据
vim redis.conf
requirepass 123
2开启所有的服务器
3主服务器测试:(连接的时候需要密码)
127.0.0.1:6379> flushdb
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123
OK
127.0.0.1:6379> flushdb
OK
4从服务器测试
--主服务器设置数据
127.0.0.1:6379> set num 1
OK
--从服务器没有获取到数据(因为从服务器配置文件没有设置主服务器的密码)
[root@fei redis]# ./bin/redis-cli -p 6380
127.0.0.1:6380> keys *
(empty list or set)
5从服务配置主服务的密码
2个从服务器都要配置
masterauth 123
6测试
--主服务器设置数据
127.0.0.1:6379> set num 1
OK
--从服务有数据
[root@fei redis]# ./bin/redis-cli -p 6380
127.0.0.1:6380> keys *
1) "num"