Redis 主从 哨兵 集群配置

Apple
  • 321

0.安装

  • vmware15.x+
  • centos7.x+

redis相关配置
哨兵日志解读

0.1 下载redis源码包

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

image.png

1.搭建redis主从

主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据
无法解决: 1.master节点出现故障的自动故障转移

image-20200627201722700.png

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
    masterauth masterPassword # 如果master没有配置密码可以不填
    pidfile "/var/run/redis_6381.pid" # 同一台机器上测试 这个要写成不同的文件
    protected-mode no
    daemonize yes
  • slave2
    port 6381
    bind 0.0.0.0
    slaveof masterip masterport
    masterauth masterPassword # 如果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.单节点内存和磁盘物理上限
image-20200627204422750.png

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

image-20200627193219366.png

各个节点配置配置

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

image.png

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/banda...

https://blog.51cto.com/u_1506...

yerenbiji

回复
阅读 354
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏