redis sentinel哨兵模式部署

名词定义:

主节点

从节点

哨兵

集群

部署框架图:

redis sentinel哨兵模式部署_第1张图片

 

缓存物理架构:

哨兵集群物理架构

五台物理机,ip假定为158.222.14.21,158.222.14.22,158.222.14.23,158.222.14.24,158.222.14.25

每台物理机上各部署一个哨兵,占用端口26379

 

redis sentinel哨兵模式部署_第2张图片

 

五台物理机,ip假定为158.222.14.21,158.222.14.22,158.222.14.23,158.222.14.24,158.222.14.25

每台物理机上部署一个master(主节点):端口6301,该主节点的配置两个slave(从节点),从节点分布在另外两台物理机上。图3.

绿色为哨兵(sentinel),

masterdap1为一组一主两从,主节点masterdap1部署在21物理机上,占用6301端口,其两个从节点一个部署在22物理机上,占用6302端口;一个部署在23物理机上,占用6303端口。

masterdap2为一组一主两从,主节点masterdap2部署在22物理机上,占用6301端口,其两个从节点一个部署在23物理机上,占用6302端口;一个部署在24物理机上,占用6303端口。

masterdap3为一组一主两从,主节点masterdap3部署在23物理机上,占用6301端口,其两个从节点一个部署在24物理机上,占用6302端口;一个部署在25物理机上,占用6303端口。

masterMFS为一组一主两从,主节点masterMFS部署在24物理机上,占用6301端口,其两个从节点一个部署在25物理机上,占用6302端口;一个部署在21物理机上,占用6303端口。

masterRPS为一组一主两从,主节点masterRPS部署在25物理机上,占用6301端口,其两个从节点一个部署在21物理机上,占用6302端口;一个部署在22物理机上,占用6303端口。

redis sentinel哨兵模式部署_第3张图片

 

Redis版本:

          Redis 版本:3.0.7

编译:

(1)解压

$tar -zxvf redis-3.2.9.tar.gz

(2)进入路径 redis-3.2.9

执行make命令编译

$make

(3)编译成功后src路径下会有如下文件

redis sentinel哨兵模式部署_第4张图片

文件说明:

编号

文件

说明

备注

1

mkreleasehdr.sh

redis自带的版本管理工具,非redis源码编译产生

 

2

redis-benchmark

性能测试工具

 

3

redis-check-aof

aof文件检测修复工具

 

4

redis-check-rdb

rdb文件检查修复工具

 

5

redis-cli

redis客户端

 

6

redis-sentinel

哨兵server

 

7

redis-server

redis服务端

 

8

redis-trib.rb

ruby语言编写,非redis源码编译产生,该脚本用来配置cluster,运行该脚本需要ruby环境和ruby的redis依赖

 

配置:

注意:对于redis的内存使用策略,可通过先设置系统级别的内存使用策略:查看系统文件:

 /proc/sys/vm/overcommit_memmory  可设值:0,1,2  建议设为1

Sentinel 部署:

Sentinel部署安装

环境用户:

用root用户登陆,创建用户redis,密码redis。创建成功后退出root,用redis/redis登陆

登陆158.222.14.21 (用户/密码:redis/redis), 注:sentinel部署以21服务器为例说明,22,23,24,25服务器按照此部署步骤部署。

下载地址http://download.redis.io/releases/redis-stable,上传redis压缩包至服务器并解压至redis用户根目录,切换至redis目录执行make命令编译。在src目录下会生成对应的可执行文件。(此处也可直接使用安装包中的已编译过的redis文件)

在用户根目录下新建目录:$HOME/redis_sentinel_26379  把如下文件复制进来

 

redis sentinel哨兵模式部署_第5张图片

 

 

以redis用户在$HOME/redis_sentinel_26379路径下创建run路径,进入run路径,创建data路径,创建logs路径,data路径与logs路径平级。

复制sentinel.conf文件为sentinel_26379.conf ,此两个文件处于同一路径下,并做如下修改:

1、端口:port 26379

2、增加redis 守护进程启动

daemonize  yes

3、增加log路径并指定sentinel日志文件:

logfile /home/redis/redis_sentinel_26379/run/logs/sentinel_26379.log

dir "/home/redis /redis_sentinel_26379/run/tmp"

4、哨兵监听主节点配置:

修改:sentinel monitor mymaster 127.0.0.1 6379 2 为

sentinel monitor masterdap1 158.222.14.21 6301 3

sentinel monitor masterdap2 158.222.14.22 6301 3

sentinel monitor masterdap3 158.222.14.23 6301 3

sentinel monitor masterMFS 158.222.14.24 6301 3

sentinel monitor masterRPS 158.222.14.25 6301 3

说明:

有几个主节点就配置几行,mymaster 为主节点的名字,每个主节点的名字保证唯一性,此处使用master+系统标识+流水号作为主节点name。

每行最后的数字,不能大于哨兵的数量,不能小于哨兵数量的一半。

5、心跳配置:

修改:sentinel parallel-syncs mymaster 1 为

sentinel down-after-milliseconds masterdap1 30000

sentinel down-after-milliseconds masterdap2 30000

sentinel down-after-milliseconds masterdap3 30000

sentinel down-after-milliseconds masterMFS 30000

sentinel down-after-milliseconds masterRPS 30000

说明:

a、sentinel认为服务器已经断线所需的毫秒数。

b、与哨兵监听主节点的配置一致, 有几个主节点配置几行,主节点的名字要一 一对应。

6、failover配置:

修改:sentinel parallel-syncs mymaster 1 为

sentinel parallel-syncs masterdap1 1

sentinel parallel-syncs masterdap2 1

sentinel parallel-syncs masterdap3 1

sentinel parallel-syncs masterMFS 1

sentinel parallel-syncs masterRPS 1

说明:

a、在故障转移时,最多可以有多少个从节点同时对新的主节点进行同步,这个数字越小,完成故障转移所需的时间就越长。

b、与哨兵监听主节点的配置一致, 有几个主节点配置几行,主节点的名字要一一对应。

7、failover-timeout 配置:

修改:sentinel failover-timeout mymaster 180000 为

sentinel failover-timeout masterdap1 900000

sentinel failover-timeout masterdap2 900000

sentinel failover-timeout masterdap3 900000

sentinel failover-timeout masterMFS 900000

sentinel failover-timeout masterRPS 900000

说明:

a:如果在指定的时间内未能完成failover故障转移,则任务故障转移失败。

b:与哨兵监听主节点的配置一致, 有几个主节点配置几行,主节点的名字要一一对应。

其它的默认

 

Redis主从部署安装:

主节点masterdap1的主从配置(masterdap2,masterdap3,masterRPS,masterMFS

的主从配置皆按照此步骤部署):

role

host

port

主节点masterdap1

158.222.14.21

6301

从节点slave1

158.222.14.22

6302

从节点slave2

158.222.14.23

6303

主节点masterdap2

158.222.14.22

6301

从节点slave1

158.222.14.23

6302

从节点slave2

158.222.14.24

6303

主节点masterdap3

158.222.14.23

6301

从节点slave1

158.222.14.24

6302

从节点slave2

158.222.14.25

6303

主节点masterRPS

158.222.14.24

6301

从节点slave1

158.222.14.25

6302

从节点slave2

158.222.14.21

6303

主节点masterMFS

158.222.14.25

6301

从节点slave1

158.222.14.21

6302

从节点slave2

158.222.14.22

6303

部署主节点masterdap1:

登陆158.222.14.21(用户/密码:redis/redis)

在用户根目录下新建目录:$HOME/redis_6301/ , 把如下文件复制进来

 

redis sentinel哨兵模式部署_第6张图片

 

以redis用户在$HOME/ redis_6301路径下创建run路径,进入run路径,创建data路径,创建logs路径 , data路径与logs路径平级。

复制redis.conf为redis_6301.conf,此两个文件处于同一路径下

编辑redis_6301.conf

如下为修改后的值在实际中可找到对应的前节点修改后面的值:

1、修改: pidfile /var/run/redis.pid    为

pidfile /var/run/redis_6301.pid

2、修改: port 6379  为

port 6301

3、修改: logfile ""  为

logfile home/redis/redis_6301/run/logs/redis_6301.log

4、修改: #save ""

save 900 1

save 300 10

save 60 10000

save ""

#save 900 1

#save 300 10

#save 60 10000

说明:此参数为redis的SNAPSHOT持久化策略

5、修改:# maxmemory  

说明:此参数为redis最大内存大小,视redis使用场景和宿主机大小而定

6、修改:# maxclients 10000 为  maxclients 10000

7、修改:# maxmemory-policy noeviction 为maxmemory-policy allkeys-lru

说明:缓存数据淘汰策略

8、修该:# maxmemory-samples 5  为    maxmemory-samples 5

9、修改:dbfilename dump.rdb 为 dbfilename dump_6301.rdb

10、修改:dir./  为 dir /home/redis/redis_6301/run/data

11、修改:appendfilename "appendonly.aof" 为

appendfilename "appendonly_6301.aof"

12、修改:timeout 0  为 timeout=180

说明:该参数为连接的超时时间,当超过该时间(单位秒)连接未有操作,该连接被关闭。

不操作redis的短连接应该被关闭。

主节点masterdap1部署完成。

部署主节点masterdap1的两个从节点

Slave1

158.222.14.22

6302

Slave2

158.222.14.23

6303

 

配置主节点masterdap1的从节点slave1。以redis用户登陆158.222.14.22物理机,在用户根目录下新建目录:$HOME/redis_6302/,把如下文件复制进来

 

redis sentinel哨兵模式部署_第7张图片

 

在路径 $HOME/redis_6302/ 下创建run路径,进入run路径,创建data路径,创建logs路径 , data路径与logs路径平级。

复制redis.conf为redis_6302.conf,此两个文件处于同一路径下

编辑redis_6302.conf文件:

修改:pidfile /var/run/redis.pid  为 pidfile  /var/run/redis_6302.pid

修改:port 6379 为port 6302

修改:logfile "" 为

logfile "/home/redis/redis_6302/run/logs/redis_6302.log"

修改:

#save ""

save 900 1

save 300 10

save 60 10000

save ""

#save 900 1

#save 300 10

#save 60 10000

说明:redis的SNAPSHOT持久化策略,此处配置为关闭SNAPSHOT持久化策略,若要求redis数据高可用,则该参数默认即可。

修改:dbfilename dump.rdb  为 dbfilename  dump_6302.rdb

修改:dir ./ 为dir "/home/redis/redis_6302/run/data"

修改:# slaveof 为 slaveof 158.222.14.21 6301

说明:根据此配置确定主从关系,主节点无须配置该参数,从节点必须配置该参数

修改:# maxclients 10000 为 maxclients 10000

修改:# maxmemory 为 maxmemory

说明:此参数为redis最大内存大小,视redis使用场景和宿主机大小而定

      修改:# maxmemory-policy noeviction 为 maxmemory-policy allkeys-lru

说明:数据淘汰策略

      修改:# maxmemory-samples 5 为 maxmemory-samples 5

      修改:appendonly no 为appendonly yes

说明:redis的 appendonly持久化策略 ,此处启用appendonly策略

      修改:#appendfsync  everysec 为appendfsync  everysec

说明:redis的appendonly持久化策略参数,每秒一次

修改:appendfilename "appendonly.aof" 为appendfilename "appendonly_6302.aof"

说明:appendonly持久化策略的持久化数据文件

 

主节点masterdap1的从节点Slave1配置完成

配置主节点masterdap1的从节点slave2,参照slave1部署。

 

Redis启动/停止:

启动顺序:哨兵集群  ---- > 所有主节点 --–> 所有从节点

停止顺序:所有从节点 ----> 所有主节点  --–> 哨兵集群

1、启动哨兵集群

哨兵启动有两种方式,一种是非守护进程启动方式,该方式为默认方式。一种是守护进程启动方式。

(1)、非守护进程启动:

进入$HOME/redis/redis_sentinel_26379路径,启动命令如下:

./redis-sentinel  sentinel_26379.conf

如图:

redis sentinel哨兵模式部署_第8张图片

出现如下结果即说明哨兵启动成功:

redis sentinel哨兵模式部署_第9张图片

 

(2)、守护进程启动

守护启动有两种方式,第一种为在启动时以指定参数的方式:

以nohub的方式启动并指定日志路径,

 

nohup ./redis-sentinel sentinel_26379.conf  >> /home/redis/redis_sentinel_26379/run/logs/sentinel_26379.log 2>&1 &

 

以守护进程启动的第二中方式为在哨兵配置文件redis_sentinel_26379中增加如下配置:

 

daemonize yes

logfile "/home/redis/redis_sentinel_26379/run/logs/sentinel_26379.log"

 

 

然后以命令 ./redis-sentinel  sentinel_26379.conf 即可启动,在日志文件中可以看到启动结果。

redis sentinel哨兵模式部署_第10张图片

 

2、启动主节点

主节点和哨兵启动方式类似,仅命令不同。

以非守护进程方式启动:

 

启动成功后会看到如下日志:

redis sentinel哨兵模式部署_第11张图片

 

守护进程启动

守护进程启动有两种方式

守护启动有两种方式,第一种为在启动时以指定参数的方式:

以nohub的方式启动并指定日志路径,

 

nohup ./redis-server  redis_6301.conf  >> /home/redis/redis_6301/run/logs/redis_6301.log  2>&1 &

 

以守护进程启动的第二中方式为在哨兵配置文件redis_sentinel_26379中增加如下配置:

 

daemonize yes

logfile "/home/redis/redis_6301/run/logs/redis_6301.log"

 

      以命令  ./redis-server  redis_6301.conf 即可启动,在日志文件中可以看到启动结果

redis sentinel哨兵模式部署_第12张图片

 

3、启动从节点

同主节点

 

验证启动结果

启动完成后,进入一个哨兵客户端,因为一台机器上部署多个节点,所以进入客户端时必须指定端口:

redis sentinel哨兵模式部署_第13张图片

在客户端输入命令:info  或info sentinel 便可看到该哨兵所监控所有主节点信息:

redis sentinel哨兵模式部署_第14张图片

如上图,有5个主节点,主节点名称,状态,ip,端口,从节点数量,监控的哨兵数量等。

 

日志查看:

Redis配置文件中指定日志路径和日志级别,见配置文件中logfile配置项

 

权限管理:

1、初始化时配置权限:

(1)主节点和从节点配置:

requirepass  password 

此配置为连接redis 时的权限密码

masterauth   password

此配置为从节点连接主节点时的权限密码,password 为主节点的requirepass

(2)哨兵配置:

sentinel auth-pass masterName master_passwd

masterName 为哨兵监控主节点的名字,master_passwd 为主节点的requirepass

(3)启动顺序:所有主节点 - 所有从节点 - 哨兵

2、运行中配置权限

(1)运行中的redis集群设置权限,主节点必须最后设置密码,哨兵和从节点无顺序要求。如果先设置主节点密码,那么从节点同步数据时会因主节点有权限导致连接不上主节点。哨兵向主节点发送心跳请求时也会因主节点有权限导致无法获得心跳响应,哨兵会认为主节点主观-客观下线进而进行主从切换。

(2)配置方式,连接redis客户端,以config命令设置密码

设置密码(主节点、从节点):

查看密码(主节点、从节点):

主、从节点设置连接主节点权限密码:

主、从节点查看连接主节点权限密码:

注:主节点也要设置 masterauth,如果不设置,主从切换后新从节点(切换前主节点)会连不上新主节点(切换前的某个从节点)

 

常见问题及解决方法:

1、持久化

Master最好不要做任何持久化配置,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。

如果数据比较关键,某个slave开启AOF备份数据,策略为每秒同步一次

为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。

尽量避免在压力较大的主库上增加从库

(后续补充)

 

2、启动警告:WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

临时解决办法(系统重启后失效)

解决办法:echo 511 > /proc/sys/net/core/somaxconn

永久解决办法:

将其写入、/etc/rc.local文件中

 

3、启动警告:WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

 

此问题需设置redis缓存使用策略,/proc/sys/vm/overcommit_memory

可设置的值:0,1,2,建议设置为1

临时解决方法:

A: echo 1 > /proc/sys/vm/overcommit_memory

B: echo “overcommit_memory=1” >> /etc/sysctl.conf

永久解决办法:

将其写入  /etc/sysctl.conf文件中

 

4、启动警告:WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

 

临时解决办法:echo never >/sys/kernel/mm/transparent_hugepage/enabled

永久解决办法:将其写入/etc/rc.local文件中

你可能感兴趣的:(redis)