zoukankan      html  css  js  c++  java
  • redis集群

    部署3(Master)+3(Slave)的一个集群安装过程,真实生产环境上可以采用每台物理机上部署一个Master进程和一个Slave进程,Slave进程是其他物理机上的Master的备机,避免服务器在断电的情况下,配对的Master和Slave都不可用。

    架构

    下载redis 

    wget -c http://download.redis.io/releases/redis-3.0.7.tar.gz;tar -zxf redis-3.0.7.tar.gz ;cd redis-3.0.7;make&&make install

    新建6个文件夹

    将redis.conf 拷贝到文件夹内

    修改配置文件

    配置选项

    描述

    daemonize

    yes

    logfile

    "/usr/local/redis-3.0.7/logs/redis-7001.log"

    databases

    1

    dir

    /usr/local/redis-3.0.7/7001

    用来存放数据的地方

    cluster-enabled

    yes

    cluster-config-file

    /usr/local/redis-3.0.7/7001/nodes.conf

    nodes.conf由redis自己生成

    cluster-node-timeout

    15000

    cluster-migration-barrier

    1

    cluster-require-full-coverage

    yes

    只要集群中有一对Master-Slave不可用时,整个集群不可用

    分别启动 redis-server 7001/redis.conf

    安装Ruby

    wget -c https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.7.tar.gz;tar -zxf ruby-2.2.7.tar.gz;cd ruby-2.2.7

    ./configure --prefix=/usr/local/ruby;make&&make install

    加为环境变量 

    export PATH=/usr/local/ruby/bin:$PATH

    source /etc/profile

    验证ruby是否安装成功,执行ruby –v,出现如下输出,即ruby安装OK

    安装redis gem

    wget -c https://rubygems.org/downloads/redis-3.3.2.gem

    安装 gem install -l redis-3.3.2.gem

    如果安装redis-3.2.1.gem出错

    安装zlib

    1. tar -xzvf zlib-1.2.8.tar.gz
    2. cd zlib-1.2.8
    3. ./configure --prefix=/opt/zlib
    4. make
    5. make install

    安装ruby-zlib

    1. cd ruby-2.1.6/ext/zlib
    2. ruby ./extconf.rb --with-zlib-dir=/opt/zlib
    3. make
    4. make install

    最后安装redis-3.3.2gem

    gem install -l redis-3.3.2.gem

    启动集群

    1. 进入src目录 cd redis-3.0.7/src
    2. 执行./redis-trib.rb create --replicas 1 192.168.0.3:7001 192.168.0.3:7002 192.168.0.3:7003 192.168.0.3:7004 192.168.0.3:7005 192.168.0.3:7006

    为本机IP,出现如下日志即为集群部署OK

    [OK] All nodes agree about slots configuration.

    >>> Check for open slots...

    >>> Check slots coverage...

    [OK] All 16384 slots covered.

    多机部署时,只要在其中一台机器上执行./redis-trib.rb就可以了

    验证

    1. 进入redis控制台redis-cli -c -p 7001
    2. set foo car
    3. get foo

    如果能取出数据即集群安装OK。

    报错

    1)、将需要新增的节点下aof、rdb等本地备份文件删除;
    2)、同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;
    3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli–h x –p对数据库进行清除:
    192.168.0.3:7001> flushdb #清空当前数据库

     如果远程可 redis-cli -h 192.168.0.3 -c -p 7001-7006  get a

    redis-cli  -p 7003 shutdown

    redis-cli -c -p 7001 cluster nodes 查看集群节点

    redis-cli -h localhost -p 7001  monitor 监控redis的连接及读写操作 

    redis-cli -h localhost -p 7001 info  redis服务的统计信息 

    动态增加删除节点

    新增启动7007,7008端口

    ./redis-trib.rb add-node 192.168.0.3:7007 192.168.0.3:7001

    如果加入了其他点可以删除 7007文件下的nodes.conf文件

    redis官方给出的集群方案中,数据的分配是按照槽位来进行分配的,每一个数据的键被哈希函数映射到一个槽位,redis-3.0.0规定一共有16384个槽位,当然这个可以根据用户的喜好进行配置。当用户put或者是get一个数据的时候,首先会查找这个数据对应的槽位是多少,然后查找对应的节点,然后才把数据放入这个节点。这样就做到了把数据均匀的分配到集群中的每一个节点上,从而做到了每一个节点的负载均衡,充分发挥了集群的威力。

    如果要创建master 需要给一定哈希槽,这样才能充分利用节点 之前哈希槽平均分配到了3个master节点

    将7007设置为master给予4000哈希槽

    ./redis-trib.rb reshard 192.168.0.3:7007

     

    输入7007的node_id

    从所有节点随机转移哈希槽,凑足4000

    输入yes开始分配

    成功输出(由于配置了maxmemory 100m,内存溢出导致未分配到4000哈希槽)

    将7008设置为7007的slave (7008需先加入此集群)

    前面我们已经把这个新节点添加到集群中了,现在我们要让新节点7008成为7007的从节点,只需要执行下面的命令就可以了,命令后面的节点ID就是7007的节点ID

    redis-cli -c -p 7008 cluster replicate node_id

    删除节点  (因为之前内存不足问题,我直接修改了node.conf文件重启)

    1:如果删除的节点是主节点,这里我们删除192.168.0.3:7007节点,这个节点有690个哈希槽
    首先要把节点中的哈希槽转移到其他节点中,执行下面的命令
    cd /usr/local/redis3.0.0.7/src
    ./redis-trib.rb reshard 192.168.0.3:7007
    系统会提示我们要移动多少哈希槽,这里移动690个,因为192.168.0.3:7007节点有690个哈希槽
    然后系统提示我们输入要接收这些哈希槽的节点的ID,这里使用192.168.0.3:7001的节点ID
    然后要我们选择从那些节点中转出哈希槽,这里一定要输192.168.0.3:7007这个节点的ID,最后输入 done 表示输入完毕
    最后一步,使用下面的命令把这个节点删除后面为7007 node_id 
    cd /usr/local/redis3.0.7/src/
    ./redis-trib.rb del-node 192.168.0.3:7007 3126945afebaf2fd685fd90637250852de91a2bc  
    2:如果节点是从节点的,直接使用下面的命令删除即可。
    cd /usr/local/redis3.0.7/src/
    ./redis-trib.rb del-node 192.168.0.3:7008 node_id

    config get动态扩容 (连接哪个节点能改这个节点参数,临时生效)

    config get *获取所有可动态扩参数

    config set maxmemory  

     

     redis-cli -c -h localhost -p 7001 info

    redis_version:2.4.16                                  # Redis 的版本
    redis_git_sha1:00000000
    redis_git_dirty:0
    arch_bits:64
    multiplexing_api:epoll
    gcc_version:4.1.2                                         #gcc版本号
    process_id:10629                                        # 当前 Redis 服务器进程id
    uptime_in_seconds:145830                      # 运行时间(秒)
    uptime_in_days:1                                        # 运行时间(天)
    lru_clock:947459                                        
    used_cpu_sys : Redis 服务器耗费的系统 CPU
    used_cpu_user : Redis 服务器耗费的用户 CPU
    used_cpu_sys_children : 后台进程耗费的系统 CPU
    used_cpu_user_children : 后台进程耗费的用户 CPU
    connected_clients:1                                  # 连接的客户端数量
    connected_slaves:0                                  # slave的数量
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    used_memory:832784                               # Redis 分配的内存总量
    used_memory_human:813.27K
    used_memory_rss:1896448                     # Redis 分配的内存总量(包括内存碎片)
    used_memory_peak:832760                
    used_memory_peak_human:813.24K    #Redis所用内存的高峰值
    mem_fragmentation_ratio:2.28                 # 内存碎片比率
    mem_allocator:jemalloc-3.0.0                 

    loading:0
    aof_enabled:0                                                  #redis是否开启了aof
    changes_since_last_save:0                         # 上次保存数据库之后,执行命令的次数
    bgsave_in_progress:0                                   # 后台进行中的 save 操作的数量
    last_save_time:1351506041                        # 最后一次成功保存的时间点,以 UNIX 时间戳格式显示
    bgrewriteaof_in_progress:0                         # 后台进行中的 aof 文件修改操作的数量
    total_connections_received:1                      # 运行以来连接过的客户端的总数量
    total_commands_processed:1                    # 运行以来执行过的命令的总数量
    expired_keys:0                                                # 运行以来过期的 key 的数量
    evicted_keys:0                                                #运行以来删除过的key的数量
    keyspace_hits:0                                            # 命中 key 的次数
    keyspace_misses:0                                     # 不命中 key 的次数
    pubsub_channels:0                                     # 当前使用中的频道数量
    pubsub_patterns:0                                      # 当前使用的模式的数量
    latest_fork_usec:0                                      
    vm_enabled:0                                                # 是否开启了 vm (1开启  0不开启)
    role:master                                                     #当前实例的角色master还是slave
    db0:keys=183,expires=0                             # 各个数据库的 key 的数量,以及带有生存期的 key 的数量 

      

    EXPIRE key 100

    设置了过期时间,100秒后,key将自动被删除。

     ################################ GENERAL  #####################################
    daemonize yes
    port 6379
    logfile "/opt/oracle/redis/logs/Redis.log"
    loglevel notice
    syslog-enabled no
    pidfile /opt/oracle/redis/logs/Redis.pid
    dir "/opt/oracle/redis/data"
    databases 1

    ################################ SNAPSHOTTING  ################################
    #save 900 1
    #save 300 10
    #save 60 10000
    stop-writes-on-bgsave-error no
    dbfilename    "master.rdb"

    ############################# CLUSTER #########################################
    cluster-enabled yes
    cluster-config-file     /opt/oracle/redis/conf/masternodes.conf
    cluster-node-timeout    15000
    cluster-migration-barrier       1
    cluster-require-full-coverage   yes

    ################################# REPLICATION #################################
    slave-serve-stale-data yes
    slave-read-only yes
    repl-backlog-size 1mb
    repl-backlog-ttl 3600
    min-slaves-to-write 0
    min-slaves-max-lag 10

    ################################### LIMITS ####################################
    maxclients 10000
    tcp-backlog 128
    maxmemory 16gb
    maxmemory-policy noeviction
    tcp-keepalive 60
    ############################## APPEND ONLY MODE ###############################
    appendonly no

    ################################## SLOW LOG ###################################
    slowlog-log-slower-than 10000
    slowlog-max-len 128 
  • 相关阅读:
    BZOJ 3053 The Closest M Points
    Python 语言介绍
    计算机组成与操作系统基础
    Gym 100818I Olympic Parade(位运算)
    Codeforces 602B Approximating a Constant Range(想法题)
    Codeforces 599D Spongebob and Squares(数学)
    Codeforces 599C Day at the Beach(想法题,排序)
    ZOJ 3903 Ant(数学,推公示+乘法逆元)
    ZOJ 3911 Prime Query(线段树)
    UVALive 6910 Cutting Tree(离线逆序并查集)
  • 原文地址:https://www.cnblogs.com/linxizhifeng/p/7159745.html
Copyright © 2011-2022 走看看