当前位置: 首页 > article >正文

Linux环境下Redis三主三从集群搭建

文章目录

    • 模式参考图
    • 模式参考图分析
    • 具体操作步骤
    • 搭建过程遇到的问题以及解决方案

模式参考图

192.1.227.28:6379192.1.227.29:7000
192.1.227.29:6379192.1.227.30:7000
192.1.227.30:6379192.1.227.28:7000

模式参考图分析

192.1.227.28、192.1.227.29、192.1.227.30 三台服务器共6个实例,其中每台2个实例(端口号区分,port为6379 即主,7000 则从):一主一从。例如在192.1.227.28 中,主为192.1.227.28:6379,从为 192.1.227.28:7000。但是,需要注意的点是,同主机的主从并非是真正的主从,而是分别为其他主机的主从,即192.1.227.28:6379 的从是 192.1.227.29:7000,192.1.227.28:7000的主是192.1.227.30:6379。

而实现这类指向性主从的关键命令为:./rediscli--cluster create 192,1.227.28:6379 192.1.227.29:6379 192 1.227.29:7000 192.1.227.30:7000 192.1.227.28:7000 --cluster-replicas 1
前三为主,后三为从,同时第一个主的从就是第一个从,以此类推。

具体操作步骤

  1. 解压 redis 的 tar 包

    tar  xzvf redis-6.2.7 targ2
    
  2. 编辑 redis.conf文件(以 192,1.227.28:6379 实例为例)

    #cd 到安装目录
    cd redis-6.2.7/
    #备份 redis.conf 文件,以便操作失败回滚,其实压缩包在也没事
    cp redis.conf redis_back.conf
    #由于每台主机需要 2个redis,实例,所以每台需要两个redis.conf,文件且做好命名区分
    mv redis.conf redis_6379.conf
    #这里我们仅先编辑 redis_6379.conf,其他5个redis.conf,文件的修改点都一样
    vim redis_6379.conf
    #注意2个点,跟如下不一致需要修改
    # bind 127.0.0.1 ::1
    bind 0.0 0.0 -:1
    #设置redis默认后台启动
    daemonize yes
    #关闭保护模式
    protected-mode yes
    #修改 redis启动对应的进程文件名称,建议修改做好区分
    pidfile /var/run/redis_6379.pid
    #修改端口号
    port 6379
    #开启集群
    cluster-enabled yes
    #集群节点配置文件名称,配置文件首次启动会自动生成(本人亲测:不设置后面实例启动会出现节点 xxx 已存在之类的报错导致启动失败,具体报错为英文,可到相应日志文件查看)
    cluster-config-file /usr/local/redis/6379/nodes-6379.conf
    #dump落盘文件名称
    dbfilename 6379.rdb
    #日志文件名称
    logfile /usr/local/redis/6379/redis_6379.1og
    #aof落盘文件
    appendfilename "6379_aof"
    
  3. 集群模式单机单例启动测试
    redis一般启动命令为 xx/xx/redis-server xx/xx/配置文件,编译安装的 redis的 redis-server 可能在/usr/local/redis/src,非编译安装的一般在安装目录的 src目录下,即 redis-6.2.7/src。总之,如果找不到 redis-server,可以使用 find / -name redis-server 搜索。
    启动:

    xx/xx/redis-server xx/xx/redis_6379.conf
    

    查看进程:

    ps -ef | grep redis
    

    测试连通性:

    #-p指定端口号
    xx/xx/redis-cli -p 6379 ping
    
  4. 配置文件下发修改
    redis_6379.conf 直接远程拷贝给其他主机即可,不用再做修改redis_7000.conf 依照2中的修改点将6379 修改为 7000 即可,之后直接远程拷贝给其他主机即可,不用再做修改。
    远程拷贝命令:

    scp 本地文件路径 远程主机用户名@远程主机IP:远程目标目录
    

    #本地配置文件所在目录与远程目标目录保持一致

    scp /usr/local/redis/redis_6379.conf redis@192 1.227.29:/usr/local/redis
    

    出现密码填写交互提示的话就输入用户redis的密码即可。

    scp /usr/local/redis/redis_6379.conf redis@192 1.227.30:/usr/local/redis
    scp /usr/local/redis/redis_7000.conf redis@192 1.227.29:/usr/local/redis
    scp /usr/local/redis/redis_7000 conf redis@192.1.227.30:/usr/local/redis
    
  5. 3台主机6个实例分别启动

    /usr/local/redis/src/redis-server /usr/local/redis/redis_6379.conf
    /usr/local/redis/src/redis-server /usr/local/redis/redis_7000.conf
    
  6. 创建集群
    顺便选择一台主机,这里以 192.1.227.28 为例。

    #--cluster-replicas 1表示一主有一从
    redis-cli -cluster create 192.1.227.28:6379 192.1.227.29:6379 192.1.227.30:6379 192.1.227.29:7000 192.1.227.30:7000 192.1.227.28:7000 --cluster-replicas 1
    

搭建过程遇到的问题以及解决方案

redis-cli -cluster create 192.1.227.28:6379 192.1.227.29:6379 192.1.227.30:6379 192.1.227.29:7000 192.1.227.30:7000 192.1.227.28:7000 --cluster-replicas 1出现

【ERR】 Node is not empty,Either the node already knows other nodes (check with CLUSTER NODES) or contains some keys in database 0.

解决方案:

  1. 删除 dump,rdb、aof、nodes.conf文件,重启
  2. 报错已经很明确告诉你解决方案了:节点不为空,要么已经知道其他节点(检查集群节点)或者第0个索引的数据库包含一些 key。“第0个索引的数据库包含一些 key”我们可以使用 flushdb 或者 flushall 删除所有 key,重启。

参考1
参考2
参考3
参考4
参考5
参考6
参考7
参考8
参考9
参考10
参考11
参考12


http://www.kler.cn/a/317410.html

相关文章:

  • 算法训练(leetcode)二刷第二十六天 | *452. 用最少数量的箭引爆气球、435. 无重叠区间、*763. 划分字母区间
  • 如何保证Redis与MySQL双写一致性
  • 【Kafka】集成案例:与Spark大数据组件的协同应用
  • 嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
  • 项目风险管理的3大要素
  • Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied
  • Python+requests+pytest+allure自动化测试框架
  • 把vue页面中展示的UI和图表导出为pdf或者图片
  • linux/CentOS 开机启动程序
  • Linux-DHCP服务器搭建
  • PHP中error_reporting函数作用
  • Matlab|考虑柔性负荷的综合能源系统低碳经济优化调度
  • MyBatis 中的类型别名配置详解
  • Apache Cordova和PhoneGap
  • 31省市农业地图大数据
  • vue3基础九问,你会几问
  • 单域名、多域名、通配符SSL证书,该如何选择?
  • MySQL(七)——事务
  • vue3中使用nexttick
  • QTableView使用QSortFilterProxyModel后行号错乱
  • 深度学习经典模型解析
  • 基于SpringBoot+Vue+MySQL的教学资料管理系统
  • Web+Mysql——MyBatis
  • 简单的spring缓存 Cacheable学习
  • Rust 全局变量的最佳实践 lazy_static/OnceLock/Mutex/RwLock
  • 02 BlockChain-- ETH