zoukankan      html  css  js  c++  java
  • redis集群安装与配置(redis4.x)

    redis集群安装与配置(redis4.x)
    概要说明
    redis单机/redis集群(本文档为redis4.0版本)
    Redis 复制、Sentinel的搭建和原理(限于版本低于redis3.0的)
    截止2019/06/27 最新稳定版为 redis5.0.5(x.y.z,y为偶数为稳定版).
    redis5.x版本的集群,请重新查找网上资料(不再需要ruby支持). 如
    https://blog.csdn.net/u010520146/article/details/84932104
    https://www.jianshu.com/p/8045b92fafb2

    官方集群搭建
    https://redis.io/topics/cluster-tutorial

    哨兵模式 Sentinel (redis3以前的方式)
    在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。

    20180615 Chenxin整理
    安装单机版redis
    cd /opt
    wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    tar xzvf redis-4.0.10.tar.gz
    cd redis-4.0.10
    make
    cd /opt;mv /opt/redis-4.0.10 /usr/local/redis

    Redis 集群
    参考资料
    https://www.cnblogs.com/mafly/p/redis_cluster.html redis集群搭建详细指南
    https://blog.csdn.net/huwh_/article/details/79242625

    Redis 集群说明
    Redis 在3.0版本前只支持单实例模式,Redis 在 3.0 版本以后就推出了集群模式.
    Redis 集群(至少需要6个节点,3主3从)采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot .集群中的所有信息(节点、端口、slot等),通过节点之间定期的数据交换进行更新.
    Redis 客户端可以向任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例.

    集群准备
    mkdir /usr/local/redis-cluster
    cd /usr/local/redis-cluster
    mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
    mkdir bin
    cd /usr/local/redis/src
    cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin/
    cp -rf /usr/local/redis/* /usr/local/redis-cluster/9001

    配置文件
    修改配置文件/usr/local/redis-cluster/9001/redis.conf
    cd /usr/local/redis-cluster/9001/
    cat redis.conf

    bind 127.0.0.1

    bind 10.0.1.200
    protected-mode yes

    port 6379

    port 9001
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    daemonize yes

    daemonize no

    dir /usr/local/redis-cluster/9001/data/

    以下为cluster需要的几项配置.

    pidfile /var/run/redis_9001.pid
    cluster-enabled yes
    cluster-config-file nodes9001.conf
    cluster-node-timeout 15000

    以下为默认

    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 yes

    appendonly no

    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 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
    配置文件结束.

    cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9002
    cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9003
    cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9004
    cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9005
    cp -rf /usr/local/redis-cluster/9001/* /usr/local/redis-cluster/9006
    sed -i 's/9001/9002/g' /usr/local/redis-cluster/9002/redis.conf
    sed -i 's/9001/9003/g' /usr/local/redis-cluster/9003/redis.conf
    sed -i 's/9001/9004/g' /usr/local/redis-cluster/9004/redis.conf
    sed -i 's/9001/9005/g' /usr/local/redis-cluster/9005/redis.conf
    sed -i 's/9001/9006/g' /usr/local/redis-cluster/9006/redis.conf

    启动
    /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/9001/redis.conf
    /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/9002/redis.conf
    /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/9003/redis.conf
    /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/9004/redis.conf
    /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/9005/redis.conf
    /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/9006/redis.conf

    测试各单节点运行情况
    /usr/local/redis-cluster/bin/redis-cli -h 10.0.1.200 -p 9001

    keys *
    set name chenxin
    会提示"(error) CLUSTERDOWN Hash slot not served(不提供集群的散列槽)",redis集群需要使用ruby命令,需要安装ruby和相关接口.

    密码认证的方式
    1.配置文件
    requirepass aA.......THJ7jrd
    2.连接方式
    方式一 /usr/local/redis/src/redis-cli -h 10.16.200.6 -a aAORnquDATHJ7jrd (此方式会将密码记录在历史指令里)
    方式二 /usr/local/redis/src/redis-cli -h 10.16.200.6 登陆进去后,执行 10.16.200.6:6379> auth aAORnquDATHJ7jrd

    集群链接多个守护进程-构建集群
    Redis的实例全部运行之后,还需要redis-trib.rb工具来完成集群的创建,redis-trib.rb二进制文件在Redis包主目录下的src目录中,运行该工具依赖Ruby环境和gem.Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包
    官网下载编译安装ruby2.5版本

    编译安装ruby2.2以上版本 (注意,redis5.0版本以后,就不再使用此方式了,无需安装ruby.直接集成进redis-cli里了).
    cd /opt/
    wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz
    tar xzvf ruby-2.5.1.tar.gz;cd ruby-2.5.1;
    ./configure
    make
    报错:
    uh-oh! RDoc had a problem:
    Directory .ext/rdoc already exists, but it looks like it isn't an RDoc directory.
    Because RDoc doesn't want to risk destroying any of your existing files,
    you'll need to specify a different output directory name (using the --op


    option)
    run with --debug for full backtrace
    make: *** [rdoc] Error 1
    没有查到解决此问题的办法,只能通过禁用掉的方式了.如下
    ./configure --disable-install-rdoc
    make
    make install
    默认安装到/usr/local/bin/下的.系统自带的会在/usr/bin/目录下,自带的是ruby2.0版本.这里需要安装2.2以上版本.
    确认当前调用的是2.5版本.
    ruby -v

    安装gem
    yum install -y rubygems
    安装gem需要的依赖包
    yum install -y zlib zlib-devel openssl openssl-devel

    gem安装redis
    gem install redis
    Fetching: redis-4.0.1.gem (100%)
    Successfully installed redis-4.0.1
    Parsing documentation for redis-4.0.1
    Installing ri documentation for redis-4.0.1
    Done installing documentation for redis after 0 seconds
    1 gem installed
    没有报错.
    gem install redis 如果报错(缺少zlib依赖和openssl库),则修改以下

    添加zlib依赖
    cd /opt/ruby-2.5.1/ext/zlib
    ruby extconf.rb
    然后修改Makefile文件中的zlib.o: $(top_srcdir)/include/ruby.h,将$(top_srcdir)修改为../..即zlib.o: ../../include/ruby.h
    sed -i 's/$(top_srcdir)/../../g' Makefile
    make && make install
    以上zlib的依赖包报错可以参考 https://blog.csdn.net/feinifi/article/details/78251486

    添加openssl库
    cd /opt/ruby-2.5.1/ext/openssl
    ruby extconf.rb
    然后同样修改Makefile文件中的$(top_srcdir)为../..
    sed -i 's/$(top_srcdir)/../../g' Makefile
    make && make install
    以上zlib的依赖包报错可以参考 https://blog.csdn.net/feinifi/article/details/78251486

    再次安装gem install redis
    gem install redis

    正式链接整个集群
    /usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 10.0.1.200:9001 10.0.1.200:9002 10.0.1.200:9003 10.0.1.200:9004 10.0.1.200:9005 10.0.1.200:9006
    调用 ruby 命令来进行创建集群,--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。
    测试集群
    /usr/local/redis-cluster/bin/redis-cli -c -h 10.0.1.200 -p 9001
    执行:
    cluster info
    cluster nodes
    可以详细的看出集群信息和各个节点状态,主从信息以及连接数、槽信息等
    当我们 set name chenxin,出现了 Redirected to slot 信息并自动连接到了9002节点。这也是集群的一个数据分配特性,这里不详细说了.
    另外,cluster的配置文件和数据文件发生了变化:
    ls /usr/local/redis-cluster/9001/data/
    appendonly.aof dump.rdb nodes9001.conf

    迁移IP后注意事项
    如果cluster发生IP地址的变化(迁移),需要调整nodes9001.conf文件内的IP配置信息.否则集群会无法"链接".

    如何关闭集群
    正确关闭
    redis-cli -p 6380 -a fafa123 shutdown
    /usr/local/redis/src/redis-cli -p 9001 -h 10.0.1.200 shutdown 并依次关闭9002-9006
    语法
    SHUTDOWN [NOSAVE|SAVE]
    [root@T4 conf]# redis-cli -c -h 172.16.57.57 -p 6382
    172.16.57.57:6382> shutdown save
    注意关闭只能关闭一个进程,不能关闭集群.
    /etc/init.d/redis-server stop
    /etc/init.d/redis-server start
    /etc/init.d/redis-server restart

    redis-cli -h 127.0.0.1 -p 6379 shutdown
    手动save:
    /usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 save
    OK

    集群的扩容与收缩

    数据的备份与恢复
    貌似还是按照单个实例的方式进行备份或恢复物理文件,待后期继续研究更加合理的备份/恢复方案.

    将远端redis上的rdb文件传输到本地(实现备份)
    /usr/local/redis/src/redis-cli -h 10.0.1.198 -p 10379 save
    cd /home/admin/
    /usr/local/redis/src/redis-cli -h 10.0.1.198 -p 10379 --rdb test.rdb #将1.198上的redis数据拖到本地,本地文件命名为test.rdb

    AWS的ElasticCache Redis不支持save和 --rdb 的指令.所以备份方案请参考aws云笔记里的ElasticCache备份和删除过期文件.

    使用云服务商提供的redis集群服务
    若服务过多,以及数据可靠性完整性考虑,推荐后期使用云服务商提供的redis集群服务.备份采取自备,不依赖云平台服务.

  • 相关阅读:
    R dataframe 筛选
    R dataframe 统计每行中大于某个值的列的数量
    参考基因组
    C++/CLI入门系列 第二篇:封装C++ dll库,提供接口给C#调用
    C++/CLI入门系列 第一篇:HelloWorld
    用C++/CLI搭建C++和C#之间的桥梁
    C++ CLI简介(什么是C++ CLI)
    GB28181协议RTP传输
    gsoap使用总结
    C++ (使用gsoap)调用 WCF服务
  • 原文地址:https://www.cnblogs.com/chanix/p/12744116.html
Copyright © 2011-2022 走看看