zoukankan      html  css  js  c++  java
  • linux中安装redis集群(伪集群)

    说明: 伪集群是指一台linux上启动了三台实例,正常的集群是每一个实例一台机器

          百度上的redis集群教程大部分都是使用ruby或者其他脚本一步到位,安装效率比较高

         本教程不使用ruby或其他脚本,需要一步一步手工搭建,相对繁琐,但也更能了解其原理。

    安装前准备:1、linux已安装单机redius

    大概步骤:

      1)创建节点目录

      2)修改配置文件

      3)启动6个redis实例

      4)节点握手

      5)分配哈希槽

      6)启动集群并验证

    正文:

    第一步:创建相关目录

      redis集群要高可用需要6个节点,3个主节点,3个从节点,所以创建7001-7006的6个节点的工作目录。

    mkdir /home/comuser/soft/redis-cluster
    mkdir /home/comuser/soft/redis-cluster/log
    mkdir /home/comuser/soft/redis-cluster/7001
    mkdir /home/comuser/soft/redis-cluster/7002
    mkdir /home/comuser/soft/redis-cluster/7003
    mkdir /home/comuser/soft/redis-cluster/7004
    mkdir /home/comuser/soft/redis-cluster/7005
    mkdir /home/comuser/soft/redis-cluster/7006

    第二步:修改配置文件

      先从redis安装目录拷贝redis.conf到7001目录,并做编辑里面的配置内容

    cp /home/comuser/soft/redis-6.0.6/redis.conf  /home/comuser/soft/redis-cluster/7001/redis.conf

      编辑7001目录的redis-7001.conf配置文件,修改以下内容

    # 绑定ip,虚拟机ip,尽量不要用127.0.0.1

     bind 192.168.100.10   

      # 节点端口

      port 7001

      # 日志目录

      logfile "/home/cmuser/soft/redis-cluster/log/reids-7001.log"

      # 开启集群模式

      cluster-enabled yes

      # 节点超时时间,单位毫秒

      cluster-node-timeout 15000

      # 集群内部配置节点信息文件名,集群自己创建这个文件,这里只是固定义文件名

      cluster-config-file node-7001.conf

      # pid文件

      pidfile /var/run/redis_7001.pid

      # 主节点密码(可以不设置)

      masterauth xxxxxxx

      # 客户端连接请求密码(可以不设置)

      requirepass xxxxxxx

      然后把这个配置文件分别拷贝到7002-7006目录,配置基本一样,只需要把文件里的7001换成相应的节点号就行

    #  在redis-cluster的目录执行一下命令(可以拷贝过去一起执行)
    cp ./7001/redis.conf ./7002
    cp ./7001/redis.conf  ./7003
    cp ./7001/redis.conf  ./7004
    cp ./7001/redis.conf  ./7005
    cp ./7001/redis.conf  ./7006

    #把每个目录配置文件里的7001替换成相应的节点号,在redis-cluster目录执行以下命令:
    cd 7002
    sed -i "s|7001|7002|g" `grep -lr "7001" ./`
    cd ../7003
    sed -i "s|7001|7003|g" `grep -lr "7001" ./`
    cd ../7004
    sed -i "s|7001|7004|g" `grep -lr "7001" ./`
    cd ../7005
    sed -i "s|7001|7005|g" `grep -lr "7001" ./`
    cd ../7006
    sed -i "s|7001|7006|g" `grep -lr "7001" ./`

      到此,6个redis的单机配置就已经准备完成,接下来进行集群配置

    第三步:启动6个单机redis

      1)  新建一个启动脚本

      redis的启动命令是nohup redis-server redis.confi &  ,但是这样一次只能启动一个,需要连续执行6次,太麻烦了,可以写一个脚本同时启动6个redis。

    #在redis-cluster目录里面,新建一个start-all.sh文件
    vi start-all.sh

    #文件里面内容如下
    cd 7001
    nohup redis-server redis.conf &
    echo ' '
    cd ../7002
    nohup redis-server redis.conf &
    echo ' '
    cd ../7003
    nohup redis-server redis.conf &
    echo ' '
    cd ../7004
    nohup redis-server redis.conf &
    echo ' '
    cd ../7005
    nohup redis-server redis.conf &
    echo ' '
    cd ../7006
    nohup redis-server redis.conf &
    echo ' '

       2) 创建一个关闭集群的脚本

    #在redis-cluster目录创建一个stop-all.sh文件
    vi stop-all.sh

    #内容如下,700是节点号的前三个数字:
    ps -ef|grep redis|grep cluster|grep 700|awk '{print $2}'|xargs kill -9

      3)给这两个文件赋权

    #chmod是赋权命令,文件可读,可执行等
    chmod 777 start-all.sh
    chmod 777 stop-all.sh

      4)启动6个单机redis

    ./start-all.sh

    第四步:节点握手

      启动6个redis后,登录其中的一台节点

    #登录命令
    redis-cli -h 192.168.100.10 -p 7001

      进入到redis客户端命令窗口,通过客户端发起meet过程,执行一下命令即可

    #用登录的节点给其他节点meet一下,需要一条一条执行

    cluster meet 192.168.100.10 7002
    cluster meet 192.168.100.10 7003
    cluster meet 192.168.100.10 7004
    cluster meet 192.168.100.10 7005
    cluster meet 192.168.100.10 7006

    第五步:分配哈希槽

      redis共有16384个哈希槽,通过cluster addslots命令为节点非陪哈希槽,作为一个集群,每个主节点只负责储存一部分哈希槽,所有主节点合起来就是完整的哈希槽点  

      只要给主节点分配哈希槽,从节点哈希槽和主节点一致。

      #退出客户端
      quit
      执行列命令分配哈希草
      redis-cli -h 192.168.100.10 -p 7001 cluster addslots {0..5461}
      redis-cli -h 192.168.100.10 -p 7002 cluster addslots {5462..10922}
      redis-cli -h 192.168.100.10 -p 7003 cluster addslots {10923..16383}

    #如果提示某个槽点被使用,就把6个节点关闭,去7001-7006目录,
      把node开头的文件,及aof或者rdb文件删除,然后后启动,在执行上面的命令。

    第五步:设置主从关系

      6个节点的主从分配可以自己定义,这里使用7001,7002,7003作为主节点,7004为7001从节点,7005为7002从节点,7006为7003从节点。

      分别登录7004-7006设置主从关系

    #退出当前登录的节点
    quit
    #登录7004
    redis-cli -h 192.168.100.10 -p 7004 cluster nodes
    #回显以下数据
      6829ae75d4b3a5eebef2944c75c0a456c0beacdf 192.168.100.10:7003@17003 master - 0 1628112136000 2 connected 10923-16383
      9bb6c48b1d7a2240253b58331e7c1fe693d09708 192.168.100.10:7006@17006 master - 0 1628112137000 5 connected
      d9b6f9e5d13269e3599249187361132c4a3c3dd6 192.168.100.10:7005@17005 master - 0 1628112137524 4 connected
      27573976166e3f7fbdaac9e0a1230c49b0dea441 192.168.100.10:7002@17002 master - 0 1628112138540 1 connected 5462-10922
      31c48aafe2d882516e836bb7a356abcaf302ace5 192.168.100.10:7004@17004 master - 0 1628112135489 3 connected
      ea29a6d1cd2ab92dd500692920c8134b8f525c59 192.168.100.10:7001@17001 myself,master - 0 1628112138000 0 connected 0-5461
      第一列为节点对应的id,第二列节点ip端口,其他的不用看

      接下来就设置主从关系
    #退出客户端
    quit
    #设置主从关系,cluster replicate 后面一串为对应主节点的id

      redis-cli -h 192.168.100.10 -p 7004 cluster replicate ea29a6d1cd2ab92dd500692920c8134b8f525c59
      redis-cli -h 192.168.100.10 -p 7005 cluster replicate 27573976166e3f7fbdaac9e0a1230c49b0dea441
      redis-cli -h 192.168.100.10 -p 7006 cluster replicate 6829ae75d4b3a5eebef2944c75c0a456c0beacdf

      到此,redis集群已经搭建是否完毕,最后验证集群有无问题。

      关闭6个单机节点。

    #在redis-cluster目录执行
    ./stop-all.sh

    第六步:启动集群,验证是否正常

      集群是否能用验证方法:如果你在7001节点存入是数据,在其他节点能够获取数据,就表示集群搭建成功

    #启动集群(其实就是分别启动6个redis实例),在redis-cluster目录执行启动命令
    ./start-all.sh

    #使用集群的方式登录7001,注意和之前登录单机的命令不一样,多了-c,表示集群登录
    redis-cli -c -h 192.168.100.10 -p 7001

    #存入缓存数据键值对
    set hello redis

    #退出7001节点
    quit

    #登录7006
    redis-cli -c -h 192.168.100.10 -p 7006

    #获取hello的值
    get hello

    #如果能够返回redis字符串表示集群搭建成功,如果返回nil表示搭建失败。

  • 相关阅读:
    【codevs1002】搭桥(prim)
    【codevs1993】草地排水(最大流)
    NOIP总结
    【codevs1069】关押罪犯[noip2010](并查集)
    第一章 数据库的设计
    Socket与ServerSocket
    关于 httpUrlConnection 的 setDoOutput 与 setDoInput的区别
    java基础复习1
    eclipes快捷键
    List Set Map 的区别 用法以及特点(转载)
  • 原文地址:https://www.cnblogs.com/huayuyou/p/15092790.html
Copyright © 2011-2022 走看看