zoukankan      html  css  js  c++  java
  • Redis Cluster集群

    一、环境说明

    服务器IP地址 服务器版本 Redis版本 Redis-master Redis-slave
    10.10.18.10 centos7.5 5.0 6379 6380
    10.10.18.11 centos7.5 5.0 6379 6380
    10.10.18.12 centos7.5 5.0 6379 6380

    搭建redis集群,建议至少准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同, 每个节点运行两个端口。第一列做主库,第二列做备库

    每个Redis群集节点都需要打开两个TCP连接。用于为客户端提供服务的普通Redis TCP端口,例如6379,加上通过向数据端口添加10000获得的端口,因此示例中为16379。

    默认数据存放结构图:

    这个结构会随着机器的故障自动调整master的角色,有可能原来是slave的角色,会变成master。

    三个slave可以都宕机,数据没有问题

    Redis Cluster提供了一种运行Redis安装的方法,其中数据 在多个Redis节点之间自动分片。

    Redis Cluster还在分区期间提供一定程度的可用性,实际上是在某些节点发生故障或无法通信时继续运行的能力。但是,如果发生较大的故障(例如,当大多数主设备不可用时),群集将停止运行。

    二、系统环境配置

    系统参数配置

    修改最大可打开文件数

    修改文件/etc/security/limits.conf

    * soft nofile 102400
    * hard nofile 102400

    TCP监听队列大小

    文件/etc/sysctl.conf中增加一行

    net.core.somaxconn = 32767
    vm.overcommit_memory=1

    然后执行命令“sysctl -p”以生效。

    三、安装部署

    下载redis5.0以上的版本

    http://download.redis.io/releases/redis-5.0.3.tar.gz

    tar -xzvf redis-5.0.3.tar.gz –C /usr/local
    cd /usr/local/redis-5.0.3
    yum -y install gcc
    make MALLOC=libc
    mkdir –p /data/redis_data/
    make install PREFIX=/data/redis_data/
    mkdir –p /data/redis_data/6379/
    
    cp /usr/local/redis-5.0.3/redis.conf /data/redis_data/6379/

    修改:/data/redis_data/6379/redis.conf

    bind 10.10.18.10
    protected-mode no
    port 6379
    daemonize yes
    cluster-enabled yes
    cluster-config-file  /data/redis_data/6379/node.conf     #这个文件是自动生成的文件
    cluster-node-timeout 5000
    pidfile /data/redis_data/6379/redis.pid
    logfile  "/data/redis_data/6379/redis.log"
    dir /data/redis_data/6379
    
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    supervised no
    loglevel notice
    databases 16
    always-show-logo yes
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    replica-serve-stale-data yes
    replica-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    replica-priority 100
    lazyfree-lazy-eviction no
    lazyfree-lazy-expire no
    lazyfree-lazy-server-del no
    replica-lazy-flush no
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    aof-use-rdb-preamble yes
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    stream-node-max-bytes 4096
    stream-node-max-entries 100
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit replica 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    dynamic-hz yes
    aof-rewrite-incremental-fsync yes
    rdb-save-incremental-fsync yes

    修改:/data/redis_data/6379/redis.conf

    mkdir –p /data/redis_data/6380/
    cp /data/redis_data/6379/redis.conf  /data/redis_data/6380/
    sed -i 's/6379/6380/g' /data/redis_data/6380/redis.conf

    编写启动脚本 /data/redis_data/start-redis.sh

    #!/bin/sh
    REDIS_HOME=/data/redis_data
    $REDIS_HOME/bin/redis-server $REDIS_HOME/6379/redis.conf
    $REDIS_HOME/bin/redis-server $REDIS_HOME/6380/redis.conf
    chmod +x /data/redis_data/start-redis.sh

    开启服务

    查看各服务器的进程情况

    [root@redis01]# netstat -anpt |grep redis
    tcp        0      0 10.10.18.12:16379       0.0.0.0:*               LISTEN      4328/redis-server 1 
    tcp        0      0 10.10.18.12:16380       0.0.0.0:*               LISTEN      4330/redis-server 1 
    tcp        0      0 10.10.18.12:6379        0.0.0.0:*               LISTEN      4328/redis-server 1 
    tcp        0      0 10.10.18.12:6380        0.0.0.0:*               LISTEN      4330/redis-server 1

    创建启动集群脚本  /data/redis_data/redis-cluster.sh

    #!/bin/bash
    /data/redis_data/bin/redis-cli --cluster create 10.10.18.10:6379 10.10.18.11:6379 10.10.18.12:6379 10.10.18.10:6380 10.10.18.11:6380 10.10.18.12:6380 --cluster-replicas 1
    参数说明
    --cluster create:表示创建redis集群
    --cluster-replicas 1:表示为集群中的每一个主节点指定一个从节点,即一比一的复制。

    三台服务器上都使用以上的安装步骤。

    在任意一台服务器上执行,开启集群服务:

    [root@redis01]# sh redis-cluster.sh

    结果

     1 >>> Performing hash slots allocation on 6 nodes...
     2 Master[0] -> Slots 0 - 5460
     3 Master[1] -> Slots 5461 - 10922
     4 Master[2] -> Slots 10923 - 16383
     5 Adding replica 10.10.18.11:6380 to 10.10.18.10:6379
     6 Adding replica 10.10.18.10:6380 to 10.10.18.11:6379
     7 Adding replica 10.10.18.12:6380 to 10.10.18.12:6379
     8 >>> Trying to optimize slaves allocation for anti-affinity
     9 [OK] Perfect anti-affinity obtained!
    10 M: c81b9adc68d5373237e9eaf3e5809bef42c5471a 10.10.18.10:6379
    11    slots:[0-5460] (5461 slots) master
    12 M: c4a495f621576910d934fa04da0896b39c0adf7a 10.10.18.11:6379
    13    slots:[5461-10922] (5462 slots) master
    14 M: baa5b1e2a769da1e37e3a4179ca362c9a26698c8 10.10.18.12:6379
    15    slots:[10923-16383] (5461 slots) master
    16 S: 8d315d8cc7f42afc5ac641003714f5e285822bff 10.10.18.10:6380
    17    replicates c4a495f621576910d934fa04da0896b39c0adf7a
    18 S: a7096a413407e77431c0d852c5106860d6d3184a 10.10.18.11:6380
    19    replicates baa5b1e2a769da1e37e3a4179ca362c9a26698c8
    20 S: 7f0c0858330bf107276d27c10f3e9c600aefa8ad 10.10.18.12:6380
    21    replicates c81b9adc68d5373237e9eaf3e5809bef42c5471a
    22 Can I set the above configuration? (type 'yes' to accept): yes         这里输入yes
    23 >>> Nodes configuration updated
    24 >>> Assign a different config epoch to each node
    25 >>> Sending CLUSTER MEET messages to join the cluster
    26 Waiting for the cluster to join
    27 ....
    28 >>> Performing Cluster Check (using node 10.10.18.10:6379)
    29 M: c81b9adc68d5373237e9eaf3e5809bef42c5471a 10.10.18.10:6379
    30    slots:[0-5460] (5461 slots) master
    31    1 additional replica(s)
    32 M: c4a495f621576910d934fa04da0896b39c0adf7a 10.10.18.11:6379
    33    slots:[5461-10922] (5462 slots) master
    34    1 additional replica(s)
    35 S: 8d315d8cc7f42afc5ac641003714f5e285822bff 10.10.18.10:6380
    36    slots: (0 slots) slave
    37    replicates c4a495f621576910d934fa04da0896b39c0adf7a
    38 S: 7f0c0858330bf107276d27c10f3e9c600aefa8ad 10.10.18.12:6380
    39    slots: (0 slots) slave
    40    replicates c81b9adc68d5373237e9eaf3e5809bef42c5471a
    41 S: a7096a413407e77431c0d852c5106860d6d3184a 10.10.18.11:6380
    42    slots: (0 slots) slave
    43    replicates baa5b1e2a769da1e37e3a4179ca362c9a26698c8
    44 M: baa5b1e2a769da1e37e3a4179ca362c9a26698c8 10.10.18.12:6379
    45    slots:[10923-16383] (5461 slots) master
    46    1 additional replica(s)
    47 [OK] All nodes agree about slots configuration.
    48 >>> Check for open slots...
    49 >>> Check slots coverage...
    50 [OK] All 16384 slots covered.
    View Code

    查看各服务器redis的状态

    [root@redis01]# netstat -anpt | grep redis

    结果:

     1 tcp        0      0 10.10.18.12:16379       0.0.0.0:*               LISTEN      4328/redis-server 1 
     2 tcp        0      0 10.10.18.12:16380       0.0.0.0:*               LISTEN      4330/redis-server 1 
     3 tcp        0      0 10.10.18.12:6379        0.0.0.0:*               LISTEN      4328/redis-server 1 
     4 tcp        0      0 10.10.18.12:6380        0.0.0.0:*               LISTEN      4330/redis-server 1 
     5 tcp        0      0 10.10.18.12:46543       10.10.18.11:16380       ESTABLISHED 4330/redis-server 1 
     6 tcp        0      0 10.10.18.12:16379       10.10.18.10:40956       ESTABLISHED 4328/redis-server 1 
     7 tcp        0      0 10.10.18.12:16380       10.10.18.11:40559       ESTABLISHED 4330/redis-server 1 
     8 tcp        0      0 10.10.18.12:45872       10.10.18.10:16379       ESTABLISHED 4330/redis-server 1 
     9 tcp        0      0 10.10.18.12:45755       10.10.18.10:6379        ESTABLISHED 4330/redis-server 1 
    10 tcp        0      0 10.10.18.12:16379       10.10.18.12:36457       ESTABLISHED 4328/redis-server 1 
    11 tcp        0      0 10.10.18.12:39163       10.10.18.10:16379       ESTABLISHED 4328/redis-server 1 
    12 tcp        0      0 10.10.18.12:43185       10.10.18.10:16380       ESTABLISHED 4328/redis-server 1 
    13 tcp        0      0 10.10.18.12:42254       10.10.18.10:16380       ESTABLISHED 4330/redis-server 1 
    14 tcp        0      0 10.10.18.12:35352       10.10.18.11:16379       ESTABLISHED 4330/redis-server 1 
    15 tcp        0      0 10.10.18.12:41761       10.10.18.11:16379       ESTABLISHED 4328/redis-server 1 
    16 tcp        0      0 10.10.18.12:36457       10.10.18.12:16379       ESTABLISHED 4330/redis-server 1 
    17 tcp        0      0 10.10.18.12:16380       10.10.18.11:37557       ESTABLISHED 4330/redis-server 1 
    18 tcp        0      0 10.10.18.12:6379        10.10.18.11:46722       ESTABLISHED 4328/redis-server 1 
    19 tcp        0      0 10.10.18.12:16380       10.10.18.10:39318       ESTABLISHED 4330/redis-server 1 
    20 tcp        0      0 10.10.18.12:16379       10.10.18.10:35113       ESTABLISHED 4328/redis-server 1 
    21 tcp        0      0 10.10.18.12:16380       10.10.18.10:40872       ESTABLISHED 4330/redis-server 1 
    22 tcp        0      0 10.10.18.12:16380       10.10.18.12:34377       ESTABLISHED 4330/redis-server 1 
    23 tcp        0      0 10.10.18.12:16379       10.10.18.11:37717       ESTABLISHED 4328/redis-server 1 
    24 tcp        0      0 10.10.18.12:43984       10.10.18.11:16380       ESTABLISHED 4328/redis-server 1 
    25 tcp        0      0 10.10.18.12:16379       10.10.18.11:45994       ESTABLISHED 4328/redis-server 1 
    26 tcp        0      0 10.10.18.12:34377       10.10.18.12:16380       ESTABLISHED 4328/redis-server 1
    View Code

    四、测试

    设置redis密码

    [root@redis01 bin]# /data/redis_data/bin/redis-cli -h 10.10.18.10 -p 6379 -c 

    结果:

    10.10.18.10:6379> keys *
    (empty list or set)
    10.10.18.10:6379> config set masterauth redis20190628
    OK
    10.10.18.10:6379> config set requirepass redis20190628
    OK
    10.10.18.10:6379> exit

    查看所有的节点信息:

    [root@redis01]# /data/redis_data/bin/redis-cli -h 10.10.18.10 -p 6380 -c -a 'redis20190628' cluster nodes

    结果:

    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    c4a495f621576910d934fa04da0896b39c0adf7a 10.10.18.11:6379@16379 master - 0 1551081545000 2 connected 5461-10922
    c81b9adc68d5373237e9eaf3e5809bef42c5471a 10.10.18.10:6379@16379 master - 0 1551081544292 1 connected 0-5460
    8d315d8cc7f42afc5ac641003714f5e285822bff 10.10.18.10:6380@16380 myself,slave c4a495f621576910d934fa04da0896b39c0adf7a 0 1551081543000 4 connected
    baa5b1e2a769da1e37e3a4179ca362c9a26698c8 10.10.18.12:6379@16379 master - 0 1551081543000 3 connected 10923-16383
    7f0c0858330bf107276d27c10f3e9c600aefa8ad 10.10.18.12:6380@16380 slave c81b9adc68d5373237e9eaf3e5809bef42c5471a 0 1551081544292 6 connected
    a7096a413407e77431c0d852c5106860d6d3184a 10.10.18.11:6380@16380 slave baa5b1e2a769da1e37e3a4179ca362c9a26698c8 0 1551081543292 5 connected

    添加测试数据

    在任意一台机器上执行插入数据,然后在其它任意节点上都能获取到对应的值

    [root@redis01]# /data/redis_data/bin/redis-cli -h 10.10.18.10 -p 6380 -c -a 'redis20190628'   
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    10.10.18.10:6380> set test10_6380 test
    [root@redis01]# /data/redis_data/bin/redis-cli -h 10.10.18.10 -p 6379 -c -a 'redis20190628'  
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    10.10.18.10:6379> get test10_6380
    "test"
    
    [root@redis02]# /data/redis_data/bin/redis-cli -h 10.10.18.11 -p 6380 -c -a 'redis20190628' 
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    10.10.18.11:6380> get test10_6380
    -> Redirected to slot [2317] located at 10.10.18.10:6379
    "test"
  • 相关阅读:
    有關window.showModalDialog的應用11/30
    phpmyadmin的查詢不出現10/29
    那點事情我沒有精力做10/17
    水晶報表System.InvalidCastException: 指定的轉換無效11/30
    水晶報表匯出時System.InvalidCastException:指定的格式無效10/29
    读博日记(C#常用开源类库收集
    ASP.net通过JQuery实现Ajax操作
    仿Discuz!的论坛评分发帖弹出提示并渐渐消失的效果
    仿Discuz文本框弹出层的效果
    C#开源资源大汇总
  • 原文地址:https://www.cnblogs.com/sz-wenbin/p/11101979.html
Copyright © 2011-2022 走看看