[Redis] redis-sentinel集群配置(一主两从三哨兵)


本文总阅读量

1、所有节点安装redis

节点信息:
主1:10.0.7.53
从2:10.0.7.50
从3:10.0.7.51
除了在三个节点部署redis服务,再分别部署sentinel。

2、配置主从,在主节点配置文件添加如下配置:

主节点1配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
pidfile /data/redis/log/redis.pid
bind 10.0.7.53
port 6379
daemonize yes
logfile "/data/redis/log/redis.log"
databases 16
maxmemory 1g
requirepass 123456
masterauth 123456
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-ping-slave-period 10
repl-timeout 60
repl-disable-tcp-nodelay no
repl-backlog-size 5mb
repl-backlog-ttl 3600

从节点2配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pidfile /data/redis/log/redis.pid
bind 10.0.7.50
port 6379
daemonize yes
logfile "/data/redis/log/redis.log"
databases 16
maxmemory 1g
slaveof 10.0.7.53 6379
masterauth 123456
requirepass 123456
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-ping-slave-period 10
repl-timeout 60
repl-disable-tcp-nodelay no
repl-backlog-size 5mb
repl-backlog-ttl 3600

从节点3配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pidfile /data/redis/log/redis.pid
bind 10.0.7.50
port 6379
daemonize yes
logfile "/data/redis/log/redis.log"
databases 16
maxmemory 1g
slaveof 10.0.7.53 6379
masterauth 123456
requirepass 123456
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-ping-slave-period 10
repl-timeout 60
repl-disable-tcp-nodelay no
repl-backlog-size 5mb
repl-backlog-ttl 3600

上面配置相关参数详解:

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
#复制选项,slave复制对应的master。
slaveof <masterip> <masterport>

#如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。masterauth就是用来配置master的密码,这样可以在连上master后进行认证。
masterauth <master-password>
-------------------------------------
如果主库配置了密码,从库没有添加这行数据,会报一下错误:
# Unexpected reply to PSYNC from master: -NOAUTH Authentication required.
* Retrying with SYNC...
# MASTER aborted replication with an error: NOAUTH Authentication required.
-------------------------------------

#当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。2) 如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误”SYNC with master in progress”。
slave-serve-stale-data yes

#作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)。
slave-read-only yes

#是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件。有2种方式:disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的情况下推荐用socket方式。
repl-diskless-sync no

#diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来。
repl-diskless-sync-delay 5

#slave根据指定的时间间隔向服务器发送ping请求。时间间隔可以通过 repl_ping_slave_period 来设置,默认10秒。
# repl-ping-slave-period 10

#复制连接超时时间。master和slave都有超时时间的设置。master检测到slave上次发送的时间超过repl-timeout,即认为slave离线,清除该slave信息。slave检测到上次和master交互的时间超过repl-timeout,则认为master离线。需要注意的是repl-timeout需要设置一个比repl-ping-slave-period更大的值,不然会经常检测到超时。
# repl-timeout 60

#是否禁止复制tcp链接的tcp nodelay参数,可传递yes或者no。默认是no,即使用tcp nodelay。如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽。但是这也可能带来数据的延迟。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes。
repl-disable-tcp-nodelay no

#复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令。这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存。没有slave的一段时间,内存会被释放出来,默认1m。
# repl-backlog-size 5mb

#master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。单位为秒。
# repl-backlog-ttl 3600

#当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举。
slave-priority 100

#redis提供了可以让master停止写入的方式,如果配置了min-slaves-to-write,健康的slave的个数小于N,mater就禁止写入。master最少得有多少个健康的slave存活才能执行写命令。这个配置虽然不能保证N个slave都一定能接收到master的写操作,但是能避免没有足够健康的slave的时候,master不能写入来避免数据丢失。设置为0是关闭该功能。
# min-slaves-to-write 3

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

3、修改哨兵配置文件

cat sentinel.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
port 26379
dir "/tmp/sentinel"
logfile "/tmp/sentinel.log"
daemonize yes
sentinel monitor mymaster 10.0.7.53 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 180000
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2
sentinel known-slave mymaster 10.0.7.51 6379
sentinel known-slave mymaster 10.0.7.50 6379
sentinel current-epoch 2
protected-mode no

指定的dir路径若不存在需要手动创建:

1
mkdir -p /tmp/sentinel

sentinel相关配置参数详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
#sentinel monitor mymaster 10.0.7.53 6379 2
// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名

#sentinel down-after-milliseconds mymaster 30000
//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达

#sentinel parallel-syncs mymaster 1
//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1

#sentinel failover-timeout mymaster 180000
//故障转移超时时间为180000毫秒

4、启动服务

各服务器启动redis服务

1
/data/redis/src/redis-server /data/redis/etc/redis.conf

各服务器启动sentinel服务

1
/data/redis/src/redis-sentinel /data/redis/sentinel.conf

查看集群信息

1
/data/redis/src/redis-cli -h 127.0.0.1 -p 26379 INFO Sentinel
目录
  1. 1. 1、所有节点安装redis
  2. 2. 2、配置主从,在主节点配置文件添加如下配置:
  3. 3. 3、修改哨兵配置文件
  4. 4. 4、启动服务

Proudly powered by Hexo and Theme by Lap
本站访客数人次
© 2020 zeven0707's blog