1.1 主从复制是什么
主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制, Master 以写为主, Slaver 以读为主
1.2 作用
- 读写分离,性能扩展
- 容灾快速恢复
1.3 配置一主两从
在根目录新建 /myredis,拷贝 redis.conf 配置文件到 /myredis
修改 /myredis/redis.conf 内的信息
daemonize yes
appendonly no
1.3.1 创建 redis6379.conf 并添加以下内容
include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
1.3.2 创建 redis6380.conf 并添加以下内容
include /myredis/redis.conf
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
1.3.3 创建 redis6381.conf 并添加以下内容
include /myredis/redis.conf
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
1.3.4 启动三台 redis 服务器
# redis-server redis6379.conf
# redis-server redis6380.conf
# redis-server redis6381.conf
通过查看进程的方式检查redis是否启动成功
1.3.5 查看三台主机的运行情况
1.3.6 配从(库)不配主(库)
在从机上执行 slaveof 主机ip 端口号
6380
6381
6379
1.3.7 测试
在6379创建一个值
在6380、6381查看
尝试在从机进行写入操作
失败
1.4 复制原理
- Slave 启动成功连接到 master 后会发送一个 sync 命令
- Master 接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后, master 将传送整个数据文件到 slave ,以完成一次完全同步
- 全量复制:slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中
- 增量复制:Master继续将新的所有收集到的修改命令一次传给 slave ,完成同步。
- 但是子要是重新连接 master ,一次完全同步(全量复制)将被自动执行。
1.5 薪火相传
上一个 Slave 可以是下一个 slave 的 Master , slave 同样可以接受其他 slave 的连接和同步请求, 那么该 slave 作为了链条中下一个的 master ,可以有效减轻 master 的写压力 ,曲中心化降低风险
用 slave
中途变成转向;会清楚之前的数据,重新建立拷贝最新的。
风险是一旦某个 slvae 宕机,后面的 slave 都没法备份
主机挂了,从机还是从机,无法写数据了。
1.6 反客为主
当一个 master 宕机后,后面的 slave 可以立刻升为 master ,其后面的 slave 不用做任何修改 。
用 slaveof no one 将从机变成主机
1.7 哨兵模式(sentinel)
反客为主自动版,能够后台监控主机是否故障,如果故障了根据投票数将从库转换为主库。
使用步骤
1.7.1 调整为一仆二主模式,6379 为主 6380、6381为从
1.7.2 在自定义的 /myredis 目录下新建 sentinel.conf 文件
1.7.3 配置哨兵配置文件内容
sentinel monitor mymaster 127.0.0.1 6379 1
mymaster 为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量
1.7.4 启动哨兵
redis-sentinel sentinel.conf
1.7.4.1 当主机 down 掉,从机选举中产生了新的主机
大概十秒左右可以在哨兵窗口看到选举的新主机
根据 slave-priority 的优先级别选举产生
原主机重启后会变成从机
1.7.5 复制延时
因为所欲的写操作都是现在 Master上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。