基于twemproxy的redis集群方案实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzxlfly/article/details/86091094

Twemproxy又名nutcraker,是由Twtter 开源,是一种代理分片机制的中间件(类似于mycat),主要用于管理 Redis Memcached 集群,可接受来自多个客户端的请求,按照路由规则,转发给后端cache节点,减少了客户端与cache 服务器直接连接的数量。

一、twemproxy特性

1、优点

  • 快速。
  • 轻量级。
  • 保持与服务器的长连接。
  • 减少了直接与缓存服务器连接的连接数量
  • 启用管道pipelining请求和响应。
  • 支持代理到多个服务器。
  • 同时支持多个服务器池。
  • 跨多个服务器自动共享数据。
  • 实现完整的memcached ascii和redis协议。
  • 通过yaml文件轻松配置服务器池。
  • 支持多种哈希模式,包括一致的哈希和分布。
  • 可以配置为在故障时禁用节点。
  • 可通过端口监控状态。
  • 可运行在Linux、*BSD、OS X和SmartOS(Solaris)

2、缺点

  • 不支持针对多个值的操作,比如取sets的子交并补等
  • 不支持Redis的事务操作
  • 错误消息、日志信息匮乏,排查问题困难
  • 无友好管理界面,运维操作困难
  • 无法平滑扩展,添加去除新节点必须重启服务

二、twemproxy安装

autoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,因此要安装autoconf。

1、检查autoconf

检查是否安装autoconf:rpm -qa |grep -i autoconf,看到:autoconf-2.63-5.1.el6.noarch

 若已安装版本低于2.64,卸载 rpm -e --nodeps autoconf-*

若没有安装,则去http://ftp.gnu.org/gnu/autoconf/下载目前最新版本autoconf-2.69.tar.gz安装

解压 tar -zxvf autoconf-2.69.tar.gz后进入根目录cd autoconf-2.69
配置:./configure  

编译:make  

安装:make install

确保每一步操作没有错误出现

2、twemproxy安装

https://github.com/twitter/twemproxy下载源码包,wget https://codeload.github.com/twitter/twemproxy/zip/master

解压:unzip master,

进入解压目录:cd twemproxy-master

生成源码包 :autoreconf -fvi

配置 :./configure --prefix=/usr/local/twemproxy

编译 :make

安装 :make install

三、配置nutcracker

1、参数释义

  • listen: 监听服务器池的地址和端口或者是sock文件的绝对路劲 (如 /var/run/nutcracker.sock) 
  • client_connections: 允许从Redis客户端的获取的最大连接数。默认不限制,同样适用于操作系统强制的限制
  • hash: 哈希函数名. 取值如下
  • one_at_a_time
  • md5
  • crc16
  • crc32 (crc32 implementation compatible with libmemcached)
  • crc32a (correct crc32 implementation as per the spec)
  • fnv1_64
  • fnv1a_64
  • fnv1_32
  • fnv1a_32
  • hsieh
  • murmur
  • jenkins
  • hash_tag: 一个两个字符的字符串,指定用于散列的key部分。例如"{}" 或 "$$"。哈希标记允许将不同的密钥映射到同一个服务器,只要标记中的密钥部分相同
  • distribution: key的分发模式. 可能取值如下:
  • ketama
  • modula
  • random
  • timeout: 等待与服务器建立连接或从服务器接收响应的超时值(毫秒)。默认一直等待
  • backlog: tcp backlog参数。默认为512.
  • preconnect: 用于控制twemproxy在进程启动时是否应预连接到此池中的所有服务器。默认为false
  • redis: 制服务器池是否使用redis或memcached协议。默认为false。
  • redis_auth: 连接时对redis服务器进行身份验证.
  • redis_db: 池服务器上要使用的数据库编号。默认值为0。twemproxy将始终以db0的形式呈现给客户机
  • server_connections: 可以打开到每个服务器的最大连接数。默认最多打开1个服务器连接
  • auto_eject_hosts:用于当服务器连续请求失败超过限制次数时是否禁用该服务器。默认为false
  • server_retry_timeout: 当auto_eject_hosts为true时,在要禁用服务器上重试之前等待的超时值(毫秒)。默认为30000毫秒.
  • server_failure_limit: 当auto_eject_hosts为true时,连续请求失败超限次数,超过次数该redis节点被禁用。默认值为2。
  • servers: 服务器池的服务器地址、端口、权重.

2、配置nutcracker.yml

安装后会在/usr/local/twemproxy 生成 sbin  share,sbin下为nutcraker命令,share下为nutcraker.8命令

需要把twemproxy-master下conf的配置nutcracker.yml复制到/usr/local/twemproxy下

编辑vim /usr/local/twemproxy/conf/nutcracker.yml配置文件如下

alpha:
  listen: 192.168.172.71:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 3000
  server_failure_limit: 3
  servers:
   - 192.168.172.72:6379:1
   - 192.168.172.73:6379:1
   - 192.168.172.74:6379:1

listen后为twmeproxy所在节点,servers为每个redis节点,distribution采用一致性哈希算法ketama

3、测试配置

配置完成了,测试下nutcracker.yml在语法 上是否有误

/usr/local/twemproxy/sbin/nutcracker -t /usr/local/twemproxy/conf/nutcracker.yml

正确显示如下:

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

四、启动nutcracker

进入到安装路径/usr/local/twemproxy下

启动命令:sbin/nutcracker -d -c conf/nutcracker.yml  -o logs/log.log -p ./twemproxy.pid

-d守护进程启动,-c指定配置文件,o指定日志文件路径,日志需要自己创建,-p指定pid保存路径

/usr/local/twemproxy/sbin/nutcracker --help命令详细参数如下

This is nutcracker-0.4.1

Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
                  [-c conf file] [-s stats port] [-a stats addr]
                  [-i stats interval] [-p pid file] [-m mbuf size]

Options:
  -h, --help             : this help
  -V, --version          : show version and exit
  -t, --test-conf        : test configuration for syntax errors and exit
  -d, --daemonize        : run as a daemon
  -D, --describe-stats   : print stats description and exit
  -v, --verbose=N        : set logging level (default: 5, min: 0, max: 11)
  -o, --output=S         : set logging file (default: stderr)
  -c, --conf-file=S      : set configuration file (default: conf/nutcracker.yml)
  -s, --stats-port=N     : set stats monitoring port (default: 22222)
  -a, --stats-addr=S     : set stats monitoring ip (default: 0.0.0.0)
  -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
  -p, --pid-file=S       : set pid file (default: off)
  -m, --mbuf-size=N      : set size of mbuf chunk in bytes (default: 16384 bytes)

参考:https://github.com/twitter/twemproxy

猜你喜欢

转载自blog.csdn.net/lzxlfly/article/details/86091094