Redis主从

database

Redis主从

主从必读事项

  • 通过主从配置可以实现读写分离(从机默认只读)
  • slave首次启动或者重启连接到master时,会导致主库bgsave。这一点可以通过Redis的debug日志看得到
  • 设置主从后,首次部署从库是增量同步的,原本数据将被全部清掉
  • master可以拥有多个slave
  • 多个slave可以连接同一个master外,还可以连接到其他slave
  • 可以在master禁用数据持久化,注释掉master配置文件中的所有save配置,只需在slave上配置数据持久化即可
  • 主从复制不会阻塞master,在同步数据时,master可以继续处理client的请求,这一点可以通过master的日志证明

2966:M 04 Mar 05:29:11.533 # Connection with slave 192.168.56.101:6379 lost.

2966:M 04 Mar 05:29:12.612 * Slave 192.168.56.101:6379 asks for synchronization

2966:M 04 Mar 05:29:12.612 * Partial resynchronization request from 192.168.56.101:6379 accepted. Sending 0 bytes of backlog starting from offset 1.

  • 主从同步原理

配置好slave后,slave会马上master建立连接,slave立即发送sync命令, 而master马上异步同步数据. 不管是第一次连接还是重新连接, master都会启动一个后台进程, 将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存.后台进程完成写文件后, master就发送文件给slave, slave将文件保存到硬盘上, 再加载到内存中, 接着master就会把缓存的命令转发给slave, 后续master将收到的写命令发送给 slave. 如果master同时收到多个slave发来的同步连接命令, master只会启动一个进程来写数据库镜像, 然后发送给所有的slave.

  • 因为redis采用的是异步复制,没有办法避免数据的丢失。但是可以通过配置来做到尽可能的减少丢失

# master最少得有多少个健康的slave存活才能执行写命令 

# 当min-slaves-to-write=1时,slave去维护断开的情况下,主库此时只能读,不能写

# 只有一个从库且要去维护的时候,请先设置 最少写从库的个数为0,再去维护从库

min-slaves-to-write 1

# 延迟小于min-slaves-max-lag秒的slave才认为是健康的slave

# 里的延迟值就是提到的INFO replication命令的lag值。

min-slaves-max-lag 10

主机配置

# 如果主从要跨服务器,需要关闭保护模式,负责无法连接.

# protected-mode yes

protected-mode no

# 如果跨服务器需要设置修改或者关闭IP的监听地址,否则外部无法连接(该IP绑定的意思是只接收来自于该IP地址的请求)

# bind 127.0.0.1

bind 0.0.0.0

# 设置连接密码(非必须,可以不设置)

requirepass redis-password

##### 数据持久化设置

#主机也可关闭数据持久化,提高写入的性能,把持久化策略改成这样既可

# save 900 1

# save 300 10

# save 60 10000

save ""

从机配置

命令行设置从库

SLAVEOF host port

# 启动从机,同时为从机指定读取的配置文件,设置主机的地址(主机如果有密码才需要设置masterauth)

redis-server /etc/redis/redis.conf --slaveof 192.168.56.100 6379 --masterauth redis-password

# 也可以通过先启动从机的服务再为从机设置主机地址

root@ubuntu:~# redis-cli

127.0.0.1:6379> slaveof 192.168.56.100 6379

OK

配置文件设置从库

# 通过修改下面的配置文件设置主机地址和认证密码(主机如果有密码才需要设置masterauth)

# slaveof <masterip> <masterport>

# masterauth <master-password>

slaveof 192.168.56.100 6379

masterauth redis-password

##### 数据持久化设置

# 开启aof

# 此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能

# 只有在“yes”下,aof重写/文件同步等特性才会生效

appendonly yes

# aof 日志文件名

appendfilename redis.aof

# 每秒记录一次日志,建议everysec

appendfsync everysec

# 重写过程中是否向日志文件写入,yes 代表rewrite过程中,不向aof文件中追加信息,rewrite结束后再写入,no 代表rewrite执行的同时,也向aof追加信息

no-appendfsync-on-rewrite yes

# 触发重写文件增长百分比 默认100%

auto-aof-rewrite-percentage 100

# 触发重写最小aof文件尺寸

auto-aof-rewrite-min-size 64mb

关闭从机的主从关系

# 在从机中执行该命令可以取消该从机与主机的主从关系

slaveof no one

# 执行案例

127.0.0.1:6379> slaveof no one

OK

查看主从复制情况

  • 命令

# 查看复制情况

info replication

  • 查看主库情况

root@ubuntu:~# redis-cli info replication

# Replication

role:master

connected_slaves:2

slave0:ip=192.168.56.102,port=6379,state=online,offset=2576,lag=1

slave1:ip=192.168.56.101,port=6379,state=online,offset=2576,lag=1

master_replid:aa50063cb231eb77f42074a72739b7dbda163825

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:2576

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:1

repl_backlog_histlen:2576

  • 查看从库情况

root@ubuntu:~# redis-cli info replication 

# Replication

role:slave

master_host:192.168.56.100

master_port:6379

master_link_status:up

master_last_io_seconds_ago:6

master_sync_in_progress:0

slave_repl_offset:280

slave_priority:100

slave_read_only:1

connected_slaves:0

master_replid:b481fcb52e9f8ffe1e3180f09e0e982ae0b2fcf9

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:280

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:267

repl_backlog_histlen:14

以上是 Redis主从 的全部内容, 来源链接: utcz.com/z/532511.html

回到顶部