zoukankan      html  css  js  c++  java
  • Redis+Twemproxy分片存储实现

    from unsplash

    为提高Redis存储能力的提升,以及对外提供服务可用性提升,有时候有必要针对Redis进行集群式搭建,比较常用的有Twemproxy分片存储以及官方提供的Cluster方式。

    Redis实例安装

    Redis的安装这里不再多讲,相关步骤可从官网或其它渠道得到。为安装redis多实例,这里简单提前创建完相关文件夹。其中redis存放应用程序,redis1/redis2/redis3仅存储配置文件。

    1. [root@host1 redis-cluster]# ll

    2. 总用量 4

    3. drwxr-xr-x 6 root root 4096 8月  29 09:16 redis

    4. drwxr-xr-x 2 root root   24 8月  29 09:29 redis1

    5. drwxr-xr-x 2 root root   24 8月  29 09:25 redis2

    6. drwxr-xr-x 2 root root   24 8月  29 09:26 redis3

    各实例简单配置如下:

    redis1

    1. daemonize yes

    2. port 63791

    3. pidfile /var/run/redis1.pid

    redis2

    1. daemonize yes

    2. port 63792

    3. pidfile /var/run/redis2.pid

    redis3

    1. daemonize yes

    2. port 63793

    3. pidfile /var/run/redis3.pid

    分别启动,运行成功如下:

    1. [root@host1 redis-cluster]# ps -ef |grep redis

    2. root     110719      1  0 09:24 ?        00:00:00 redis/src/redis-server 127.0.0.1:63791

    3. root     110761      1  0 09:25 ?        00:00:00 redis/src/redis-server 127.0.0.1:63792

    4. root     110787      1  0 09:26 ?        00:00:00 redis/src/redis-server 127.0.0.1:63793

    5. root     110964  83212  0 09:30 pts/0    00:00:00 grep --color=auto redis

    Twemproxy应用

    以上三个实例各为独自运行,并没有启动集群存储、存储能力提升的功能。为实现redis的集群存储,本例结合早先出现的Twemproxy技术(由twitter开源)进行redis分片存储,而非在Twemproxy之后出现的官方提供的cluster功能。

    下面开启Twemproxy的应用,源码安装

    1. [root@host1 src]# git clone git@github.com:twitter/twemproxy.git

    2. [root@host1 src]# cd twemproxy

    3. [root@host1 twemproxy]# autoreconf -fvi

    4. [root@host1 twemproxy]# ./configure --enable-debug=full

    5. [root@host1 twemproxy]# make

    6. [root@host1 twemproxy]# src/nutcracker -h

    7. [root@host1 twemproxy]# src/nutcracker -h

    8. This is nutcracker-0.4.1

    9. Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]

    10.                  [-c conf file] [-s stats port] [-a stats addr]

    11.                  [-i stats interval] [-p pid file] [-m mbuf size]

    12. Options:

    13.  -h, --help             : this help

    14.  -V, --version          : show version and exit

    15.  -t, --test-conf        : test configuration for syntax errors and exit

    16.  -d, --daemonize        : run as a daemon

    17.  -D, --describe-stats   : print stats description and exit

    18.  -v, --verbose=N        : set logging level (default: 5, min: 0, max: 11)

    19.  -o, --output=S         : set logging file (default: stderr)

    20.  -c, --conf-file=S      : set configuration file (default: conf/nutcracker.yml)

    21.  -s, --stats-port=N     : set stats monitoring port (default: 22222)

    22.  -a, --stats-addr=S     : set stats monitoring ip (default: 0.0.0.0)

    23.  -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)

    24.  -p, --pid-file=S       : set pid file (default: off)

    25.  -m, --mbuf-size=N      : set size of mbuf chunk in bytes (default: 16384 bytes)

    安装完成后,配置nutcracker.yml,采用ketama(一致性hash算法)分片方式。其余还有Modula和Random两种方式。取模算法有明细的缺陷:在分片增加的情况下,数据的命中率直线下降。随机算法更是无法保证数据的均衡读写。

    1. redis-cluster:

    2.  listen: 0.0.0.0:22122

    3.  hash: fnv1a_64

    4.  distribution: ketama

    5.  timeout: 400

    6.  backlog: 65535

    7.  preconnect: true

    8.  redis: true

    9.  server_connections: 1

    10.  auto_eject_hosts: true

    11.  server_retry_timeout: 60000

    12.  server_failure_limit: 3

    13.  servers:

    14.    - 127.0.0.1:63791:1 redis01

    15.    - 127.0.0.1:63792:1 redis02

    16.    - 127.0.0.1:63793:1 redis03

    保存后,进行简单的测试,保证配置文件的正确性,若出现如下响应,证明配置文件运行正常。

    [root@host1 conf]# ../src/nutcracker -c nutcracker.yml -t

    nutcracker: configuration file 'nutcracker.yml' syntax is ok

    启动Twemproxy,此时的redis的分片集群搭建已完成。可以通过22122直接访问redis服务【twemproxy并不支持所有redis/memcache的命令,具体请参考https://github.com/twitter/twemproxy/blob/master/notes/redis.md】

    简单测试

    采用redis-cli客户端登陆22122端口,随机写入一批数据,再通过redis-cli连接具体的redis实例端口,如63791/63792/63793,查看数据是真实的存储在哪一个实例中。

    至此,我们已经搭建好一个分片存储的Redis集群应用,为前端提供强劲数据缓存服务

    扩展阅读:

    长按2秒,识别二维码,关注我。

    关注程序员成长

    成长的乐趣,在于分享!
    大龄程序员,一路走来,感慨颇多。闲暇时写写字,希望能给同行人一点帮助。
    本文版权归作者growithus和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Django之学员管理二
    Django之学员管理一
    Django自定义分页
    算法
    Python运维工程师
    uboot分析:SD卡镜像制作脚本分析
    嵌入式开发环境搭建:NFS客户端与服务器搭建
    嵌入式开发环境搭建:开发板tftp下载环境搭建
    uboot分析:uboot启动内核
    uboot分析:uboot的启动过程分析
  • 原文地址:https://www.cnblogs.com/growithus/p/11012156.html
Copyright © 2011-2022 走看看