redis集群之主从复制+哨兵模式

怼烎@ 2023-07-17 14:17 82阅读 0赞

文章目录

    • 一、redis集群之主从复制
      • 1.1、集群介绍
      • 1.2、搭建过程
      • 1.3、验证
    • 二、redis集群之哨兵模式
      • 2.1、部署过程
        • 1、搭建主从复制集群
        • 2、设置哨兵模式的配置文件
        • 3、启动哨兵服务
      • 2.2、故障模拟

redis集群的理论知识请参考我之前的博客,链接为:redis集群之主从复制+哨兵模式+cluster群集(理论+实战,收获满满!!!)

一、redis集群之主从复制

1.1、集群介绍

在主从模式的Redis系统中,从数据库在整个系统中起到了数据冗余备份和读写分离的作用。






























节点类型 IP地址 安装包 功能
master 192.168.100.128 redis-5.0.7.tar.gz 提供可读可写
slave1 192.168.100.131 redis-5.0.7.tar.gz 提供只读
slave2 192.168.100.132 redis-5.0.7.tar.gz 提供只读

1.2、搭建过程

1、先给每个节点安装redis

  1. //安装编译工具
  2. yum install -y gcc gcc-c++ make
  3. //安装包可以用下面这个命令下载,但是慢。
  4. wget http://download.redis.io/releases/redis-5.0.7.tar.gz
  5. #软件包解压到/usr/local目录下
  6. tar -zxvf redis-5.0.7.tar.gz -C /usr/local
  7. //编译安装
  8. cd /usr/local
  9. mv redis-5.0.7 redis
  10. cd redis
  11. make
  12. cd src && make install

2、修改主、从节点的配置文件

  1. 主节点:
  2. vi /usr/local/redis/redis.conf
  3. 69/bind 0.0.0.0
  4. 在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定从节点服务器的IP地址
  5. sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/redis.conf
  6. 136 daemonize no #开启守护进程yes
  7. sed -i '136s/no/yes/' /usr/local/redis/redis.conf
  8. 171 logfile "" 改成 logfile /usr/local/redis/redis.log
  9. sed -i '171s/""/\/usr\/local\/redis\/redis.log/' /usr/local/redis/redis.conf
  10. 263 dir ./ 改成 dir /usr/local/redis #本地数据库的存放目录
  11. sed -i '263s/.\//\/usr\/local\/redis/' /usr/local/redis/redis.conf
  12. 699/appendonly no #启用AOF持久化
  13. sed -i '699s/no/yes/' /usr/local/redis/redis.conf
  14. 从节点:
  15. vi /usr/local/redis/redis.conf
  16. 69/bind 0.0.0.0
  17. 在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定从节点服务器的IP地址
  18. sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/redis.conf
  19. 136 daemonize no #开启守护进程yes
  20. sed -i '136s/no/yes/' /usr/local/redis/redis.conf
  21. 171 logfile "" 改成 logfile /usr/local/redis/redis.log
  22. sed -i '171s/""/\/usr\/local\/redis\/redis.log/' /usr/local/redis/redis.conf
  23. 263 dir ./ 改成 dir /usr/local/redis
  24. sed -i '263s/.\//\/usr\/local\/redis/' /usr/local/redis/redis.conf
  25. 699/appendonly no #启用AOF持久化
  26. sed -i '699s/no/yes/' /usr/local/redis/redis.conf
  27. 286/# replicaof <masterip> <masterport> 改成 replicaof 192.168.100.128 6379
  28. sed -i '286creplicaof 192.168.100.128 6379' /usr/local/redis/redis.conf

3、设置防火墙,放通6379端口的信息流通

  1. firewall-cmd --zone=public --add-port=6379/tcp --permanent
  2. firewall-cmd --reload

4、设置内存分配策略

  1. cat >> /etc/sysctl.conf<<EOF
  2. vm.overcommit_memory = 1
  3. EOF
  4. /proc/sys/vm/overcommit_memory 可选值:012
  5. 0:表示内核将检查是否有足够的可用内存供应用进程使用;
  6. 如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
  7. 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
  8. 2:表示内核允许分配超过所有物理内存和交换空间总和的内存
  9. sysctl -p #加载生效

5、启动服务,先启动master redis,然后依次启动slave

  1. /usr/local/redis/src/redis-server /usr/local/redis/redis.conf

6、 查看日志文件内容,可以看到两个slave节点连接成功的信息!

  1. tail -99f /usr/local/redis/redis.log

也可以通过登录数据库,查看节点角色
在这里插入图片描述

1.3、验证

进入主节点的数据库中,创建键值对,在从节点中可以进行查询,但是不能在从节点创建新的键值对。
主节点:

  1. [root@localhost redis]# redis-cli
  2. 127.0.0.1:6379> set name zhangsan #创建一个键值对
  3. OK
  4. 127.0.0.1:6379> keys * #查看所有键
  5. 1) "name"
  6. 127.0.0.1:6379> get name #查看name键的值
  7. "zhangsan"
  8. 127.0.0.1:6379> exit

从节点服务器:

  1. [root@localhost ~]# redis-cli
  2. 127.0.0.1:6379> get name #查看name键的值
  3. "zhangsan"
  4. 127.0.0.1:6379> exit

二、redis集群之哨兵模式

2.1、部署过程

redis2.8版本之前是主从复制模式,但是当数据库遇到异常中断服务后,我们只能通过手动的方式选择一个从数据库来升格为主数据库,显然这种方式很麻烦需要人工介入,这时通过哨兵模式可以实现自动化的系统监控和故障恢复。

哨兵模式是在主从复制的基础上加入监控机制,来实现自动化的系统监控和故障恢复功能。
具体功能如下:
在这里插入图片描述
哨兵集群的结构图:在这里插入图片描述
每个节点都有一个哨兵进行监控。

1、搭建主从复制集群

2、设置哨兵模式的配置文件

master节点:

  1. vi /usr/local/redis/sentinel.conf
  2. 17/protected-mode no #关闭保护模式
  3. sed -i '17s/^#//' /usr/local/redis/sentinel.conf
  4. sed -i '17s/^ //' /usr/local/redis/sentinel.conf
  5. 21/port 26379 #无需修改,sentinel的端口号
  6. 26/daemonize yes 指定sentinel为后台启动
  7. sed -i '26s/no/yes/' /usr/local/redis/sentinel.conf
  8. 36/logfile /usr/local/redis/sentinel.log #日志存放路径
  9. sed -i '36s/""/\/usr\/local\/redis\/sentinel.log/' /usr/local/redis/sentinel.conf
  10. 65/dir /tmp 改成 dir "/usr/local/redis" #数据库存放路径
  11. sed -i '65s/tmp/usr\/local\/redis/' /usr/local/redis/sentinel.conf
  12. 84/sentinel monitor mymaster 192.168.100.128 6379 2
  13. sed -i '84s/127.0.0.1/192.168.100.128/' /usr/local/redis/sentinel.conf
  14. //sentinel monitor mymaster [主服务器节点IP] [主服务器节点port] [几个哨兵检测到主节点失联数量]
  15. -- 至少有几个哨兵检测到主服务器故障了,才进行故障迁移
  16. 113/sentinel down-after-milliseconds mymaster 3000 #原来是30000,为了尽快看到效果,将时间缩短
  17. sed -i '113s/30000/3000/' /usr/local/redis/sentinel.conf
  18. 146/sentinel failover-timeout mymaster 120000 #原来是180000
  19. sed -i '146s/180000/120000/' /usr/local/redis/sentinel.conf

slave节点:

  1. vi /usr/local/redis/sentinel.conf
  2. 17/protected-mode no #关闭保护模式
  3. sed -i '17s/^#//' /usr/local/redis/sentinel.conf
  4. sed -i '17s/^ //' /usr/local/redis/sentinel.conf
  5. 26/daemonize yes 指定sentinel为后台启动
  6. sed -i '26s/no/yes/' /usr/local/redis/sentinel.conf
  7. 36/logfile /usr/local/redis/sentinel.log #日志存放路径
  8. 65/dir /tmp 改成 dir "/usr/local/redis" #数据库存放目录
  9. 84/sentinel monitor mymaster 192.168.100.128 6379 2 #填写主节点的地址
  10. 113/sentinel down-after-milliseconds mymaster 3000 #原来是30000,为了尽快看到效果,将时间缩短
  11. sed -i '113s/30000/3000/' /usr/local/redis/sentinel.conf
  12. 146/sentinel failover-timeout mymaster 120000 #原来是180000
  13. sed -i '146s/180000/120000/' /usr/local/redis/sentinel.conf

3、启动哨兵服务

依次启动哨兵sentinel,先启动master 然后slave

  1. //放在后台运行
  2. /usr/local/redis/src/redis-sentinel /usr/local/redis/sentinel.conf &

查看哨兵信息,里面有master节点的IP地址

  1. redis-cli -p 26379 INFO Sentinel

2.2、故障模拟

关闭主节点的redis-server服务

  1. ps -ef | grep redis #查看redis-server进程数
  2. kill -9 进程数 #关闭redis-server
  3. //查看日志
  4. tail -99f /usr/local/redis/sentinel.log
  5. 看到switch-master mymaster 192.168.100.128 6379 192.168.100.132 6379,即主节点down掉,从节点顶替主节点。
  6. // 查看哨兵信息,可以看到master节点的IP地址改变
  7. redis-cli -p 26379 INFO Sentinel

发表评论

表情:
评论列表 (有 0 条评论,82人围观)

还没有评论,来说两句吧...

相关阅读