zoukankan      html  css  js  c++  java
  • Redis-集群部署

    这篇文章参考了以下文章,仅作个人学习记录

    1.官方文档【https://redis.io/topics/cluster-tutorial】

    2.大神博客【https://blog.csdn.net/yulei_qq/article/details/52166150】

    3.大神博客【https://www.jianshu.com/p/0232236688c1】

    4.大神博客【https://www.cnblogs.com/haoxinyue/p/redis.html】

    -----------------------------------分割线-----------------------------------

    一、Redis集群概况

    1.Redis3.0版本开始支持redis原生集群,本篇文章简单说下redis cluster的实现。

    2.Redis3.0之前的集群方式应该有两种:

    (1)使用中间件(可参考 twemproxy redis)来实现。

    (2)客户端sharding,这个不是很了解,感兴趣可在网上搜一搜。

    二、Redis cluster集群要点

    1.Redis cluster实质是一个分布式的系统,对数据的存储,是一个分片的形式。

    2.Redis cluster对key的存储和获取,通过分配的slot(内存槽)实现。

    3.Redis cluster通过集群总线进行集群的状态检查,集群总线是一个二进制的协议,使用端口是“实例端口+10000”。所以每个redis实例需要监听两个端口,一个是服务端的端口,如6374;另一个就是集群总线端口,如16374。

    二、Redis部署信息

    1.软件版本:

    系统:Centos7.3

    Redis:3.2 [http://download.redis.io/releases/]

    三、Redis单实例部署

    新增:修改内核参数

    vm.overcommit_memory = 1
    net.core.somaxconn   = 2048
    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    1.编译Redis实例

    (1)安装依赖
    # yum -y install make cmake gcc tcl

    (2)下载并编译redis
    # cd /opt/
    # wget 'http://download.redis.io/releases/redis-3.2.0.tar.gz'
    # tar zxf redis-3.2.0.tar.gz
    # mv redis-3.2.0 redis
    # cd redis/
    # make
    # make test

    (3)调整redis.conf
    # cp redis.conf redis.conf.bak
    # vim redis.conf
    调整以下参数
    bind 10.105.199.48  #只监听内网IP
    daemonize yes     #开启后台模式
    timeout 300      #连接超时时间
    dir ./data/      #本地数据库存放目录
    pidfile /opt/redis/log/redis.pid  #定义pid文件
    logfile /opt/redis/log/redis.log  #定义log文件

    (4)启动测试redis
    # /opt/redis/src/redis-server /opt/redis/redis.conf
    # /opt/redis/src/redis-cli -h 本机IP  -p 6379
    10.105.199.48:6379> set foo test
    OK
    10.105.199.48:6379> get foo
    "test"

    四、Redis-cluster部署

    1.创建redis集群工作目录

    # mkdir redis-cluster  
    # cd redis-cluster
    # mkdir 7000 7001 7002 7003 7004 7005

    2.拷贝redis配置文件

    # cd /opt/
    # /usr/bin/cp redis/redis.conf /opt/redis-cluster/7000/redis7000.conf
    # /usr/bin/cp redis/redis.conf /opt/redis-cluster/7001/redis7001.conf
    # /usr/bin/cp redis/redis.conf /opt/redis-cluster/7002/redis7002.conf
    # /usr/bin/cp redis/redis.conf /opt/redis-cluster/7003/redis7003.conf
    # /usr/bin/cp redis/redis.conf /opt/redis-cluster/7004/redis7004.conf
    # /usr/bin/cp redis/redis.conf /opt/redis-cluster/7005/redis7005.conf

    #创建各个实例的日志目录
    # mkdir -p /opt/redis-cluster/7000/log
    # mkdir -p /opt/redis-cluster/7001/log
    # mkdir -p /opt/redis-cluster/7002/log
    # mkdir -p /opt/redis-cluster/7003/log
    # mkdir -p /opt/redis-cluster/7004/log
    # mkdir -p /opt/redis-cluster/7005/log

    #创建数据目录
    # mkdir -p /opt/redis-data

    3.调整集群的redis.conf

    # vim /opt/redis-cluster/7000/redis7000.conf(7001700270037004,7005都需要修改)
    调整以下参数
    port 7000
    cluster-enabled yes
    cluster-config-file nodes-7000.conf
    cluster-node-timeout 5000
    appendonly yes
    dir /opt/redis-data/
    pidfile /opt/redis-cluster/7000/log/redis.pid
    logfile /opt/redis-cluster/7000/log/redis.log

    4.启动实例

    # /opt/redis-cluster/src/redis-server /opt/redis-cluster/7000/redis7000.conf
    # cat /opt/redis-cluster/7000/redis.log     #查找redis集群实例ID
    No cluster configuration found, I'm 7928073bda8e634ba0ff80a4b4978d2e1b00b80d  #这个ID是实例永久使用的,所以一定要记住

    # opt/redis/src/redis-server /opt/redis-cluster/7000/redis7000.conf
    # /opt/redis/src/redis-server /opt/redis-cluster/7001/redis7001.conf
    # /opt/redis/src/redis-server /opt/redis-cluster/7002/redis7002.conf
    # /opt/redis/src/redis-server /opt/redis-cluster/7003/redis7003.conf
    # /opt/redis/src/redis-server /opt/redis-cluster/7004/redis7004.conf
    # /opt/redis/src/redis-server /opt/redis-cluster/7005/redis7005.conf

    5.安装redis gem(这个工具是使用redis-trib的前提)

    # yum -y install gem
    # gem install redis

    到这里会报错,需要安装ruby2.2以上
    # gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
    # curl -L get.rvm.io | bash -s stable
    # find / -name rvm -print

    # source /usr/local/rvm/scripts/rvm
    # rvm list known
    # rvm install 2.3.3
    # rvm use 2.3.3
    # rvm use 2.3.3 --default
    # rvm remove 2.0.0
    # ruby --version


    再继续 gem install redis

    6.创建集群

    #/opt/redis/src/redis-trib.rb create --replicas 1 10.105.199.48:7000 10.105.199.48:7001 10.105.199.48:7002 10.105.199.48:7003 10.105.199.48:7004 10.105.199.48:7005

    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    10.105.199.48:7000
    10.105.199.48:7001
    10.105.199.48:7002
    Adding replica 10.105.199.48:7003 to 10.105.199.48:7000
    Adding replica 10.105.199.48:7004 to 10.105.199.48:7001
    Adding replica 10.105.199.48:7005 to 10.105.199.48:7002
    M: 88370db287d1a30e262167008e9ff60009c33628 10.105.199.48:7000
       slots:0-5460 (5461 slots) master
    M: 7618157e849b73aeff856f05d4f9a9e860d30da2 10.105.199.48:7001
       slots:5461-10922 (5462 slots) master
    M: 216694a6a93fdc2bb3231771d0fde5133e19c513 10.105.199.48:7002
       slots:10923-16383 (5461 slots) master
    S: 9b865041519484766bfa4b0d72f179f767c18091 10.105.199.48:7003
       replicates 88370db287d1a30e262167008e9ff60009c33628
    S: 0ff033100f41af1f19f2faba600ae60affc47da8 10.105.199.48:7004
       replicates 7618157e849b73aeff856f05d4f9a9e860d30da2
    S: e93cbc4a0f50b41b2384f582b73b33bb4e598bda 10.105.199.48:7005
       replicates 216694a6a93fdc2bb3231771d0fde5133e19c513
    Can I set the above configuration? (type 'yes' to accept): yes
      Redis-trib将会提出一个配置,输入yes,集群将会被配置和加入,这意味着,Redis实例将会被引导至互相交互。最后,你将看到一个信息:
    [OK] All 16384 slots covered.
     
    注:
    (1)/opt/redis/src/redis-trib.rb create --replicas 1,"create"想创建一个新的Redis集群。 "--replicas 1"代表想要为每个master节点创建一个slave节点。
    集群是按照我们的要求建立的,3个master节点、3个slave节点。
    (2)如果不带有 "--replicas 1",就不会创建从节点,所有节点都是主节点

    7.测试集群

    #/opt/redis/src/redis-cli -h 10.105.199.48 -p 7000    
    10.105.199.48:7000> set key1 value1
    (error) MOVED 9189 10.105.199.48:7001
    10.105.199.48:7000> quit
    #/opt/redis/src/redis-cli -h 10.105.199.48 -p 7000 -c
    10.105.199.48:7000> 
    10.105.199.48:7000> set key1 value1
    -> Redirected to slot [9189] located at 10.105.199.48:7001
    OK
    10.105.199.48:7001> 
    10.105.199.48:7001> 
    10.105.199.48:7001> 
    10.105.199.48:7001> 
    10.105.199.48:7001> quit
    #/opt/redis/src/redis-cli -h 10.105.199.48 -p 7002 -c
    10.105.199.48:7002> get key1
    -> Redirected to slot [9189] located at 10.105.199.48:7001
    "value1"
    10.105.199.48:7001>

     8.启用密码认证

    (1)停止cluster集群

    (2)在各个实例配置文件中修改以下配置

    requirepass "dingkai.123"
    
    masterauth "dingkai.123"

    (3)启动集群

    (4)验证

    /opt/redis/bin/redis-cli -h 10.140.0.4 -p 7000 -c -a "dingkai.123"
    10.140.0.4:7000> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:3
    cluster_size:3
    cluster_current_epoch:3
    cluster_my_epoch:1
    cluster_stats_messages_ping_sent:186
    cluster_stats_messages_pong_sent:98
    cluster_stats_messages_sent:284
    cluster_stats_messages_ping_received:98
    cluster_stats_messages_pong_received:97
    cluster_stats_messages_received:195
    10.140.0.4:7000> set authname dingkai
    -> Redirected to slot [14791] located at 10.140.0.4:7002
    OK
    10.140.0.4:7002> 
    10.140.0.4:7002> get authname
    "dingkai"
    10.140.0.4:7002> quit
  • 相关阅读:
    zookeeper配置
    redis前端启动和后台启动的区别
    SpringMVC接受JSON参数详解及常见错误总结我改
    SpringMVC @RequestBody接收Json对象字符串
    spring MVC 如何接收前台传入的JSON对象数组
    springMVC 接收json字符串参数
    mysql数据库user表host字段的%问题
    mysql.user表中Host为%的含义
    开店攻略: 零售店铺经营的三大原则
    开店攻略: 如何巧妙接近顾客
  • 原文地址:https://www.cnblogs.com/dingkailinux/p/8689341.html
Copyright © 2011-2022 走看看