zoukankan      html  css  js  c++  java
  • Redis-4.X 版本 Redis Cluster集群 (一)

    一 创建redis cluster 集群前提条件:

    1 )  每个redis node 节点采用相同的硬件配置,相同的密码.
    2 )  每个节点必须开启的参数:
         cluster-enabled yes                  # 必须开启集群状态,开启后redis进程会有cluster显示。
         cluster-config-file node-6379.conf   # 此文件由cluster 集群自动创建和维护,不需要任何手动操作。
    3 ) 所有redis 服务器必须没有任何数据,否则会报错.
    4 )  先启动为单机redis且没有任何 key value 
    5 )  针对redis 3.x、4.x版本ruby和redis-trib.rb,只安装一台机器能做集群管理即可.
    
      2.1 )
    [root@srv-1 src]# ps -ef | grep redis
    root       5378      1  0 08:43 ?        00:00:00 /usr/local/bin/redis-server 0.0.0.0:6379 [cluster]
    root       5383   5199  0 08:43 pts/0    00:00:00 grep --color=auto redis
    

    二 生产环境建议6台服务器:

    主从 1 主从 2 主从 3
    10.10.5.11 10.10.5.12 10.10.5.13
    10.10.5.14 10.10.5.15 10.10.5.16
    预留位置 预留位置 10.10.5.17

    三 安装redis-4.0.14 版本包:

    3.1 )  下载并安装redis-4.0.14:
    cd /data/src/
    tar -zxvf redis-4.0.14.tar.gz -C /data/soft/ && mv /data/soft/redis-4.0.14 /data/soft/redis
    cd /data/soft/redis
    make && make install 
    
    3.2 ) 初始化redis(根据自己的习惯来设置即可):
     ./utils/install_server.sh 
     
     [root@srv-1 redis]# ./utils/install_server.sh
    Welcome to the redis service installer
    This script will help you easily set up a running redis server
    
    Please select the redis port for this instance: [6379] 
    Selecting default: 6379
    Please select the redis config file name [/etc/redis/6379.conf] /etc/redis.conf
    Please select the redis log file name [/var/log/redis_6379.log] /data/logs/redis_6379.log
    Please select the data directory for this instance [/var/lib/redis/6379] /data/soft/redis/6379data        
    Please select the redis executable path [/usr/local/bin/redis-server] 
    Selected config:
    Port           : 6379
    Config file    : /etc/redis.conf
    Log file       : /data/logs/redis_6379.log
    Data dir       : /data/soft/redis/6379data
    Executable     : /usr/local/bin/redis-server
    Cli Executable : /usr/local/bin/redis-cli
    Is this ok? Then press ENTER to go on or Ctrl-C to abort.
    
    回车确认 安装完成.
    
    3.3 )  系统参数修改:
    echo "65535" > /proc/sys/net/core/somaxconn
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
    echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
    sysctl vm.overcommit_memory=1
    
    sysctl -p
    
    3.4 )  重启redis:
    /etc/init.d/redis_6379 restart
    
    3.5 )  安装Ruby版本高于2.3.0:
    yum remove ruby-2.0.0.648
    wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
    tar -zxf ruby-2.5.5.tar.gz && cd ruby-2.5.5
    ./configure && make && make install 
    
    gem install redis
    
    # 验证结果(执行/data/soft/redis/src/redis-trib.rb):
    
    [root@srv-1 src]# ./redis-trib.rb 
    Usage: redis-trib <command> <options> <arguments ...>
    
      create          host1:port1 ... hostN:portN    # 创建集群
                      --replicas <arg>               # 指定Master 的副本数量
      check           host:port                      # 检查集群,跟着集群里面的任意主机+端口
      info            host:port                      # 查看集群信息
      fix             host:port                      # 修复集群
                      --timeout <arg>
      reshard         host:port                      # 在线热迁移集群制定主机的slots数据
                      --from <arg>
                      --to <arg>
                      --slots <arg>
                      --yes
                      --timeout <arg>
                      --pipeline <arg>
      rebalance       host:port                      # 平衡集群中各主机之间的slots的数量
                      --weight <arg>
                      --auto-weights
                      --use-empty-masters
                      --timeout <arg>
                      --simulate
                      --pipeline <arg>
                      --threshold <arg>
      add-node        new_host:new_port existing_host:existing_port     # 添加主机到集群
                      --slave
                      --master-id <arg>
      del-node        host:port node_id                                 # 从集群内删除主机
      set-timeout     host:port milliseconds                            # 设置节点的超时时间
      call            host:port command arg arg .. arg                  # 在集群的所有节点上执行命令
      import          host:port                                         # 导入外部redis服务器的数据到当前集群
                      --from <arg>
                      --copy
                      --replace
      help            (show this help)
    
    For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
    
    
    
    

    四 ) redis.conf 配置文件修改:

    
    [root@srv-1 utils]# grep -vE '^#|^$' /etc/redis.conf 
    bind 0.0.0.0                                      #  绑定的IP地址
    port 6379                                         #  redis绑定的端口
    tcp-backlog 511                                   #
    timeout 0                                         #  超时时间
    tcp-keepalive 300                                 # 
    daemonize yes                                     #  是否进程运行
    supervised no                                     #  是否交给systemd 来运行redis,否
    pidfile /var/run/redis_6379.pid                   #  PID 存放路径
    loglevel notice                                   # 日志级别:debug > verbose > notice > warning
    logfile /data/logs/redis_6379.log                 #  log 日志存放路径,如果不是默认,要有redis的写入权限
    databases 16                                      #  redis 默认开启多少库
    always-show-logo yes                              #  是否打开logo 写入日志. 浪费不了多少。
    save 900 1                                        #  900秒(15分钟)有1个写入及执行bgsave命令保存Disk
    save 300 10                                       #  300秒(5分钟) 有10个写入及执行bgsave命令保存Disk
    save 60 10000                                     #  60秒(1分钟) 有10000个写入及执行bgsave命令保存Disk
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb                               #  数据文件名,这里只能是文件名
    dir /data/soft/redis/6379data                     #  数据文件 存放目录,不能有文件名,只能有路径.            千万注意
    masterauth 123456                                 #  slave 连接master 时需要用到的密码,否则无法获取信息     千万注意
    slave-serve-stale-data yes                        #  
    slave-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    slave-priority 100
    lazyfree-lazy-eviction no
    lazyfree-lazy-expire no
    lazyfree-lazy-server-del no
    slave-lazy-flush no
    appendonly no                                     #  AOF 模式保存日志
    appendfilename "appendonly.aof"                   #  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 no
    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
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    aof-rewrite-incremental-fsync yes
    
    

    五 ) redis-4.x集群创建:

    5.1 ) 创建1个集群:
    [root@srv-1 src]# ./redis-trib.rb create --replicas 1 10.10.5.11:6379 10.10.5.12:6379 10.10.5.13:6379 10.10.5.14:6379 10.10.5.15:6379 10.10.5.16:6379 
    ./redis-trib.rb create --replicas 1 10.10.5.11:6379 10.10.5.12:6379 10.10.5.13:6379 10.10.5.14:6379 10.10.5.15:6379 10.10.5.16:6379 
    
      5.1.1 )  
        1 节点redis 有密码需要做如下设置:
        [root@srv-1 src]# vim /usr/local/lib/ruby/gems/2.5.0/gems/redis-4.1.4/lib/redis/client.rb 
        #修改里面的:password 选项为 redis 登录密码. 
       
        2 节点有数据会报错,创建集群的节点必须没有数据,刚开始强调过.
        # 如果有集群存在数据,可以进入redis 执行flushall和bgsave即可,但这个是有风险的会清空redis数据,慎用.
        
        
    [root@srv-1 src]# ./redis-trib.rb create --replicas 1 10.10.5.11:6379 10.10.5.12:6379 10.10.5.13:6379 10.10.5.14:6379 10.10.5.15:6379 10.10.5.16:6379 
    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    10.10.5.11:6379
    10.10.5.12:6379
    10.10.5.13:6379
    Adding replica 10.10.5.15:6379 to 10.10.5.11:6379
    Adding replica 10.10.5.16:6379 to 10.10.5.12:6379
    Adding replica 10.10.5.14:6379 to 10.10.5.13:6379
    M: 291faee66636effee60e8409894a4ebae40fe4a6 10.10.5.11:6379
       slots:0-5460 (5461 slots) master
    M: 905e3ecb99a4723b12bb5d7fda91372ee72909be 10.10.5.12:6379
       slots:5461-10922 (5462 slots) master
    M: 3a311c961450d50f6236d814106fcd0f7723e071 10.10.5.13:6379
       slots:10923-16383 (5461 slots) master
    S: bad22bcf6c5c42b13c3692c4d1cfcbde7fd7ce14 10.10.5.14:6379
       replicates 3a311c961450d50f6236d814106fcd0f7723e071
    S: 761fbb98a72600b8322fc34e3b2bbf0adbd3822e 10.10.5.15:6379
       replicates 291faee66636effee60e8409894a4ebae40fe4a6
    S: 57e6cc3af523aa829705cd0072d6283b988a43c7 10.10.5.16:6379
       replicates 905e3ecb99a4723b12bb5d7fda91372ee72909be
    Can I set the above configuration? (type 'yes' to accept):     
    ...... 集群创建完成......
    

    集群创建信息


    安装ruby问题:

    ## 问题:
    解决ruby版本较低的问题:
    [root@srv-1 ~]# gem install redis
    Fetching: redis-4.1.4.gem (100%)
    ERROR:  Error installing redis:
    	redis requires Ruby version >= 2.3.0.
    
    # 解决方法:
    yum remove ruby-2.0.0.648
    wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
    tar -zxf ruby-2.5.5.tar.gz && cd ruby-2.5.5
    ./configure && make && make install 
    
    
    ## redis-trib.rb无法运行的问题:
    [root@srv-1 ~]# /data/soft/redis/src/redis-trib.rb 
    /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
    	from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /data/soft/redis/src/redis-trib.rb:25:in `<main>'
    	
    # 解决方法:
    Ruby的redis接口没有安装,需要安装Redis接口,输入命令 " gem install redis " 进行安装:
    [root@srv-1 ~]# gem install redis
    
    ## 安装期间出现各种奇葩问题:
    解决*** No rule to make target `/include/ruby.h' 报错
    https://blog.csdn.net/ck3207/article/details/90404952
    
    此处有两种解决方法:
    1、在Makefile文档最前面,设置变量top_srcdir的路径
    2、用绝对/相对路径替换$(top_srcdir)该变量
    来一个简单粗暴点的方法吧:
    使用 vim Makefile(因为要大批量改动,建议先备份: cp Makefile Makefile-date +%F)编辑文件,而后替换所有$(top_srcdir),输入:
    
    : %s/$(top_srcdir)/../../g
    
    保存退出,重新执行make即可.
    
  • 相关阅读:
    juniper ALARM亮红灯
    笔记本设置wifi热点
    基于apache+php+mysql 编译安装详解(转载)
    CentOS6.X 安装MySQL 5.X
    spring 多数据源切换
    Java Reflection(十二):动态类加载与重载
    Java Reflection(十一):动态代理
    Java Reflection(十):数组
    Java Reflection(九):泛型
    Java Reflection(八):注解
  • 原文地址:https://www.cnblogs.com/zhenxing06/p/12854523.html
Copyright © 2011-2022 走看看