一、概述
Replication
Redis replication is a very simple to use and configure master-slave replication that allows slave Redis servers to be exact copies of master servers.
主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
Redis 缓存挂掉之后数据库的压力更大,访问量剧增所以做主从复制和读写分离
使用意图:读写分离 容灾恢复
二、主从配置
1、配从(库)不配主(库)
每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
Info replication 查看启动服务的信息
2、从库配置:slaveof 主库IP 主库端口
3、修改配置文件细节位置
① 拷贝多个redis.conf文件
② 开启redis.conf 中的 daemonize yes
③ Pid文件名字
④ 指定端口
⑤ Log文件名字
⑥ Dump.rdb名字
4、复制原理
Slave启动成功连接到master后会发送一个sync命令
Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
5、哨兵模式(sentinel)
1) 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
2) 使用步骤
① 调整结构,6379带着80、81
② /usr/common目录下新建sentinel.conf文件,名字绝不能错
③ 配置哨兵: sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机
④ 启动哨兵
Redis-sentinel /usr/common/sentinel.conf
3) 一组sentinel能同时监控多个Master
6、复制的弊端
复制延时
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
三、主从演示
1、配置三个 redis 服务 (即拷贝3个 redis.conf 配置文件)
在 /usr/local/redis/ 目录(看自己的安装目录)
主: redis6379.conf
从: redis6380.conf
从: redis6381.conf
2、修改以上三个配置文件
daemonize yes
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
# default. You can specify a custom pid file location here.
pidfile "/var/run/redis6380.pid"
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6380
# output for logging but daemonize, logs will be sent to /dev/null
logfile "6380.log"
# The filename where to dump the DB
dbfilename "dump6380.rdb"
以上示例是 端口号为 6380 的redis 服务配置,6379 和 6381 同样修改上述部分
3、开启三个 redis 服务及进入客户端
端口为 6379 服务
[root@bogon bin]# pwd
/usr/local/bin
[root@bogon bin]# redis-server /usr/local/redis/redis.conf
[root@bogon bin]# redis-cli -p 6379
127.0.0.1:6379>
端口为 6380 服务
[root@bogon bin]# pwd
/usr/local/bin
[root@bogon bin]# redis-server /usr/local/redis/redis6380.conf
[root@bogon bin]# redis-cli -p 6380
127.0.0.1:6380>
端口为 6381 服务
[root@bogon bin]# pwd
/usr/local/bin
[root@bogon bin]# redis-server /usr/local/redis/redis6381.conf
[root@bogon bin]# redis-cli -p 6381
127.0.0.1:6381>
4、配置主从服务
127.0.0.1:6380> info replication 查看服务信息
注意:配主不配从
6380 配为 6379 的从服务:
6381 配从 6379 的服务:
6379 主服务的信息
注意:
① 从机值允许读
② 从机挂掉之后,需要手动的配置一下(推荐),除非在配置文件中配置主机一挂掉马上重新配置(不推荐)
③ 真是的生产环境中一主一从够用
5、改变从机对应的主机
6381 改变主为6380
虽然6380 有了从机但是信息任然显示为从机
6、反客为主
当6379 主机挂掉之后,手动设置其中一个从机为主机
主机再回来之后没有从机
7、哨兵模式
1) 配置文件 Sentinel.conf
开启哨兵模式监控
投票次数由 2—1 公平竞争,系统自己投票选择
2)启动哨兵服务
6379挂掉之后 有以下哨兵检测的信息看出后台投票选择主机 最终决定为6381
6379 回来之后不会恢复为之前的master 身份