一、主从模式介绍
Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。
二、主从同步过程
1、全量复制
2、部分复制
三、主从模式搭建
本例采用单例的1主2从的搭建方式。
服务类型 | 角色 | IP地址 | 端口 |
---|---|---|---|
Redis | master | 127.0.0.1 | 17007 |
Redis | slave | 127.0.0.1 | 17008 |
Redis | slave | 127.0.0.1 | 17009 |
1、首先准备一个redis实例,参考【Redis】安装及简单使用
2、准备一份主配置文件,端口是17007
# 包含文件(redis-base.conf,文件从redis安装目录中拷贝的) include /data/soft/redis-sentinel/redis-base.conf # bind 绑定地址修改,外网能访问 bind 0.0.0.0 # 关闭保护模式 protected-mode no # 端口 port 17007 # 后台运行 daemonize yes # pid文件 pidfile redis_17007.pid # 日志文件 logfile "/data/log/redis-sentinel-log/redis-17007-log/redis-17007.log" # 主认证密码 masterauth 123456 # 认证密码 requirepass 123456 # 最大内存10M,一般为机器内存的3/4 maxmemory 10mb # 内存达到最大时策略,可选择其他策略 maxmemory-policy volatile-lru # 目录 dir /data/soft/redis-sentinel/redis-17007/ # 快照文件 dbfilename dump-17007.rdb
3、准备一份从配置文件,端口是17008,17009,在主配置文件的基础上,修改相应配置,并加上以下2行
# 从节点要跟随的主节点 replicaof 192.168.0.3 17007 # 主节点认证密码,如果设置了密码,就要设置 masterauth 123456
4、目录结构如图:
5、先启动主节点,然后启动从节点
主节点启动命令:redis-5.0.5/src/redis-server redis-17007/redis-17007.conf
从节点启动命令:redis-5.0.5/src/redis-server redis-17008/redis-17008.conf
6、redis客户端链接主节点,查看信息
命令:redis-5.0.5/src/redis-cli -c -h 192.168.0.3 -p 17007 -a 123456
主节点信息:
1 192.168.0.3:17007> INFO Replication 2 # Replication 3 role:master 4 connected_slaves:2 5 slave0:ip=192.168.0.3,port=17008,state=online,offset=1373,lag=0 6 slave1:ip=192.168.0.3,port=17009,state=online,offset=1373,lag=1 7 master_replid:535c43ecbf009f8eae1930d52c2fc6149432b5ee 8 master_replid2:0000000000000000000000000000000000000000 9 master_repl_offset:1373 10 second_repl_offset:-1 11 repl_backlog_active:1 12 repl_backlog_size:1048576 13 repl_backlog_first_byte_offset:1 14 repl_backlog_histlen:1373
从节点信息:
1 192.168.0.3:17008> INFO Replication 2 # Replication 3 role:slave 4 master_host:192.168.0.3 5 master_port:17007 6 master_link_status:up 7 master_last_io_seconds_ago:5 8 master_sync_in_progress:0 9 slave_repl_offset:1261 10 slave_priority:100 11 slave_read_only:1 12 connected_slaves:0 13 master_replid:535c43ecbf009f8eae1930d52c2fc6149432b5ee 14 master_replid2:0000000000000000000000000000000000000000 15 master_repl_offset:1261 16 second_repl_offset:-1 17 repl_backlog_active:1 18 repl_backlog_size:1048576 19 repl_backlog_first_byte_offset:1 20 repl_backlog_histlen:1261
7、测试,在主节点存入缓存,在从节点取出缓存
1 192.168.0.3:17007> set foo bar 2 OK 3 192.168.0.3:17007> get foo 4 "bar" 5 192.168.0.3:17008> get foo 6 "bar" 7 192.168.0.3:17009> get foo 8 "bar"