Q's blog

一些个人文档笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Redis 在 2.8 版本之前没有提供增量部分复制的功能,当网络闪断或者 slave Redis 重启之后会导致主从之间的全量同步,即从 2.8 版本开始增加了部分复制的功能。
repl-diskless-sync yes
#yes 为支持 disk,master 将 RDB 文件先保存到磁盘在发送给 slave,no 为 maste接将 RDB 文件发送给 slave,默认即为使用 no,Master RDB 文件不需要与磁盘交互。
repl-diskless-sync-delay 5
#Master 准备好 RDB 文件后等等待传输时间
repl-ping-slave-period 10
#slave 端向 server 端发送 ping 的时间区间设置,默认为 10 秒
repl-timeout 60
#设置超时时间
repl-disable-tcp-nodelay no
#是否启用 TCP_NODELAY,如设置成 yes,则 redis 会合并小的 TCP 包从而节省带宽,但会增加同步延迟(40ms),造成 master 与 slave 数据不一致,假如设置成 no,则 redis master会立即发送同步数据,没有延迟,前者关注性能,后者关注一致性
repl-backlog-size 1mb
#master 的写入数据缓冲区,用于记录自上一次同步后到下一次同步过程中
间的写入命令,计算公式:b repl-backlog-size = 允许从节点最大中断时长 * 主实例 offset 每秒写入量,比如 master 每秒最大写入 64mb,最大允许 60 秒,那么就要设置为 64mb*60 秒=3840mb(3.8G)=repl-backlog-ttl 3600 #如果一段时间后没有 slave 连接到 master,则 backlog size 的内存将会被释放。如果值为 0 则表示永远不释放这部份内存。
slave-priority 100
#slave 端的优先级设置,值是一个整数,数字越小表示优先级越高。当 master 故障时将会按照优先级来选择 slave 端进行恢复,如果值设置为 0,则表示该 slave 永远不会被选择。
#min-slaves-to-write 0 #
#min-slaves-max-lag 10 #设置当一个 master 端的可用 slave 少于 N 个,延迟时间大于 M 秒时,不接收写操作。
Master 的重启会导致 master_replid 发生变化,slave 之前的 master_replid 就和 master 不一致从而会引发所有 slave 的全量同步。

1
2
3
Redis 支持主从复制分为全量同步和增量同步,首次同步是全量同步
主从同步可以让从服务器从主服务器备份数据,而且从服务器还可与有从服务器,即另外一台 redis 服务器可以从一台从服务器进行数据同步,
redis 的主从同步是非阻塞的,其收到从服务器的 sync(2.8 版本之前是 PSYNC)命令会fork 一个子进程在后台执行 bgsave 命令,并将新写入的数据写入到一个缓冲区里面,bgsave 执行完成之后并生成的将 RDB 文件发送给客户端,客户端将收到后的 RDB 文件载入自己的内存,然后主 redis将缓冲区的内容在全部发送给从 redis,之后的同步从服务器会发送一个 offset 的位置(等同于 MySQL的 binlog 的位置)给主服务器,主服务器检查后位置没有错误将此位置之后的数据包括写在缓冲区的积压数据发送给 redis 从服务器,从服务器将主服务器发送的挤压数据写入内存,这样一次完整的数据同步,再之后再同步的时候从服务器只要发送当前的 offset 位 置给主服务器,然后主服务器根据响应的位置将之后的数据发送给从服务器保存到其内存即可。
阅读全文 »

1
2
上一个步骤的主从架构无法实现 master 和 slave 角色的自动切换,即当 master 出现redis 服务异常、主机断电、磁盘损坏等问题导致 master 无法使用,而 redis 高可用无法实现自故障转移(将 slave 提升为 master),需要手动改环境配置才能切换到 slave redis 服务器,另外也无法横向扩展 Redis 服务的并
行写入性能,当单台 Redis 服务器性能无法满足业务写入需求的时候就必须需要一种方式解决以上的两个核心问题,即:1.master 和 slave 角色的无缝切换,让业务无感知从而不影响业务使用 2.可以横向动态扩展 Redis 服务器,从而实现多台服务器并行写入以实现更高并发的目的。

Redis 集群实现方式:客户端分片 代理分片 Redis Cluster

阅读全文 »

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

阅读全文 »

在常规运维工作中,经常会运用到负载均衡服务。负载均衡分为四层负载和七层负载,那么这两者之间有什么不同?

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
vim /apps/redis/etc/sentinel.conf
bind 0.0.0.0
port 26379
daemonize yes
pidfile "/apps/redis/redis-sentinel.pid"
logfile "/apps/redis/sentinel_26379.log"
dir "/apps/redis"
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.64.110 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
阅读全文 »

集群运行时间长久之后,难免由于硬件故障、网络规划、业务增长等原因对已有集群进行相应的调整,
比如增加 Redis node 节点、减少节点、节点迁移、更换服务器等。
增加节点和删除节点会涉及到已有的槽位重新分配及数据迁移。

阅读全文 »
0%