0. 装置
- vmware15.x+
- centos7.x+
redis 相干配置
哨兵日志解读
0.1 下载 redis 源码包
- https://redis.io/
0.2 下载对应版本
- redis-5.0.10.tar.gz
0.3 上传并编译装置
# 装置 gcc
- yum install -y gcc
# 进入解压缩目录执行如下命令
- make MALLOC=libc
# 编译实现后执行如下命令
- make install PREFIX=/usr/redis
# 进入 /usr/redis 目录启动 redis 服务
- ./redis-server
1. 搭建 redis 主从
主从复制架构仅仅用来解决数据的冗余备份, 从节点仅仅用来同步数据
无奈解决: 1.master 节点呈现故障的主动故障转移
1.1 筹备三台机器并批改配置
- master
port 6379
bind 0.0.0.0
protected-mode no
daemonize yes - slave1
port 6380
bind 0.0.0.0
slaveof masterip masterport
masterauthmasterPassword
# 如果 master 没有配置明码能够不填
pidfile “/var/run/redis_6381.pid” # 同一台机器上测试 这个要写成不同的文件
protected-mode no
daemonize yes - slave2
port 6381
bind 0.0.0.0
slaveof masterip masterport
masterauthmasterPassword
# 如果 master 没有配置明码能够不填
pidfile “/var/run/redis_6381.pid” # 同一台机器上测试 这个要写成不同的文件
protected-mode no
daemonize yes
1.2 启动 3 台机器进行测试
- cd /usr/redis/bin
- ./redis-server /root/master/redis.conf
- ./redis-server /root/slave1/redis.conf
- ./redis-server /root/slave2/redis.conf
2. 搭建 redis 哨兵
Sentinel(哨兵)是 Redis 的高可用性解决方案:由一个或多个 Sentinel 实例 组成的 Sentinel 零碎能够监督任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监督的主服务器进入下线状态时,主动将下线主服务器属下的某个从服务器降级为新的主服务器。简略的说哨兵就是带有 主动故障转移性能的主从架构。
无奈解决: 1. 单节点并发压力问题 2. 单节点内存和磁盘物理下限
2.1 搭建哨兵架构
# 1. 在主节点上创立哨兵配置
- 在 Master 对应 redis.conf 同目录下新建 sentinel.conf 文件,名字相对不能错;# 2. 配置哨兵,在 sentinel.conf 文件中填入内容:阐明:{port}前面的数字 2 变量是 quorum, 是指当有两个及以上的 sentinel 服务检测到 master 宕机,才会去执行主从切换的性能。object down 主观下线 odown ,subjective down 主观下线
sdown slaves 则是主动发现的没必要指定;
- sentinel monitor masterRedis ${ip} ${port} 2
- daemonize yes
- port 26379 # 对应的端口
- protected-mode no
# 如果哨兵 3s 内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是 30 秒
sentinel down-after-milliseconds master 3000
# 如果 100 秒后 主从切换没有实现 则认为失败默认 180s
sentinel failover-timeout mymaster 100000
# 设置 master 和 slave 的验证明码 要雷同
sentinel auth-pass TestMaster yyds
# 灾备转移的时候 同时只有一台机器能够同步数据 其余服务持续提供服务
sentinel parallel-syncs mymaster 1
# 设置连贯 master 和 slave 时的明码,留神的是 sentinel 不能别离为 master 和 slave 设置不同的明码,因而 master 和 slave 的明码应该设置雷同。sentinel auth-pass <master-name> <password>
------ redis.conf 的配置文件中须要配置
bind 0.0.0.0
protected-mode no
requirepass mima
masterauth mima (同上一样, 哨兵中也要配置)
# 3. 启动哨兵模式进行测试
- redis-sentinel /root/sentinel/sentinel.conf
上面提供哨兵的配置文件 仅供参考
port 26379
bind 0.0.0.0
dir "/usr/redis"
protected-mode no
sentinel myid b72dcaa8d7b9bbb0c830b156b72dde8456d3a9d5
sentinel deny-scripts-reconfig yes
# Generated by CONFIG REWRITE
sentinel monitor master 10.0.0.200 6381 2
sentinel down-after-milliseconds master 3000
sentinel failover-timeout master 10000
# sentinel auth-pass master Bamboocloud@1234
sentinel config-epoch master 4
sentinel leader-epoch master 4
sentinel known-replica master 10.0.0.200 6380
sentinel known-replica master 10.0.0.200 6382
logfile "/usr/redis/sentinel1.log"
sentinel known-sentinel master 10.0.0.200 26381 597281e9b0ec9bd63a67c28255dde0665ee6dd22
sentinel known-sentinel master 10.0.0.200 26380 5ab5bf54886d09e9de2447456e26e44641fde889
sentinel current-epoch 4
daemonize yes
2.2 通过 springboot 操作哨兵
# redis sentinel 配置
# master 书写是应用哨兵监听的那个名称
spring.redis.sentinel.master=mymaster
# 连贯的不再是一个具体 redis 主机, 书写的是多个哨兵节点
spring.redis.sentinel.nodes=192.168.202.206:26379
- 留神: 如果连贯过程中呈现如下谬误:RedisConnectionException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command ‘CONFIG SET protected-mode no’ from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2)
- 解决方案: 在哨兵的配置文件中退出 bind 0.0.0.0 开启近程连贯权限
3. 搭建 redis 集群
须要筹备的环境: ruby
yum install -y ruby rubygems
gem install redis-xxx.gem
各个节点配置配置
port 6379 ..... // 批改端口
bind 0.0.0.0 // 开启近程连贯
cluster-enabled yes // 开启集群模式
cluster-config-file nodes-port.conf // 集群节点配置文件
cluster-node-timeout 5000 // 集群节点超时工夫
appendonly yes // 开启 AOF 长久化
复制集群操作脚本到 bin 目录中
cp /root/redis-5.0.10/src/redis-trib.rb .
# 创立集群
./redis-trib.rb create --replicas 1 10.0.0.200:7000 10.0.0.200:7001 10.0.0.200:7002 10.0.0.200:7003 10.0.0.200:7004 10.0.0.200:7005
3.2 集群相干操作
# 1. 增加主节点 add-node [新退出节点] [原始集群中任意节点]
- ./redis-trib.rb add-node 10.0.0.200:7006 10.0.0.200:7005
- 留神:
1). 该节点必须以集群模式启动
2). 默认状况下该节点就是以 master 节点模式增加
# 2. 增加从节点 add-node --slave [新退出节点] [集群中任意节点]
- ./redis-trib.rb add-node --slave 10.0.0.200:7006 10.0.0.200:7000
- 留神:
当增加正本节点时没有指定主节点,redis 会随机给正本节点较少的主节点增加以后正本节点
# 3. 为确定的 master 节点增加主节点 add-node --slave --master-id master 节点 id [新退出节点] [集群任意节点]
- ./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000
4. 删除节点 del-node [集群中任意节点] [删除节点 id]
- ./redis-trib.rb del-node 127.0.0.1:7002
- 留神:
1. 被删除的节点必须是从节点或没有被调配 hash slots 的节点
# 5. 在线分片 reshard [集群中任意节点] [无]
- ./redis-trib.rb reshard 10.0.0.200:7000
参考
https://www.cnblogs.com/bandaoyu/p/14625254.html
https://blog.51cto.com/u_15069472/2611132
yerenbiji