超详细 高性能redis集群搭建 —— 第二篇(predixy搭建)

驿站:

1、超详细 高性能redis集群搭建 —— 第一篇(cluster搭建)

2、超详细 高性能redis集群搭建 —— 第二篇(predixy搭建)

3、超详细 高性能redis集群搭建 —— 第三篇(redis-cluster-proxy搭建)

 

第一篇我们讲到如何搭建redis集群,相信小伙伴们已经有了一定的认知,接下来我们讲一下如何利用代理更方便的操作redis、redis代理都有哪些、如何搭建代理。

redis主流代理有哪些:

目前市面上主流的代理包含:predixy、twemproxy、codis、redis-cerberus四款,这四款各有各的优势,我们逐个对比进行对比分析。

特性 predixy twemproxy codis redis-cerberus
高可用 Redis Sentinel或Redis Cluster 一致性哈希 Redis Sentinel Redis Cluster
可扩展 Key哈希分布或Redis Cluster Key哈希分布 Key哈希分布 Redis Cluster
开发语言 C++ C GO C++
多线程
事务 Redis Sentinel模式单Redis组下支持 不支持 不支持 不支持
BLPOP/BRPOP/BLPOPRPUSH 支持 不支持 不支持 支持
Pub/Sub 支持 不支持 不支持 支持
Script 支持load 不支持 不支持 不支持
Scan 支持 不支持 不支持 不支持
Select DB 支持 不支持 支持 Redis Cluster只有一个DB
Auth 支持定义多个密码,给予不同读写及管理权限和Key访问空间 不支持 同redis 不支持
读从节点 支持,可定义丰富规则读指定的从节点 不支持 支持,简单规则 支持,简单规则
多机房支持 支持,可定义丰富规则调度流量 不支持 有限支持 有限支持
统计信息 丰富 丰富 丰富 简单

通过上面的表格我们不难发现,predixy在功能上具有很多的优势,在性能上同样具有一定的优势,具体的性能对比可以参考文章 benchmark ,这里我们主要讲如何搭建predixy。


搭建代理:

Predixy可以在所有主流平台下编译,推荐在linux下使用,需要支持C++11的编译器,不支持的小伙伴需要安装gcc4.7以上的版本来支持C++11的编译器。

1.1、安装gcc(安装好的小伙伴请略过)

yum -y install gcc

yum -y install gcc-c++ 

gcc -v    #查看版本

一般来说安装完成之后是4.8的版本满足了我们的需求,如不满足进入地址选择合适的版本进行安装即可:http://mirror.hust.edu.cn/gnu/gcc/

1.2、安装Predixy代理

wget https://github.com/joyieldInc/predixy/archive/1.0.5.tar.gz    #下载源码

tar -zxvf 1.0.5.tar.gz    #解压包

cp predixy-1.0.5/ /usr/local/

cd /usr/local/predixy-1.0.5    #进入安装目录

make    #开始编译安装

到这里我们的Predixy代理就算安装完成了,安装好后目录结构是这样的。

超详细 高性能redis集群搭建 —— 第二篇(predixy搭建)_第1张图片

1.3、运行代理

#为了方便测试关闭防火墙
systemctl stop firewalld.service    #临时关闭

systemctl disable firewalld.service    #禁止开机启动

irewall-cmd --state    #查看防火墙状态

#启动代理
cd src/    #进入src目录找到predixy可执行文件

./predixy ../conf/predixy.conf    #启动代理

使用默认的配置文件predixy.conf, predixy将监听地址0.0.0.0:7617,后端的redis是Redis Cluster 127.0.0.1:6379。通常,127.0.0.1:6379并不是运行在Redis Clusterr模式下,因此Predixy将会有大量的错误日志输出。不过你依然可以用redis-cli连接predixy来试用一下:

redis-cli -p 7617 info

执行上条命令后可以看到predixy自身的一些信息,如果127.0.0.1:6379在运行的话,你可以试试其它redis命令,看看效果如何。

更多的启动命令行参数请看帮助:

./predixy -h

配置文件说明:

  • predixy.conf,整体配置文件,会引用下面的配置文件
  • cluster.conf,用于Redis Cluster时,配置后端redis信息
  • sentinel.conf,用于Redis Sentinel时,配置后端redis信息
  • auth.conf,代理中心访问权限控制配置,可以定义多个验证密码,可每个密码指定读、写、管理权限,以及定义可访问的健空间
  • dc.conf,多数据中心支持,可以定义读写分离规则,读流量权重分配
  • latency.conf, 延迟监控规则定义,可以指定需要监控的命令以及延时时间间隔
  • command.conf,自定义命令扩展,用于命令扩展,支持redis 的插件以及自定义数据处理函数等
  • standalone.conf,使用单击模式的redis配置

当打开配置文件后我们可以看到,不管是cluster.conf还是sentinel.conf或者standalone.conf都会有设置redis节点的地方,在这里设置的就是我们第一篇里搭建好的redis节点,第一篇还提到,创建集群时不可用127.0.0.1进行创建,原因是一般我们创建的集群跟代理不会在同一台机器上,如果搭建在同一台机器上同样也失去了高可用的意义,而搭建在其他机器上127.0.0.1是无法进行访问的。predixy会自动通过发现集群信息进行检查节点是否存活。

我们拿cluster.conf配置文件举例

vim cluster.conf    #打开cluster配置文件

超详细 高性能redis集群搭建 —— 第二篇(predixy搭建)_第2张图片

上图标记的地方就是节点地址,当然写一个也可以,predixy会自动发现其他节点。

配置参数说明:

  • Password: 指定连接redis实例默认的密码,不指定的情况下表示redis不需要密码
  • Databases: 指定redis db数量,不指定的情况下为1
  • Hash: 指定对key算哈希的方法,当前只支持atol和crc16
  • HashTag: 指定哈希标签,不指定的话为{}
  • Distribution: 指定分布key的方法,当前只支持modula和random
  • MasterReadPriority: 读写分离功能,从redis master节点执行读请求的优先级,为0则禁止读redis master,不指定的话为50
  • StaticSlaveReadPriority: 读写分离功能,从静态redis slave节点执行读请求的优先级,所谓静态节点,是指在本配置文件中显示列出的redis节点,不指定的话为0
  • DynamicSlaveReadPolicy: 功能见上,所谓动态节点是指在本配置文件中没有列出,但是通过redis sentinel动态发现的节点,不指定的话为0
  • RefreshInterval: predixy会周期性的请求redis sentinel以获取最新的集群信息,该参数以秒为单位指定刷新周期,不指定的话为1秒
  • ServerTimeout: 请求在predixy中最长的处理/等待时间,如果超过该时间redis还没有响应的话,那么predixy会关闭同redis的连接,并给客户端一个错误响应,对于blpop这种阻塞式命令,该选项不起作用,为0则禁止此功能,即如果redis不返回就一直等待,不指定的话为0
  • ServerFailureLimit: 一个redis实例出现多少次才错误以后将其标记为失效,不指定的话为10
  • ServerRetryTimeout: 一个redis实例失效后多久后去检查其是否恢复正常,不指定的话为1秒
  • KeepAlive: predixy与redis的连接tcp keepalive时间,为0则禁止此功能,不指定的话为0
  • Sentinels: 里面定义redis sentinel实例的地址
  • Group: 定义一个redis组,Group的名字应该和redis sentinel里面的名字一致,Group里可以显示列出redis的地址,列出的话就是上面提到的静态节点

到这里,我们的predixy代理就算搭建完成了,是不是很简单。最近呢随着redis6.0的推出,大家都备受关注,下一期我们讲一下redis6.0给我们带来了哪些改动,以及如何应用伴随6.0推出的redis-cluster-proxy。

你可能感兴趣的:(服务器运维,linux,redis,linux)