一,规划三台redis的ip:一主二从

  1. redismaster01: 172.18.1.1
  2. redisslave01: 172.18.1.2
  3. redisslave02: 172.18.1.3

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

说明: centos8上redis5的安装,参考这一篇:

  1. centos8安装redis
  2. 地址:https://www.cnblogs.com/architectforest/p/12325230.html

二,对三台redis机器分别进行配置

1,master01上

  1. [root@redismaster01 /]# vi /usr/local/soft/redis5/conf/redis.conf

内容:

  1. bind 172.18.1.1
  2. masterauth 123456
  3. requirepass 123456

重启redis服务:

  1. [root@redismaster01 /]# systemctl stop redis
  2. [root@redismaster01 /]# systemctl start redis

2,slave01上

  1. [root@redisslave01 /]# vi /usr/local/soft/redis5/conf/redis.conf

内容

  1. bind 172.18.1.2
  2. slaveof 172.18.1.1 6379
  3. masterauth 123456
  4. requirepass 123456

重启redis服务

  1. [root@redisslave01 /]# systemctl stop redis
  2. [root@redisslave01 /]# systemctl start redis

3,slave02上

  1. [root@redisslave02 /]# vi /usr/local/soft/redis5/conf/redis.conf

内容

  1. bind 172.18.1.3
  2. slaveof 172.18.1.1 6379
  3. masterauth 123456
  4. requirepass 123456

重启redis服务

  1. [root@redisslave02 /]# systemctl stop redis
  2. [root@redisslave02 /]# systemctl start redis

4,参数说明:

  1. slaveof: 指定主redisip port
  2. masterauth: redis的密码
  3. requirepass: 本地的密码

建议密码保持一致

三,从redis-cli查看主从状态

1,从master01上

  1. [root@redismaster01 /]# /usr/local/soft/redis5/bin/redis-cli -h 172.18.1.1 -p 6379

查看主从同步:

  1. 172.18.1.1:6379> info replication
  2. # Replication
  3. role:master
  4. connected_slaves:2
  5. slave0:ip=172.18.1.2,port=6379,state=online,offset=938,lag=0
  6. slave1:ip=172.18.1.3,port=6379,state=online,offset=938,lag=1
  7. master_replid:f2800497a73845ad25276bf74cffce2138a6e216
  8. master_replid2:0000000000000000000000000000000000000000
  9. master_repl_offset:952
  10. second_repl_offset:-1
  11. repl_backlog_active:1
  12. repl_backlog_size:1048576
  13. repl_backlog_first_byte_offset:1
  14. repl_backlog_histlen:952

2,从slave01上

  1. [root@redisslave01 /]# /usr/local/soft/redis5/bin/redis-cli -h 172.18.1.2 -p 6379
  1. 172.18.1.2:6379> info replication
  2. # Replication
  3. role:slave
  4. master_host:172.18.1.1
  5. master_port:6379
  6. master_link_status:up
  7. master_last_io_seconds_ago:10
  8. master_sync_in_progress:0
  9. slave_repl_offset:182
  10. slave_priority:100
  11. slave_read_only:1
  12. connected_slaves:0
  13. master_replid:f2800497a73845ad25276bf74cffce2138a6e216
  14. master_replid2:0000000000000000000000000000000000000000
  15. master_repl_offset:182
  16. second_repl_offset:-1
  17. repl_backlog_active:1
  18. repl_backlog_size:1048576
  19. repl_backlog_first_byte_offset:1
  20. repl_backlog_histlen:182

四,info replaction的内容详解:

1,主redis上:

  1. role:master #实例的角色,此处是master
  2. connected_slaves:2 #连接的slave实例个数,2个
  3. slave0:ip=172.18.1.2,port=6379,state=online,offset=938,lag=0 #lag从库多少秒未向主库发送REPLCONF命令
  4. slave1:ip=172.18.1.3,port=6379,state=online,offset=938,lag=1 #lag从库多少秒未向主库发送REPLCONF命令
  5. master_replid:f2800497a73845ad25276bf74cffce2138a6e216
  6. master_replid2:0000000000000000000000000000000000000000
  7. master_repl_offset:952 #主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟
  8. second_repl_offset:-1
  9. repl_backlog_active:1 #复制积压缓冲区是否开启
  10. repl_backlog_size:1048576 #复制积压缓冲大小
  11. repl_backlog_first_byte_offset:1 #复制缓冲区里偏移量的大小
  12. repl_backlog_histlen:952

2,从redis上

  1. # Replication
  2. role:slave #实例的角色,是slave
  3. master_host:172.18.1.1 #此节点对应的master的ip
  4. master_port:6379 #此节点对应的master的port
  5. master_link_status:up #slave端可查看它与master之间同步状态,当复制断开后表示down,连接时是up
  6. master_last_io_seconds_ago:7 #主库多少秒未发送数据到从库?
  7. master_sync_in_progress:0 #从服务器是否在与主服务器进行同步
  8. slave_repl_offset:4855 #slave复制偏移量
  9. slave_priority:100 #slave优先级
  10. slave_read_only:1 #从库是否设置只读
  11. connected_slaves:0 #连接的slave实例个数
  12. master_replid:f2800497a73845ad25276bf74cffce2138a6e216
  13. master_replid2:0000000000000000000000000000000000000000
  14. master_repl_offset:4855 #主从同步偏移量
  15. second_repl_offset:-1
  16. repl_backlog_active:1 #复制积压缓冲区是否开启
  17. repl_backlog_size:1048576 #复制积压缓冲大小
  18. repl_backlog_first_byte_offset:1 #复制缓冲区里偏移量的大小
  19. repl_backlog_histlen:4855

说明:在从redis上查看同步时,

  1. 1,如果master_link_statusup,则表示到主redis的连接正常,否则先排查连接的问题
  2. 2,如果 slave_repl_offset master_repl_offset 一致,表示同步是一致的

五,测试redis的主从是否生效

1,master01上

  1. 172.18.1.1:6379> set a 123
  2. OK
  3. 172.18.1.1:6379> get a
  4. "123"

2,slave01上

  1. 172.18.1.2:6379> get a
  2. "123"

3,slave02上

  1. 172.18.1.3:6379> get a
  2. "123"

六,规划 :三个哨兵服务器

官方建议至少三个且奇数个的 Sentinel 节点

  1. 172.18.1.4 哨兵1
  2. 172.18.1.5 哨兵2
  3. 172.18.1.6 哨兵3

七,每台机器上哨兵的安装:

在redis源码中编译完成后,要把redis-sentinel 复制到安装目录的bin目录下

把sentinel.conf配置文件也复制到安装目录的conf目录下

  1. [root@redissentinel01 src]# cp /usr/local/source/redis-5.0.7/src/redis-sentinel /usr/local/soft/redis5/bin/
  2. [root@redissentinel01 src]# cp /usr/local/source/redis-5.0.7/sentinel.conf /usr/local/soft/redis5/conf/

八,每台机器上哨兵的配置:

1,创建用到的临时工作目录

  1. [root@redissentinel01 src]# cd /data/redis6379/
  2. [root@redissentinel01 redis6379]# mkdir tmp

2,编辑哨兵的配置

  1. [root@redissentinel01 src]# vi /usr/local/soft/redis5/conf/sentinel.conf

内容:实际操作时把括号和说明文字要去掉

  1. port 26379 (默认,无需改动)
  2. bind 0.0.0.0 (添加)
  3. daemonize yes (默认是no,改成yes)
  4. protected-mode no (默认,取消注释)
  5. logfile "/data/redis6379/log/redis.log" (修改配置)
  6. dir /data/redis6379/tmp (修改配置)
  7. sentinel myid 372e722a7630342374ce6d8e0fee5f7a86e647e4
  8. (此值每台机器上要区分开,可以只修改一个数字,
  9. 否则用info sentinel查看时sentinels的数量不正确
  10. 或者把这一行注释掉应该也可以)
  11. sentinel monitor mymaster 172.18.1.1 6379 2 (修改配置)
  12. sentinel auth-pass mymaster 123456 (修改配置)

3,配置的说明:

  1. monitor 指定主redisipport,最后的2是指:把这个主实例判断为失效至少需要2Sentinel进程的同意
  2. auth-pass 是指定主redis的密码

九,systemd管理redis-sentinel

1,编辑一个service文件

  1. [root@redissentinel01 log]# vi /lib/systemd/system/redis-sentinel.service

内容:

  1. [Unit]
  2. Description=Redis
  3. After=network.target
  4.  
  5. [Service]
  6. Type=forking
  7. PIDFile=/var/run/redis-sentinel.pid
  8. ExecStart=/usr/local/soft/redis5/bin/redis-sentinel /usr/local/soft/redis5/conf/sentinel.conf --sentinel
  9. ExecStop=/bin/kill -s TERM $MAINPID
  10.  
  11. [Install]
  12. WantedBy=multi-user.target

2,测试启动redis-sentinel

  1. [root@redissentinel01 log]# systemctl daemon-reload
  2. [root@redissentinel01 log]# systemctl start redis-sentinel
  3. [root@redissentinel01 log]# ps auxfww | grep redis-sentinel | grep -v grep
  4. root 390 0.1 0.0 41076 3292 ? Ssl 05:39 0:00 /usr/local/soft/redis5/bin/redis-sentinel 0.0.0.0:26379 [sentinel]

十,sentinel常用命令:

查看mymaster下哪些sentinel

  1. 172.18.1.6:26379> sentinel sentinels mymaster

显示主节点列表及其状态

  1. 172.18.1.6:26379> sentinel masters

显示mymaster下有几个slave

  1. 172.18.1.6:26379> sentinel slaves mymaster

只查看mymaster这个主节点的信息

  1. 172.18.1.6:26379> sentinel master mymaster

查看sentinel信息的一个汇总

  1. 172.18.1.6:26379> info sentinel

十一,测试当master宕机时,哨兵能否起到切换master的作用

1,先从哨兵服务器上查看master信息

  1. 172.18.1.5:26379> info sentinel
  2. # Sentinel
  3. sentinel_masters:1
  4. sentinel_tilt:0
  5. sentinel_running_scripts:0
  6. sentinel_scripts_queue_length:0
  7. sentinel_simulate_failure_flags:0
  8. master0:name=mymaster,status=ok,address=172.18.1.1:6379,slaves=3,sentinels=3

2,在master中杀死redis进程

  1. [root@redismaster01 conf]# kill 1062
  2. [root@redismaster01 conf]# kill 1062
  3. bash: kill: (1062) - No such process

3,再次到哨兵服务器上查看:

  1. 172.18.1.5:26379> info sentinel
  2. # Sentinel
  3. sentinel_masters:1
  4. sentinel_tilt:0
  5. sentinel_running_scripts:0
  6. sentinel_scripts_queue_length:0
  7. sentinel_simulate_failure_flags:0
  8. master0:name=mymaster,status=ok,address=172.18.1.2:6379,slaves=3,sentinels=3

可以看到:172.18.1.1上的redis进程被杀死后,172.18.1.2已经被选为master

4,登录到新选举出的master上查看

  1. 127.0.0.1:6379> info replication
  2. # Replication
  3. role:master
  4. connected_slaves:1
  5. slave0:ip=172.18.1.3,port=6379,state=online,offset=229680,lag=1
  6. master_replid:3977c9f0425ab035dee705874b5b2f7cd8c1bcb4
  7. master_replid2:41d7c9660b1195a58fc273319078a6f4551436b0
  8. master_repl_offset:229950
  9. second_repl_offset:193766
  10. repl_backlog_active:1
  11. repl_backlog_size:1048576
  12. repl_backlog_first_byte_offset:1
  13. repl_backlog_histlen:229950

说明:当前redis的role已经变成了master

5,回到旧的master上,再次启动

  1. [root@redismaster01 conf]# systemctl start redis

用info replication查看时,角色已经变成slave

  1. 127.0.0.1:6379> info replication
  2. # Replication
  3. role:slave
  4. master_host:172.18.1.2
  5. master_port:6379
  6. master_link_status:up
  7. master_last_io_seconds_ago:1
  8. master_sync_in_progress:0
  9. slave_repl_offset:299988
  10. slave_priority:100
  11. slave_read_only:1
  12. connected_slaves:0
  13. master_replid:3977c9f0425ab035dee705874b5b2f7cd8c1bcb4
  14. master_replid2:0000000000000000000000000000000000000000
  15. master_repl_offset:299988
  16. second_repl_offset:-1
  17. repl_backlog_active:1
  18. repl_backlog_size:1048576
  19. repl_backlog_first_byte_offset:267193
  20. repl_backlog_histlen:32796

十二,查看centos版本

[root@localhost liuhongdi]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

centos8平台redis5的主从同步搭建及sentinel哨兵配置的更多相关文章

  1. docker搭建redis主从集群和sentinel哨兵集群,springboot客户端连接

    花了两天搭建redis主从集群和sentinel哨兵集群,讲一下springboot客户端连接测试情况 redis主从集群 从网上查看说是有两种方式:一种是指定配置文件,一种是不指定配置文件 引用地址 ...

  2. redis 主从同步搭建

    redis 一主二从 1.redis 安装 安装教程:https://www.cnblogs.com/zwcry/p/9505949.html 2.redis主从 1)创建主从目录 mkdir /us ...

  3. redis主从同步故障切换及集群配置

    一.redis是一中高性能的缓存数据库, 原理:1. 从服务器向主服务器发送 SYNC 命令.2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下 ...

  4. MySQL主从同步和读写分离的配置

    主服务器:192.168.1.126 从服务器:192.168.1.163 amoeba代理服务器:192.168.1.237 系统全部是CentOS 6.7 1.配置主从同步 1.1.修改主服务器( ...

  5. Mysql主从同步的实现原理与配置实战

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...

  6. centos8平台redis cluster集群搭建(redis5.0.7)

    一,规划 redis cluster 1,cluster采用六台redis,3主3从 redis1    : ip: 172.17.0.2 redis2    : ip: 172.17.0.3 red ...

  7. centos8平台redis5日志按天分割

    一,创建日志的备份目录 [root@yjweb crontab]# mkdir /data/logs/redislogsbackup 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https:// ...

  8. Redis主从集群以及Sentinel的配置

    安装完redis后,修改几个redis从节点的配置文件redis.conf,主要是加入主节点位置 slaveof 另外需要修改的地方包括,这样允许其他的从节点连入 bind 0.0.0.0 prote ...

  9. centos8平台搭建mysql8数据库主从同步

    一,两台服务器的规划 a服务器:主机名:yjweb ip: 121.122.123.47 角色:主库 server-id:1 j服务器:主机名: os3 ip: 121.122.123.134 角色: ...

随机推荐

  1. [LeetCode]739. 每日温度(单调栈)

    题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures ...

  2. MySQL安装错误Couldn't find MySQL server

    Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe) 昨天rpm安装MySQL5.7后 ...

  3. java之死锁

    转载自 https://www.cnblogs.com/xiaoxi/p/8311034.html 一.死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力.然而,并发执行也带来 ...

  4. redis之哨兵 springboot配置

    转载自https://blog.csdn.net/m0_37367413/article/details/82018125 springboot整合redis哨兵方式配置 2018年08月24日 14 ...

  5. Kafka实战宝典:Kafka的控制器controller详解

    一.控制器简介 控制器组件(Controller),是 Apache Kafka 的核心组件.它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群.集群中任意一 ...

  6. VUE开发(一)Spring Boot整合Vue并实现前后端贯穿调用

    文章更新时间:2020/03/14 一.前言 作为一个后端程序员,前端知识多少还是要了解一些的,vue能很好的实现前后端分离,且更便于我们日常中的调试,还具备了轻量.低侵入性的特点,所以我觉得是很有必 ...

  7. IOT(esp8266)

    今日工具: 硬件: esp8266 DHT11温湿度传感器 软件: Arduino ESP8266 是一款由乐鑫 Espressif 公司制作的低成本的 Wi-Fi 芯片,具有完整的 TCP / IP ...

  8. java进阶(23)--List接口

    一.基本概念 1.有序可重复 2.有下标 3.包含ArraList.LinkedList.Vector   二.List中特有的方法 且常用 (以下军均为数组通用方法) 1.void add(int ...

  9. uni-app支付功能

    扫码查看原文 前言 近期一直在使用APP开发多端应用,IOS的APP.安卓的APP和H5网页,其中开发的APP使用到了微信和支付宝的支付,在此给大家分享出来,一起使用 前置条件: 开发环境:windo ...

  10. Java 实现常见内排序

    一.内排序 1.排序基本概念 (1)什么是排序? 排序指将一个数据元素集合或者序列 按照某种规则 重新排列成一个 有序的集合或者序列.分为内排序.外排序.排序算法的好坏直接影响程序的执行速度以及存储空 ...