模式参考图

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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部