美文网首页
redis集群搭建

redis集群搭建

作者: 泥煤的嘎嘎 | 来源:发表于2019-12-05 10:51 被阅读0次

    1. redis知识整理

    2. 安装redis

    推荐安装5.0版本及以上,5.0版本将redis集群管理器由 Ruby (redis-trib.rb) 移植到了redis-cli,方便集群的搭建

    • 安装命令
    $ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
    $ tar xzf redis-5.0.4.tar.gz
    $ cd redis-5.0.4
    $ make
    
    # 设置端口  默认不设置为6379 避免攻击
    port 7000
    # 后台运行
    daemonize yes
    # 开放外网访问  bind ip 或 将保护模式取消、注释bind
    # bind 127.0.0.1 
    protected-mode no
    # 修改pid进程文件名
    pidfile "/var/run/redis_6379.pid"
    # 日志文件配置   具体的日志文件无需创建 只需创建到文件夹
    logfile "/usr/local/soft/redis-sentinel/6379/redis.log"
    # 修改数据文件存放地址
    dir "/usr/local/soft/redis-sentinel/6379"
    # 启动aof增量持久化策略
    appendonly yes
    # 设置aof同步策略  建议使用everysec(默认)  每秒写一次到磁盘  always:每次写操作立即写入aof,性能低下  no:不要立刻刷,只有在操作系统需要刷的时候再刷,比较快
    appendfsync everysec
    
    • 启动
    # 后台启动
    ./redis-server  redis.conf &
    # 客户端
    ./redis-cli -h 127.0.0.1 -p 7000 --raw
    

    3. redis-sentinel搭建

    一主二从三哨兵

    • 创建文件夹 redis-sentinel
    mkdir redis-sentinel
    
    • 在 redis-sentinel下创建6379、6380、6381三个文件夹
    cd redis-sentinel
    mkdir 6379 6380 6381
    
    • 将redis-server、redis-cli、redis-sentinel文件夹拷贝至redis-sentinel下
    cp -r redis-5.0.4/src/redis-server ./
    cp -r redis-5.0.4/src/redis-cli ./
    cp -r redis-5.0.4/src/redis-sentinel ./
    
    • 复制修改后的redis.conf到6379、6380、6381下 具体修改参照上面redis配置文件
    cp redis.conf ./6379/
    cp redis.conf ./6380/
    cp redis.conf ./6381/
    
    • 修改6380、6381 redis配置文件
    # 除上面redis配置之外 添加下面命令
    replicaof 127.0.0.1 6379
    
    • 分别启动三个redis节点 测试是否搭建成功
    # 启动redis节点
    ./redis-server ./6379/redis.conf &
    ./redis-server ./6380/redis.conf &
    ./redis-server ./63781/redis.conf &
    
    # 验证主从复制是否生效
    ./redis-cli -p 6379 --raw
    # master节点写入
    127.0.0.1:6379> set name 1
    # ok表示写入成功
    OK
    # 退出master节点 进入子节点
    ./redis-cli -p 6380 --raw
    127.0.0.1:6380> get name
    # 出现上面设置的值则说明搭建成功
    1
    
    • 哨兵配置 哨兵最少使用三个
    # 将sentinel.conf拷贝到6379文件夹下
    cp sentinel.conf ../redis-sentinel/6379 sentinel.conf
    
    # 修改哨兵配置
    # 端口设置 一般设为2 + 主节点端口,依次往下增加
    port 26379
    protected-mode no
    daemonize yes
    # 配置哨兵监控的主节点以及判断主节点失效的哨兵个数 这里设为2个
    sentinel monitor mymaster 127.0.0.1 6379 2
    # 30秒内master没有响应该哨兵,该则认定该节点为主观下线  客观下线 只适用于 主节点。如果 主节点 出现故障,Sentinel 节点会通过 sentinel is-master-down-by-addr 命令,向其它 Sentinel 节点询问对该节点的 状态判断。如果超过 <quorum> 【即上面配置的2】个数的节点判定 主节点 不可达,则该 Sentinel 节点会判断 主节点 为 客观下线。
    sentinel down-after-milliseconds mymaster 30000  
    # 指定在发生故障转移主备切换时,最多可以有多少个slave同时对新的master进行同步。这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,处于不能处理命令请求的状态
    sentinel parallel-syncs mymaster 1 
    # 故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面:
    ## 1. 同一个sentinel对同一个master两次failover之间的间隔时间。  
    ## 2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确的master那里同步数据时结束。  
    ## 3. 当想要取消一个正在进行的failover时所需要的时间。
    ## 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来同步数据了
    # sentinel failover-timeout <master-name> <milliseconds>  
    sentinel failover-timeout mymaster 180000
    
    • 启动哨兵
    # 依次启动三个哨兵节点
    ./redis-sentinel sentinel.conf > /dev/null 2>&1 &
    
    • 校验是否启动成功 能否自动完成故障转移
    # 查看哨兵进程
    ps -ef | grep -v grep | grep sentinel
    # kill 主节点
    # 查看其它两个从节点状态 若发现其中一个节点变为master则说明成功
    ./redis-cli -p 6380 info replication
    ./redis-cli -p 6381 info replication
    # 验证master节点写入 slave节点读取
    ./redis-cli -p 6380
    127.0.0.1:6380> set name 6380
    OK
    ./redis-cli -p 6381
    127.0.0.1:6381> get name
    "6380"
    
    • 启动redis-sentinel shell脚本 此shell脚本只供参考 实际脚本视情况修改 脚本名称请不要用sentinel或redis,会对grep命令产生影响导致shell脚本的终止
    #!/bin/bash
    
    # 终止哨兵集群
    SENTINEL_PID=`ps -ef | grep -v grep | grep sentinel | awk '{print$2}'`
    echo "当前哨兵集群进程id为: " $SENTINEL_PID
    if [ -n "$SENTINEL_PID" ]
        then 
        echo "终止哨兵进程: "  $SENTINEL_PID
        for i in $SENTINEL_PID;
            do
                echo "kill sentinel pid: " $i
                kill -9 $i
            done
    fi
    
    # 终止redis主从集群
    REDIS_PID=`ps -ef | grep -v grep | grep redis | awk '{print$2}'`
    echo "当前redis主从集群进程id为: " $REDIS_PID
    if [ -n "${REDIS_PID}" ]
        then
        echo "终止redis进程:" $REDIS_PID
        for i in $REDIS_PID
            do
                echo "kill redis pid: " $i
                kill -9 $i
            done
    fi
    
    # 启动redis主从集群
    
    echo "开始启动redis: 6379"
    cd /usr/local/soft/redis-sentinel/6379
    ./redis-server ./6379.conf > /dev/null 2>&1 &
    echo "启动redis: 6379成功"
    
    echo "开始启动redis: 6380"
    cd /usr/local/soft/redis-sentinel/6380
    ./redis-server ./6380.conf > /dev/null 2>&1 &
    echo "启动redis: 6380成功"
    
    echo "开始启动redis: 6381"
    cd /usr/local/soft/redis-sentinel/6381
    ./redis-server ./6381.conf > /dev/null 2>&1 &
    echo "启动redis: 6381成功"
    
    # 启动sentinel集群
    echo "开始启动sentinel: 26379"
    cd /usr/local/soft/redis-sentinel/6379
    ./redis-sentinel sentinel.conf > /dev/null 2>&1 &
    echo "启动sentinel: 26379成功"
    
    echo "开始启动sentinel: 26380"
    cd /usr/local/soft/redis-sentinel/6380
    ./redis-sentinel sentinel.conf > /dev/null 2>&1 &
    echo "启动sentinel: 26380成功"
    
    echo "开始启动sentinel: 26381"
    cd /usr/local/soft/redis-sentinel/6381
    ./redis-sentinel sentinel.conf > /dev/null 2>&1  &
    echo "启动sentinel: 26381成功"
    
    • 关闭redis-sentinel shell脚本
    #!/bin/bash
    
    # 终止哨兵集群
    SENTINEL_PID=`ps -ef | grep -v grep | grep sentinel | awk '{print$2}'`
    echo "当前哨兵集群进程id为: " $SENTINEL_PID
    if [ -n "$SENTINEL_PID" ]
        then 
        echo "终止哨兵进程: "  $SENTINEL_PID
        for i in $SENTINEL_PID;
            do
                echo "kill sentinel pid: " $i
                kill -9 $i
            done
    fi
    
    # 终止redis主从集群
    REDIS_PID=`ps -ef | grep -v grep | grep redis | awk '{print$2}'`
    echo "当前redis主从集群进程id为: " $REDIS_PID
    if [ -n "${REDIS_PID}" ]
        then
        echo "终止redis进程:" $REDIS_PID
        for i in $REDIS_PID
            do
                echo "kill redis pid: " $i
                kill -9 $i
            done
    fi
    

    4. redis-cluster搭建 针对redis5.0及以上

    #!/bin/bash
    
    # 1 终止redis进程
    echo "redis集群开始关闭..."
    REDIS_PID=`ps -ef | grep -v grep | grep redis | awk '{print$2}'`
    echo "redis-cluster 进程pid: " $REDIS_PID
    if [ -n "$REDIS_PID" ]
        then 
        for i in $REDIS_PID
            do
                echo "kill redis:" $i
                kill -9 $i
            done
    fi
    echo "redis集群关闭成功"
    
    # 2 启动集群
    echo "开始启动redis-cluster..."
    cd /usr/local/soft/redis-cluster
    ./redis-server ./7000/redis.conf
    ./redis-server ./7001/redis.conf
    ./redis-server ./7002/redis.conf
    ./redis-server ./7003/redis.conf
    ./redis-server ./7004/redis.conf
    ./redis-server ./7005/redis.conf
    echo "redis-cluster启动成功"
    

    相关文章

      网友评论

          本文标题:redis集群搭建

          本文链接:https://www.haomeiwen.com/subject/iiulgctx.html