一、 Redis主从复制原理

参考文档

文档地址:

https://www.cnblogs.com/daofaziran/p/10978628.html

配置说明:

https://www.cnblogs.com/kreo/p/4423362.html

全量同步

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:

  • 从服务器连接主服务器,发送SYNC命令;

  • 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;

  • 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;

  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;

  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;

  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令

img

增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

Redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

注意点

如果多个Slave断线了,需要重启的时候,因为只要Slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机。

Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝。需要清除Redis主从复制的几点重要内容:

1)Redis使用异步复制。但从Redis 2.8开始,从服务器会周期性的应答从复制流中处理的数据量。

2)一个主服务器可以有多个从服务器。

3)从服务器也可以接受其他从服务器的连接。除了多个从服务器连接到一个主服务器之外,多个从服务器也可以连接到一个从服务器上,形成一个

图状结构。

4)Redis主从复制不阻塞主服务器端。也就是说当若干个从服务器在进行初始同步时,主服务器仍然可以处理请求。

5)主从复制也不阻塞从服务器端。当从服务器进行初始同步时,它使用旧版本的数据来应对查询请求,假设你在redis.conf配置文件是这么配置的。

否则的话,你可以配置当复制流关闭时让从服务器给客户端返回一个错误。但是,当初始同步完成后,需要删除旧的数据集和加载新的数据集,在

这个短暂的时间内,从服务器会阻塞连接进来的请求。

6)主从复制可以用来增强扩展性,使用多个从服务器来处理只读的请求(比如,繁重的排序操作可以放到从服务器去做),也可以简单的用来做数据冗余。

7)使用主从复制可以为主服务器免除把数据写入磁盘的消耗:在主服务器的redis.conf文件中配置“避免保存”(注释掉所有“保存“命令),然后连接一个配

置为“进行保存”的从服务器即可。但是这个配置要确保主服务器不会自动重启(要获得更多信息请阅读下一段)

主从复制的一些特点:

1)采用异步复制;

2)一个主redis可以含有多个从redis;

3)每个从redis可以接收来自其他从redis服务器的连接;

4)主从复制对于主redis服务器来说是非阻塞的,这意味着当从服务器在进行主从复制同步过程中,主redis仍然可以处理外界的访问请求;

5)主从复制对于从redis服务器来说也是非阻塞的,这意味着,即使从redis在进行主从复制过程中也可以接受外界的查询请求,只不过这时候从redis返回的是以前老的数据,

如果你不想这样,那么在启动redis时,可以在配置文件中进行设置,那么从redis在复制同步过程中来自外界的查询请求都会返回错误给客户端;(虽然说主从复制过程中

对于从redis是非阻塞的,但是当从redis从主redis同步过来最新的数据后还需要将新数据加载到内存中,在加载到内存的过程中是阻塞的,在这段时间内的请求将会被阻,

但是即使对于大数据集,加载到内存的时间也是比较多的);

6)主从复制提高了redis服务的扩展性,避免单个redis服务器的读写访问压力过大的问题,同时也可以给为数据备份及冗余提供一种解决方案;

7)为了编码主redis服务器写磁盘压力带来的开销,可以配置让主redis不在将数据持久化到磁盘,而是通过连接让一个配置的从redis服务器及时的将相关数据持久化到磁盘,

不过这样会存在一个问题,就是主redis服务器一旦重启,因为主redis服务器数据为空,这时候通过主从同步可能导致从redis服务器上的数据也被清空;

Redis大概主从同步是怎么实现的?

全量同步:

master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程

处理完毕后,会将该rdb文件传递给slave服务器,而slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的

命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性。

部分同步:

从redis 2.8版本以前,并不支持部分同步,当主从服务器之间的连接断掉之后,master服务器和slave服务器之间都是进行全量数据同步,但是从redis 2.8开

始,即使主从连接中途断掉,也不需要进行全量同步,因为从这个版本开始融入了部分同步的概念。部分同步的实现依赖于在master服务器内存中给每个slave服务器维护了

一份同步日志和同步标识,每个slave服务器在跟master服务器进行同步时都会携带自己的同步标识和上次同步的最后位置。当主从连接断掉之后,slave服务器隔断时间

(默认1s)主动尝试和master服务器进行连接,如果从服务器携带的偏移量标识还在master服务器上的同步备份日志中,那么就从slave发送的偏移量开始继续上次的同步

操作,如果slave发送的偏移量已经不再master的同步备份日志中(可能由于主从之间断掉的时间比较长或者在断掉的短暂时间内master服务器接收到大量的写操作),则

必须进行一次全量更新。在部分同步过程中,master会将本地记录的同步备份日志中记录的指令依次发送给slave服务器从而达到数据一致。

主从同步中需要注意几个问题

1)在上面的全量同步过程中,master会将数据保存在rdb文件中然后发送给slave服务器,但是如果master上的磁盘空间有效怎么办呢?那么此时全部同步对于master来说

将是一份十分有压力的操作了。此时可以通过无盘复制来达到目的,由master直接开启一个socket将rdb文件发送给slave服务器。(无盘复制一般应用在磁盘空间有限但是网

络状态良好的情况下)

2)主从复制结构,一般slave服务器不能进行写操作,但是这不是死的,之所以这样是为了更容易的保证主和各个从之间数据的一致性,如果slave服务器上数据进行了修改,

那么要保证所有主从服务器都能一致,可能在结构上和处理逻辑上更为负责。不过你也可以通过配置文件让从服务器支持写操作。(不过所带来的影响还得自己承担哦。。。)

3)主从服务器之间会定期进行通话,但是如果master上设置了密码,那么如果不给slave设置密码就会导致slave不能跟master进行任何操作,所以如果你的master服务器

上有密码,那么也给slave相应的设置一下密码吧(通过设置配置文件中的masterauth);

4)关于slave服务器上过期键的处理,由master服务器负责键的过期删除处理,然后将相关删除命令已数据同步的方式同步给slave服务器,slave服务器根据删除命令删除

本地的key。

当主服务器不进行持久化时复制的安全性

在进行主从复制设置时,强烈建议在主服务器上开启持久化,当不能这么做时,比如考虑到延迟的问题,应该将实例配置为避免自动重启。

为什么不持久化的主服务器自动重启非常危险呢?

为了更好的理解这个问题,看下面这个失败的例子,其中主服务器和从服务器中数据库都被删除了。

设置节点A为主服务器,关闭持久化,节点B和C从节点A复制数据。

这时出现了一个崩溃,但Redis具有自动重启系统,重启了进程,因为关闭了持久化,节点重启后只有一个空的数据集。

节点B和C从节点A进行复制,现在节点A是空的,所以节点B和C上的复制数据也会被删除。

当在高可用系统中使用Redis Sentinel,关闭了主服务器的持久化,并且允许自动重启,这种情况是很危险的。

比如主服务器可能在很短的时间就完成了重启,以至于Sentinel都无法检测到这次失败,那么上面说的这种失败的情况就发生了。

如果数据比较重要,并且在使用主从复制时关闭了主服务器持久化功能的场景中,都应该禁止实例自动重启。

Redis主从复制是如何工作的

如果设置了一个从服务器,在连接时它发送了一个SYNC命令,不管它是第一次连接还是再次连接都没有关系。

然后主服务器开始后台存储,并且开始缓存新连接进来的修改数据的命令。当后台存储完成后,主服务器把数据文件发送到从服务器,

从服务器将其保存在磁盘上,然后加载到内存中。然后主服务器把刚才缓存的命令发送到从服务器。这是作为命令流来完成的,并且

和Redis协议本身格式相同。

你可以通过telnet自己尝试一下。在Redis服务器工作时连接到Redis端口,发送SYNC命令,会看到一个批量的传输,并且主服务器接收

的每一个命令都会通过telnet会话重新发送一遍。

当主从服务器之间的连接由于某些原因断开时,从服务器可以自动进行重连接。当有多个从服务器同时请求同步时,主服务器只进行一个后台存储。

当连接断开又重新连上之后,一般都会进行一个完整的重新同步,但是从Redis2.8开始,只重新同步一部分也可以。

部分重新同步

从Redis 2.8开始,如果遭遇连接断开,重新连接之后可以从中断处继续进行复制,而不必重新同步。

它的工作原理是这样:

主服务器端为复制流维护一个内存缓冲区(in-memory backlog)。主从服务器都维护一个复制偏移量(replication offset)和master run id ,

当连接断开时,从服务器会重新连接上主服务器,然后请求继续复制,假如主从服务器的两个master run id相同,并且指定的偏移量在内存缓冲

区中还有效,复制就会从上次中断的点开始继续。如果其中一个条件不满足,就会进行完全重新同步(在2.8版本之前就是直接进行完全重新同步)。

因为主运行id不保存在磁盘中,如果从服务器重启了的话就只能进行完全同步了。

部分重新同步这个新特性内部使用PSYNC命令,旧的实现中使用SYNC命令。Redis2.8版本可以检测出它所连接的服务器是否支持PSYNC命令,不支持的

话使用SYNC命令。

无磁盘复制

通常来讲,一个完全重新同步需要在磁盘上创建一个RDB文件,然后加载这个文件以便为从服务器发送数据。

如果使用比较低速的磁盘,这种操作会给主服务器带来较大的压力。Redis从2.8.18版本开始尝试支持无磁盘的复制。

使用这种设置时,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储。

配置

主从复制的配置十分简单:把下面这行加入到从服务器的配置文件中即可。

slaveof 192.168.1.1 6379

当然你需要把其中的192.168.1.1 6379替换为你自己的主服务器IP(或者主机名hostname)和端口。另外你可以调用SLAVEOF命令,

主服务器就会开始与从服务器同步。

关于部分重新同步,还有一些针对复制内存缓冲区的优化参数。查看Redis介质中的Redis.conf示例获得更多信息。

使用repl-diskless-sync配置参数来启动无磁盘复制。使用repl-diskless-sync-delay 参数来配置传输开始的延迟时间,以便等待

更多的从服务器连接上来。查看Redis介质中的Redis.conf示例获得更多信息。

只读从服务器

从Redis 2.6开始,从服务器支持只读模式,并且是默认模式。这个行为是由Redis.conf文件中的slave-read-only 参数控制的,

可以在运行中通过CONFIG SET来启用或者禁用。

只读的从服务器会拒绝所有写命令,所以对从服务器不会有误写操作。但这不表示可以把从服务器实例暴露在危险的网络环境下,

因为像DEBUG或者CONFIG这样的管理命令还是可以运行的。不过你可以通过使用rename-command命令来为这些命令改名来增加安全性。

你可能想知道为什么只读限制还可以被还原,使得从服务器还可以进行写操作。虽然当主从服务器进行重新同步或者从服务器重启后,

这些写操作都会失效,还是有一些使用场景会想从服务器中写入临时数据的,但将来这个特性可能会被去掉。

限制有N个以上从服务器才允许写入

从Redis 2.8版本开始,可以配置主服务器连接N个以上从服务器才允许对主服务器进行写操作。但是,因为Redis使用的是异步主从复制,

没办法确保从服务器确实收到了要写入的数据,所以还是有一定的数据丢失的可能性。

这一特性的工作原理如下:

1)从服务器每秒钟ping一次主服务器,确认处理的复制流数量。

2)主服务器记住每个从服务器最近一次ping的时间。

3)用户可以配置最少要有N个服务器有小于M秒的确认延迟。

4)如果有N个以上从服务器,并且确认延迟小于M秒,主服务器接受写操作。

还可以把这看做是CAP原则(一致性,可用性,分区容错性)不严格的一致性实现,虽然不能百分百确保一致性,但至少保证了丢失的数据不会超过M秒内的数据量。

如果条件不满足,主服务器会拒绝写操作并返回一个错误。

1)min-slaves-to-write(最小从服务器数)

2)min-slaves-max-lag(从服务器最大确认延迟)

二、 Redis主从复制配置

1.参考文档

文档地址:

https://www.cnblogs.com/daofaziran/p/10978628.html

配置说明:

https://www.cnblogs.com/kreo/p/4423362.html

2.主从配置

#从服务增加配置

slaveof 192.168.1.1 6379

3.一些常用配置:

redis-default.conf 作为基础配置,供其他配置文件引用

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
bind 127.0.0.1

protected-mode yes

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize yes

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile "/var/log/redis/redis_6379.log"

databases 16

 

always-show-logo yes

 

#RDB

#save 900 1

#save 300 10

#save 60 10000

#stop-writes-on-bgsave-error yes

#rdbcompression yes

#rdbchecksum no

#dbfilename dump.rdb

#dir ./

 

#masterauth dy123456

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100

#requirepass dy123456

maxclients 10000

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

slave-lazy-flush no

 

#AOF

appendonly no

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble no

 

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

单机版redis-single.conf 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#导入基础配置

include redis-default.conf

#根目录,建议配置成绝对路径,这样下面的file都可以配置成相对路径

dir ./

#守护方式启动

daemonize yes

#守护方式PID存放路径

pidfile /var/run/redis_6379.pid

#绑定的客户端地址

bind 0.0.0.0

#启动端口

port 6379

#tcp队列长度(不能超过somaxconn和tcp_max_syn_backlog的值)

tcp-backlog 4096

#客户端闲置关闭时间,0代表不关闭

timeout 300

#检测时间,空闲则关闭

tcp-keepalive 60

#日志级别 debug/verbose:适用于开发和调试 notice:适用于生产模式 warning:只打印警告

loglevel notice

#日志文件stdout是标准输出(输出屏幕或者发送给dev/null)

logfile "/var/log/redis/redis_6379.log"

logfile stdout

#数据库访问密码

requirepass dy123456

#最大连接数 0代表不限制

maxclients 10000

#最大内存限制maxmemory bytes

#maxmemory 16777216

#开启RDB 每60分钟备份一次

save 3600 1

#开启AOF

appendonly yes

#AOF文件位置

appendfilename "appendonly.aof"

#每秒备份

appendfsync everysec

#开启混合备份模式

aof-use-rdb-preamble yes

#混合模式RDB备份时机 ,默认是文件到达64M即进行重写

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 128mb

 

#禁用危险命令

rename-command FLUSHALL "nkGqnnmrnES22sA0KI9KVP18TToAhbwP"

rename-command FLUSHDB "3h0Y2uVnENarfbF8tHtVrP4Q1PUXZnU8"

rename-command KEYS "Rq1iyHHsPfUam9w9XkBQ5mhRERI01YIs"

rename-command CONFIG "9jgj3ETHylbxczuJT6Kp6GSHuNdJB1xd"

集群配置redis-cluster.conf , 在单机版的配置下 , 增加集群配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#导入单机配置

include redis-single.conf

 

#启用集群模式

cluster-enabled yes

#集群启动后存放节点的文件

cluster-config-file nodes_6379.conf

#节点连接超时时间

cluster-node-timeout 5000 

#集群访问密码,一般和数据库访问密码一致

masterauth dy123456

完整redis.conf配置

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#bind 127.0.0.1

#绑定的IP

bind 0.0.0.0

#安全模式

protected-mode yes

#启动端口

port 6379

#tcp队列长度(不能超过somaxconn和tcp_max_syn_backlog的值)

tcp-backlog 4096

#客户端闲置关闭时间,0代表不关闭

timeout 300

#检测时间,空闲则关闭

tcp-keepalive 60

#守护方式启动

daemonize yes

#supervised

supervised no

#守护方式PID存放路径

pidfile /var/run/redis_6379.pid

#日志级别 debug/verbose:适用于开发和调试 notice:适用于生产模式 warning:只打印警告

loglevel notice

#日志文件stdout是标准输出(输出屏幕或者发送给dev/null)

logfile "/var/log/redis/redis_6379.log"

logfile stdout

#数据库数量

databases 16

#数据库访问密码

requirepass dy123456

 

always-show-logo yes

 

#开启RDB 每60分钟备份一次

save 3600 1

#RDB

#save 900 1

#save 300 10

#save 60 10000

#stop-writes-on-bgsave-error yes

#rdbcompression yes

#rdbchecksum no

#dbfilename dump.rdb

#根目录,建议配置成绝对路径,这样下面的file都可以配置成相对路径

dir ./

 

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100

#最大连接数 0代表不限制

maxclients 10000

#最大内存限制maxmemory bytes

#maxmemory 16777216

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

slave-lazy-flush no

 

#开启AOF

appendonly yes

#AOF文件位置

appendfilename "appendonly.aof"

#每秒备份

appendfsync everysec

#开启混合备份模式

aof-use-rdb-preamble yes

#混合模式RDB备份时机 ,默认是文件到达64M即进行重写

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 128mb

#AOF

no-appendfsync-on-rewrite no

aof-load-truncated yes

 

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

 

#禁用危险命令

rename-command FLUSHALL "nkGqnnmrnES22sA0KI9KVP18TToAhbwP"

rename-command FLUSHDB "3h0Y2uVnENarfbF8tHtVrP4Q1PUXZnU8"

rename-command KEYS "Rq1iyHHsPfUam9w9XkBQ5mhRERI01YIs"

rename-command CONFIG "9jgj3ETHylbxczuJT6Kp6GSHuNdJB1xd"

 

#启用集群模式

#cluster-enabled yes

#集群启动后存放节点的文件

#cluster-config-file nodes_6379.conf

#节点连接超时时间

#cluster-node-timeout 5000

#集群访问密码,一般和数据库访问密码一致

#masterauth dy123456

sentinel.conf配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# bind 127.0.0.1

bind 0.0.0.0

 

# 哨兵的端口号

# 因为各个哨兵节点会运行在单独的Docker容器中

# 所以无需担心端口重复使用

# 如果需要在单机

port 26379

 

#安全模式

protected-mode no

 

# 设定密码认证

requirepass dy123456

 

#后台运行

daemonize yes

 

# 配置哨兵的监控参数

# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>

# master-name是为这个被监控的master起的名字

# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名

# redis-port是被监控节点所监听的端口号

# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了

sentinel monitor redis_6379 172.18.0.2 6379 1

 

# 连接主节点的密码

# 格式:sentinel auth-pass <master-name> <password>

sentinel auth-pass redis_6379 dy123456

 

# master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒

# 格式:sentinel down-after-milliseconds <master-name> <milliseconds>

sentinel down-after-milliseconds redis_6379 30000

sentinel failover-timeout redis_6379 180000

sentinel parallel-syncs redis_6379 1

 

# 数据文件

dir ./

 

# 日志和接口

logfile "/var/log/redis/sentinel_26379.log"

pidfile /var/run/redis_26379.pid