乐趣区

关于redis:Redis-单机哨兵集群搭建

1. Redis 单机搭建(以 6.0.6 版本为例)


  1. 装置 gcc 套装。

    yum install cpp
    yum install binutils
    yum install glibc
    yum install glibc-kernheaders
    yum install glibc-common
    yum install glibc-devel
    yum install gcc
    yum install make
  2. 降级 gcc。

    yum -y install centos-release-scl
    yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    scl enable devtoolset-9 bash
  3. 使 scl 长期有效。

    echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
  4. 下载 redis。

    wget http://download.redis.io/releases/redis-6.0.6.tar.gz
  5. 解压。

    tar vxf redis-6.0.6.tar.gz
  6. 编译,装置。

    cd redis-6.0.6/
    make
    make PREFIX=/usr/local/redis install
  7. 创立配置文件、数据目录,并且将配置文件复制到目录中。

    mkdir /usr/local/redis/conf
    mkdir /usr/local/redis/data
    cp ${REDIS_SRC_HOME}/redis.conf /usr/local/redis/conf/
  8. 批改配置文件 conf/redis.conf

    • 批改其中对应的内容。
    # 后盾启动的意思
    daemonize yes 
    # IP 绑定,redis 不倡议对公网凋谢,间接绑定 0.0.0.0 没故障
    bind 0.0.0.0
    # redis 数据文件寄存的目录
    dir /usr/local/redis/data
    # 开启 AOF
    appendonly yes
  9. 启动 redis。

    cd /usr/local/redis
    ./bin/redis-server ./conf/redis.conf
  10. 测试。

    ./bin/redis-cli
    • 也能够通过客户端连贯。

2. Redis 哨兵高可用搭建


目前为了不便演示,在一台机器上以不同的端口启动 3 个服务。

进行之前,先进行单节点上的前 8 个步骤。

  1. 复制出 3 份配置文件。

    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6380.conf
    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6381.conf
    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6382.conf
  2. 别离批改 3 个文件 redis-6380.confredis-6381.confredis-6382.conf,批改其中对应的端口及 pid 对应的保留文件(留神:三个文件都须要批改)。

    # 端口号(如果同一台服务器上启动,留神要批改为不同的端口)port 6380
    # 这个文件会主动生成(如果同一台服务器上启动,留神要批改为不同的端口)pidfile /var/run/redis_6380.pid
  3. 启动 3 个 redis。

    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6382.conf
  4. 配置为 1 主 2 从

    /usr/local/redis/bin/redis-cli -p 6381 slaveof 127.0.0.1 6380
    /usr/local/redis/bin/redis-cli -p 6382 slaveof 127.0.0.1 6380
  5. 查看集群。

    /usr/local/redis/bin/redis-cli -p 6380 info Replication
  6. 筹备哨兵配置文件。

    cp ${REDIS_SRC_HOME}/sentinel.conf /usr/local/redis/conf/
    
    cp /usr/local/redis/conf/sentinel.conf /usr/local/redis/conf/sentinel-26380.conf
    cp /usr/local/redis/conf/sentinel.conf /usr/local/redis/conf/sentinel-26381.conf
    cp /usr/local/redis/conf/sentinel.conf /usr/local/redis/conf/sentinel-26382.conf
  7. 别离批改 3 个文件 sentinel-26380.confsentinel-26381.confsentinel-26382.conf(留神:三个文件都须要批改)。

    # 绑定 IP
    bind 0.0.0.0
    # 后盾运行
    daemonize yes
    # 默认 yes,没指定明码或者指定 IP 的状况下,外网无法访问
    protected-mode no
    # 哨兵的端口,客户端通过这个端口来发现 redis
    port 26380
    # 这个文件会主动生成(如果同一台服务器上启动,留神要批改为不同的端口)pidfile /var/run/redis-sentinel-26380.pid
    # sentinel 监控的 master 的名字叫做 mymaster, 初始地址为 127.0.0.1 6380,2 代表两个及以上哨兵认定为死亡,才认为是真的死亡
    sentinel monitor mymaster 127.0.0.1 6380 2
  8. 启动哨兵集群。

    /usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26380.conf --sentinel
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26381.conf --sentinel
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26382.conf --sentinel
  9. 检测。

    • 停掉 master 过程,能够看到,会从其余两台 slave 中抉择一台,变成 master。

3. Redis 集群搭建


目前为了不便演示,在一台机器上以不同的端口启动 6 个服务。

进行之前,先进行单节点上的前 8 个步骤。

1. 集群搭建

  1. 筹备 6 份配置文件。

    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6381.conf
    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6382.conf
    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6383.conf
    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6384.conf
    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6385.conf
    cp /usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis-6386.conf
  2. 别离批改 redis-6381.confredis-6382.confredis-6383.confredis-6384.confredis-6385.confredis-6386.conf 文件中的以下内容。

    # 端口号(如果同一台服务器上启动,留神要批改为不同的端口)port 6381
    # 开启集群
    cluster-enabled yes
    # 会主动生成在下面配置的 dir 目录下(如果同一台服务器上启动,留神要批改为不同的端口)cluster-config-file nodes-6381.conf
    cluster-node-timeout 5000
    # 这个文件会主动生成(如果同一台服务器上启动,留神要批改为不同的端口)pidfile /var/run/redis_6381.pid 
  3. 启动 6 个 redis 实例。

    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6382.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6383.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6384.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6385.conf
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6386.conf
  4. 创立 cluster。

    /usr/local/redis/bin/redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1
  5. 集群测验和测试。

    # 查看集群,查看所有节点信息
    /usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6381 cluster nodes
    
    # 执行后的信息(节点 id ip+ 端口 角色 masterid 解决的 ping 数量 最初一个 pong 工夫 节点配置版本 节点连贯状态 slot 槽分配情况)386bfa4ad82ecf67800fb957899e6c0621cb73a6 127.0.0.1:6386@16386 slave 5352c77a1245f67f89bfaeb47caa04eb534e6724 0 1597911585458 1 connected
    21a8ab725f458901e2d23781a9757b8ada023af1 127.0.0.1:6385@16385 slave 103e8326a6d583064a4d4448d285343536490659 0 1597911586000 3 connected
    5352c77a1245f67f89bfaeb47caa04eb534e6724 127.0.0.1:6381@16381 myself,master - 0 1597911583000 1 connected 0-5460
    103e8326a6d583064a4d4448d285343536490659 127.0.0.1:6383@16383 master - 0 1597911585052 3 connected 10923-16383
    2d40bdd3bc9b01d67362110217123debb6f780cf 127.0.0.1:6384@16384 slave 2cd4da5b1a6d361216f620a21ec4e50da21a2e8a 0 1597911586582 2 connected
    2cd4da5b1a6d361216f620a21ec4e50da21a2e8a 127.0.0.1:6382@16382 master - 0 1597911586479 2 connected 5461-10922
    
    # 测试 Redis Cluster 的一种简略办法是应用 redis-cli 命令行实用程序。# -c 是反对 cluster 重定向。/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6381
    # 而后执行一些命令,例如:
    > set a 1
    
    # 查看一个 key a 属于哪一个槽位
    > cluster keyslot a

2. 集群 slot 数量整顿 reshard。

  • /usr/local/redis/bin/redis-cli --cluster help 能够查看所有这个命令和子命令的帮忙信息。
  • 默认是 master 平均分了 0-16383 的所有虚构 slot。能够进行调整,局部节点放多一点 slot (槽或者地位)。

    /usr/local/redis/bin/redis-cli --cluster reshard <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes
  • 从新查看集群。

    /usr/local/redis/bin/redis-cli --cluster check 127.0.0.1:6381

3. 测试主动故障转移。

  • cluster 集群不保证数据统一,数据也可能失落。
  • 首先是运行客户端一直的写入或读取数据,以便可能发现问题。
  • 而后是模仿节点故障:找一个主节点敞开,主从故障切换的过程中,这个时间段的操作,客户端而言,只能是失败。
  • 官网形容 https://redis.io/topics/clust…,There is always a window of time when it is possible to lose writes during partitions.(分区的工夫窗口内总是有可能失落写操作)。

4. 手动故障转移。

  • 可能某个节点须要保护(机器下线、硬件降级、零碎版本调整等等场景),须要手动的实现转移。
  • 在 slave 节点上执行命令。

    CLUSTER FAILOVER
  • 注:CLUSTER help 能够看到帮忙文档和简介。绝对平安的做法。

5. 扩容。

# 1、启动新节点
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6387.conf

# 2、退出到曾经存在的集群作为 master
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6382
# 实质就是发送一个新节点通过 CLUSTER MEET 命令退出集群
# 新节点没有调配 hash 槽

# 3、退出到曾经存在的集群作为 slave
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6382 --cluster-slave
# 能够手工指定 master,否则就是抉择一个 slave 数量较少的 master 
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6382 --cluster-slave --cluster-master-id <node-id>
# 还能够将空 master,转换为 slave(终端操作)。cluster replicate <master-node-id>

# 4、查看集群
/usr/local/redis/bin/redis-cli --cluster check 127.0.0.1:6382

6. 缩容(删除节点)。

# 留神:删除 master 的时候要把数据清空或者调配给其余主节点
/usr/local/redis/bin/redis-cli --cluster del-node 127.0.0.1:6381 <node-id>

欢送关注订阅号:

退出移动版