1.1 主从复制是什么

主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制, Master 以写为主, Slaver 以读为主

1.2 作用

  • 读写分离,性能扩展
  • 容灾快速恢复

image.png

1.3 配置一主两从

在根目录新建 /myredis,拷贝 redis.conf 配置文件到 /myredis
修改 /myredis/redis.conf 内的信息
daemonize yes
appendonly no

1.3.1 创建 redis6379.conf 并添加以下内容

  1. include /myredis/redis.conf
  2. pidfile /var/run/redis_6379.pid
  3. port 6379
  4. dbfilename dump6379.rdb

1.3.2 创建 redis6380.conf 并添加以下内容

  1. include /myredis/redis.conf
  2. pidfile /var/run/redis_6380.pid
  3. port 6380
  4. dbfilename dump6380.rdb

1.3.3 创建 redis6381.conf 并添加以下内容

  1. include /myredis/redis.conf
  2. pidfile /var/run/redis_6381.pid
  3. port 6381
  4. dbfilename dump6381.rdb

1.3.4 启动三台 redis 服务器

  1. # redis-server redis6379.conf
  2. # redis-server redis6380.conf
  3. # redis-server redis6381.conf

image.png
通过查看进程的方式检查redis是否启动成功
image.png

1.3.5 查看三台主机的运行情况

image.png
image.png
image.png

1.3.6 配从(库)不配主(库)

在从机上执行 slaveof 主机ip 端口号
6380
image.png
6381
image.png
6379
image.png

1.3.7 测试

在6379创建一个值
image.png
在6380、6381查看
image.png
image.png
尝试在从机进行写入操作
image.png
失败

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 机器数量的增加也会使这个问题更加严重。

Redis版本为6.6