redis-sentinel主从部署文档

背景说明:

这里采用1主2从的redis集群,3个sentinel搭建高可用redis集群。

注:三台服务器的防火墙需要关闭,否则2从服务器会报错。
redis-server.tar.gz 与 redis-sentinel.tar.gz文件包下载地址分享在此可供下载。

redis-server.tar.gz
链接:https://pan.baidu.com/s/1_GPVAajz1iP-GkNiCzp2Eg 
提取码:pbwo 
redis-sentinel.tar.gz
链接:https://pan.baidu.com/s/1zMLkQqsxGUMsRVatNUvKNQ 
提取码:ev27
  • redis主从复制环境配置
主机说明主机IP端口
master172.16.10.1586379
slave172.16.10.1976379
slave172.16.10.1996379
  • sentinel环境配置
主机说明主机IP端口
sentinel172.16.10.15826379
sentinel172.16.10.19726379
sentinel172.16.10.19926379
redis-sentinel高可用基础功能:
  • 监控:哨兵不断的检查master和slave是否正常的运行。
  • 通知:当监控的某台Redis实例发生问题时,可以通过API通知系统管理员和其他的应用程序。
  • 自动故障转移:如果一个master不正常运行了,哨兵可以启动一个故障转移进程,将一个slave升级成为master,其他的slave被重新配置使用新的master,并且应用程序使用Redis服务端通知的新地址。
  • 配置提供者:哨兵作为Redis客户端发现的权威来源:客户端连接到哨兵请求当前可靠的master的地址。如果发生故障,哨兵将报告新地址
安装redis-sentinel
安装redis-server

安装到 /mano/module/目录

  • 新建redis5-server目录

    mkdir -p redis5-server

  • 进入文件夹 /mano/module/redis5-server
    cd /mano/module/redis5-server

  • 下载redis5-serverl.tar.gz

    wget http://172.16.10.239/common/release/latest/redis5-server.tar.gz

  • 解压缩 redis5-serverl.tar.gz
    tar -zxvf redis5-server.tar.gz

安装redis-sentinel

安装到 /mano/module/目录

  • 新建redis5-sentinel目录

    mkdir -p redis5-sentinel

  • 进入文件夹 /mano/module/redis5-sentinel
    cd /mano/module/redis5-sentinel

  • 下载redis5-sentinel.tar.gz

    wget http://172.16.10.239/common/release/latest/redis5-sentinel.tar.gz

  • 解压缩 redis5-sentinel.tar.gz
    tar -zxvf redis5-sentinel.tar.gz

Redis主从复制配置
  • 进入158 服务器的redis5-server目录下
    修改conf/redis.conf配置文件
# 禁止保护模式
protected-mode no

# bind 127.0.0.1
# 端口,默认端口是6379,生产环境中建议更改端口号,安全性更高
# 如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

# 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。
# 当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
daemonize yes

# 指定存储Redis进程号的文件路径
pidfile ./redis.pid
#配置 log 文件地址,默认打印在命令行终端的窗口上,也可设为/dev/null屏蔽日志
logfile "./redis.log"
# 可用的数据库数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间
databases 16

# 在 900 秒内最少有 1 个 key 被改动,或者 300 秒内最少有 10 个 key 被改动,又或者 60 秒内最少有 1000 个 key 被改动,以上三个条件随便满足一个,就触发一次保存操作。
save 900 1
save 300 10
save 60 10000

# 数据库备份的文件放置的路径
# 路径跟文件名分开配置是因为 Redis 备份时,先会将当前数据库的状态写入到一个临时文件
# 等备份完成时,再把该临时文件替换为上面所指定的文件
# 而临时文件和上面所配置的备份文件都会放在这个指定的路径当中
# 默认值为 ./
dir ./

# 备份文件的文件名
dbfilename dump.rdb
# 设置连接redis的密码
requirepass QpLpYnh619!
#当本机为从服务时,设置主服务的IP及端口
# slaveof <masterip> <masterport>
# 指定与主数据库连接时需要的密码验证
masterauth QpLpYnh619!
slave-priority 100
# min-slaves-to-write 3
# min-slaves-max-lag 10

# maxclients 10000
# maxmemory <bytes>
  • 进入 197和199的服务器的redis5-server目录下(两个服务器配置数据一致)
    修改conf/redis.conf配置文件
protected-mode no

# bind 127.0.0.1
port 6379

daemonize yes
pidfile ./redis.pid
logfile "./redis.log"
databases 16
save 900 1
save 300 10
save 60 10000
dir ./
dbfilename dump.rdb

requirepass QpLpYnh619!
#当本机为从服务时,设置主服务的IP及端口
slaveof 172.16.10.158 6379
masterauth QpLpYnh619!
slave-priority 100
# min-slaves-to-write 3
# min-slaves-max-lag 10

# maxclients 10000
# maxmemory <bytes>

注意说明:

A、slaveof 后面绑定的是master 服务器IP 和端口

B、需要设置master的密码,否则在连接的时候会报 权限不足

C、设置slave 服务器的密码与master服务器上的密码一致,因为这样在后面的哨兵模式自动选出主服务器有很大的帮助,否则会报错。

  • 分别介绍一下redis-server参数配置的含义
daemonize  yes  代表在后台运行。

port 端口号,默认端口是6379。

requirepass 设置redis密码
Sentinel配置
  • 修改sentinel配置文件(三台服务器配置一致)
    进入服务器的redis5-sentinel/conf文件夹下,修改一个文件名为 sentinel.conf 配置文件,文件内容如下:
# 禁止保护模式
protected-mode no
daemonize yes
pidfile ./sentinel.pid

port 26379

dir ./
#指定别名  主节点地址  端口  哨兵个数(有几个哨兵监控到主节点宕机执行转移)
sentinel monitor mymaster 172.16.10.158 6379 2
#如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒  
sentinel down-after-milliseconds mymaster 30000
#如果10秒后,master仍没活过来,则启动failover,默认180s  
sentinel failover-timeout mymaster 180000
#配置连接redis主节点密码
sentinel auth-pass mymaster QpLpYnh619!
#选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1

logfile ./sentinel.log
  • 分别介绍一下sentinel参数配置的含义:
复制代码
sentinel monitor <master-name> <ip> <redis-port> <quorum>
告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效

sentinel auth-pass <master-name> <password>
设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
启动redis-sentinel

进入/mano/module/目录下,执行以下命令,运行redis-sentinel

  • 172.16.10.158执行运行命令

    ./redis5-server/redis.sh start

    ./redis5-sentinel/sentinel.sh start

  • 172.16.10.197执行运行命令

    ./redis5-server/redis.sh start

    ./redis5-sentinel/sentinel.sh start

  • 172.16.10.199执行运行命令

    ./redis5-server/redis.sh start

    ./redis5-sentinel/sentinel.sh start

启动之后 sentinel节点的配置文件,会默认生成部分配置段,该配置段其实就是标注从节点和master节点已经sentinel节点的。
当然,如果发生故障转移,redis中的配置也会发生变化。

查看redis和sentinel信息

查看172.16.10.158 Master节点信息:

[root@base-omu bin]# ./redis-cli
127.0.0.1:6379> auth QpLpYnh619!
OK
127.0.0.1:6379> info
# 此处为省略代码
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.10.197,port=6379,state=online,offset=106681928,lag=0
slave1:ip=172.16.10.199,port=6379,state=online,offset=106681928,lag=0
master_replid:048d6a40886df60561828360231d7a42979e91a1
master_replid2:762c0758b6c60e62bce7b57b8cd7a49363513e88
master_repl_offset:106681928
second_repl_offset:42669
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:105633353
repl_backlog_histlen:1048576

# Keyspace
db0:keys=4,expires=0,avg_ttl=0
127.0.0.1:6379>

从上面信息看出,此时172.16.10.158的角色为master,有两个slave(197和199)被连接成功

  • 此时打开master的sentinel.conf,在末尾可看到如下自动写入的内容:

[root@base-omu redis5]# cat conf/sentinel.conf

protected-mode no
daemonize yes
pidfile "./sentinel.pid"

port 26379

dir "/mano/module/redis5"

sentinel myid 7920676bffbb5aa2ed70677f64dd3fdfa760fde1
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 172.16.10.199 6379 2
sentinel auth-pass mymaster QpLpYnh619!
sentinel config-epoch mymaster 1

logfile "./sentinel.log"

# Generated by CONFIG REWRITE 自动写入内容
sentinel leader-epoch mymaster 1
sentinel known-replica mymaster 172.16.10.197 6379
sentinel known-replica mymaster 172.16.10.158 6379
sentinel known-replica mymaster 172.16.10.197 6380
sentinel known-sentinel mymaster 172.16.10.197 26379 c23449c3b92b5d5944deebc2ef9c7e790418b740
sentinel known-sentinel mymaster 172.16.10.158 26379 3b73d46752d9a58d07fd971f6f0cdb99bd2a5dc4
sentinel current-epoch 1

以同样的方式查看salve节点信息

客户端写入测试数据

客户端连接master节点,写入一条数据

[root@redis-master bin]# ./redis-cli
127.0.0.1:6379> auth QpLpYnh619!
OK
127.0.0.1:6379> set name kevin;
OK
127.0.0.1:6379> get name;
"kevin";

然后客户端再连接任意slave节点,通过get获取上面的那条数据

[root@redis-slave bin]# ./redis-cli
127.0.0.1:6379> auth QpLpYnh619!
OK
127.0.0.1:6379> get name
"kevin;"
127.0.0.1:6379> set name grace;
(error) READONLY You can't write against a read only slave.
127.0.0.1:6379> 
[root@redis--slave bin]# ./redis-cli
127.0.0.1:6379> auth QpLpYnh619!
OK
127.0.0.1:6379> get name
"kevin;"
127.0.0.1:6379> set name grace;
(error) READONLY You can't write against a read only slave.
127.0.0.1:6379> 

由上面测试信息可知,master节点可以写入,可以读取;而slave节点默认只能读取,不能写入!这就实现了主从复制,读写分离了!

模拟故障(通过sentinel实现主从切换,sentinel也要部署多台,即集群模式,防止单台sentinel挂掉情况)

关掉任意一个slave节点(比如关闭掉slave01节点),所有节点的sentinel都可以检测到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值