Predixy的docker化

概述
当前已有一套redis cluster的集群,但是fs中的hiredis只能配置单实例redis。
AI了一下方案,可以使用redis的proxy组件来实现从hiredis到redis cluster的互通。
代码地址:https://github.com/joyieldInc/predixy
Predixy特性介绍:https://github.com/joyieldInc/predixy/blob/master/README_CN.md
环境
CentOS 7.9
下载
下载源码,使用1.0.5版本,足以满足我们的版本需求,如果要对接redis cluster7.0以上,需要更新的predixy版本。
git clone -b 1.0.5 https://github.com/joyieldInc/predixy.git predixy.1.0.5
dockerfile
dockerfile文件内容如下,dockerfile文件和源码目录“predixy.1.0.5”在同一目录下。
FROM centos:7
WORKDIR /root
ADD ./predixy.1.0.5 /root/predixy.1.0.5
COPY ./CentOS-Base.repo /etc/yum.repos.d/
COPY ./CentOS-SCLo-scl.repo /etc/yum.repos.d/
COPY ./CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/
COPY ./epel-7.repo /etc/yum.repos.d/
RUN cd /root/ \
&& yum -y update \
# && yum install -y devtoolset-9-gcc \
&& yum install -y gcc-c++ libstdc++-devel libstdc++-static \
&& yum install -y make \
&& cd /root/predixy.1.0.5/ \
&& make \
&& cp ./src/predixy /usr/local/bin/ \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& yum -y autoremove \
&& yum clean all \
&& rm -rf /var/cache/yum \
&& rm -rf /root/predixy.1.0.5 \
&& rm -rf /usr/share/icons /usr/share/themes/ /usr/share/doc /usr/share/man
VOLUME ["/usr/local/predixy/conf", "/usr/local/predixy/log"]
CMD /usr/local/bin/predixy /usr/local/predixy/conf/predixy.conf
运行命令,创建docker镜像。
sudo docker build --no-cache -t 10.55.55.136:5000/zr/centos.7-predixy.1.0.5-release:v1.1 .
配置
配置文件放在宿主机,方便修改,创建如下目录。
sudo mkdir -p /usr/local/predixy/conf
配置文件主要修改2个,predixy.conf和cluster.conf。
predixy.conf 主要配置如下。
Name Predixy136
Bind 10.55.55.136:7777
WorkerThreads 4
MaxMemory 0
ClientTimeout 0
Log /usr/local/predixy/log/predixy.log
LogRotate 1d
LogVerbSample 0
LogDebugSample 0
LogInfoSample 10000
LogNoticeSample 1
LogWarnSample 1
LogErrorSample 1
Include cluster.conf
Include latency.conf
cluster.conf 主要配置如下。
ClusterServerPool {
MasterReadPriority 60
StaticSlaveReadPriority 50
DynamicSlaveReadPriority 50
RefreshInterval 1
ServerTimeout 1
ServerFailureLimit 10
ServerRetryTimeout 1
KeepAlive 120
Servers {
+ 10.55.55.101:7000
+ 10.55.55.101:7001
+ 10.55.55.102:7000
+ 10.55.55.102:7001
+ 10.55.55.103:7000
+ 10.55.55.103:7001
}
}
启动
编写docker-compose.yml,启动docker容器。
docker-compose.yml内容如下。
services:
predixy:
image: 10.55.55.136:5000/zr/centos.7-predixy.1.0.5-release:v1.1
container_name: centos.7-predixy.1.0.5-1.1
volumes:
- /usr/local/predixy/conf:/usr/local/predixy/conf
- /usr/local/predixy/log:/usr/local/predixy/log
working_dir: /root
command: ["/usr/local/bin/predixy", "/usr/local/predixy/conf/predixy.conf"]
restart: unless-stopped
# privileged: true
network_mode: "host"
logging:
driver: "none"
ulimits:
nproc: 65535
nofile:
soft: 40000
hard: 40000
启动命令。
sudo docker-compose up -d
查看进程和端口,运行正常。
测试
在fs的api命令行界面查询。
freeswitch@as137> limit_usage hiredis default test2
0
2025-04-22 14:38:14.099856 [DEBUG] hiredis_profile.c:61 hiredis: waiting for [10.55.55.136, 7777]
2025-04-22 14:38:14.099856 [INFO] hiredis_profile.c:65 hiredis: attempting[10.55.55.136, 7777]
2025-04-22 14:38:14.099856 [DEBUG] hiredis_profile.c:68 hiredis: connection success[10.55.55.136, 7777]
2025-04-22 14:38:14.099856 [DEBUG] hiredis_profile.c:206 hiredis: get test2
2025-04-22 14:38:14.099856 [DEBUG] hiredis_profile.c:52 hiredis: release back to pool [10.55.55.136, 7777]
查看predixy的log日志。
2025-04-22 14:38:14.107827 N Handler.cpp:371 h 1 accept c 10.55.55.137:52856 34 assign to h 0
2025-04-22 14:38:14.107905 D Handler.cpp:511 h 0 c 10.55.55.137:52856 34 handle req 299 get test2
2025-04-22 14:38:14.107928 D ServerGroup.cpp:68 server group 8f75cec1c6ab2e4ab7dff125d5206a391c4ae620 for req 299 get server 10.55.55.102:7000
2025-04-22 14:38:14.107942 D ConnectConnection.cpp:71 h 0 s 10.55.55.102:7000 13 writev 1
2025-04-22 14:38:14.108427 D ConnectConnection.cpp:212 h 0 s 10.55.55.102:7000 13 create res 299 match req 299
2025-04-22 14:38:14.108462 D Handler.cpp:779 h 0 s 10.55.55.102:7000 13 req 299 get test2 res 299 Str
2025-04-22 14:38:14.108481 D AcceptConnection.cpp:78 h 0 c 10.55.55.137:52856 34 req 299 fill res 299
2025-04-22 14:38:14.108496 D AcceptConnection.cpp:97 h 0 c 10.55.55.137:52856 34 writev 1
总结
利用predixy作为代理,实现从hiredis到redis cluster的查询中转。
代理的性能和稳定性有待进一步测试确认。
空空如常
求真得真
Predixy的docker化的更多相关文章
- CI Weekly #9 | 揭秘阿里 Docker 化实践之路
2017年悄然而至,对 flow.ci 你有什么新的期待呢?新的一年,flow.ci会越来越强大好用,希望继续得到你的支持与反馈.最近,我们做了如下的「功能优化」与「问题修复」,看看有没有你想要的: ...
- Docker化运维方式讲解
应用迁移需求 应用运维需要考虑的一个重要问题就是迁移, 在不同机器.机房.环境间迁移.迁移的原因有很多, 比如硬件过保(硬件故障), 机房迁移, 应用扩缩容等. 应用迁移的核心需求是: 简单.迁移操作 ...
- 老司机实战Windows Server Docker:2 docker化现有iis应用的正确姿势
前言 上一篇老司机实战Windows Server Docker:1 初体验之各种填坑介绍了安装docker服务过程中的一些小坑.这一篇,我们来填一些稍大一些的坑:如何docker化一个现有的iis应 ...
- Docker化tomcat 并且使用maven热部署
今天没事干 就把自己的tomcat docker化并且使用maven实现热部署 特别记录一下~ 1.首先进行centos7的安装 就不在记录了 注意的是最好使用centos7 因为docker 依赖 ...
- DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路
2016 年1 月 23 日,北京史上气温最低的一天. 在下午 1 点半的时候,由 DaoCloud 赞助的 2016 年度首次 Docker Meetup 准时开始. 在这次Meetup中,我分享了 ...
- FastDfs集群docker化部署
初识分布式文件系统FastDFS- 1.分布式与集群的区别 区别:集群是个物理形态,分布式是个工作方式.只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道:一个程序或系统,只要运行 ...
- 从头认识一下docker-附带asp.net core程序的docker化部署
从头认识一下docker-附带asp.net core程序的docker化部署 简介 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是 ...
- docker化java web应用
一.简介 Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上.Docker的发展速度和火爆程度着实令人惊叹,一 ...
- 部门sonarque代码扫描测试服务器docker化
部门内部的服务器太多了,打算将对应的测试环境docker化. 转成docker后,以后不管是升级调研还是定制化开发测试都方便,就是事情太多,一直没有抽出身来做,今天处理下并把过程记录下来跟大家分享下. ...
- 一步步创建第一个Docker App —— 2. 创建 Docker化 主机
原文:https://docs.docker.com/engine/getstarted-voting-app/node-setup/ 部署voting app的第一步,是为集群节点(swarm no ...
随机推荐
- QSound、QSoundEffect播放WAV音频
QSound.QSoundEffect播放WAV音频 本文旨在介绍QSound.QSoundEffect的简单播放音频的方法以及对这两个类的一些基本介绍 文章目录 QSound.QSoundEffec ...
- Docker容器详解
[] 容器(Container)是一种轻量级的虚拟化技术,它通过操作系统级的虚拟化,将应用程序及其依赖环境打包在一起,确保应用程序可以在任何环境中一致运行.与虚拟机不同,容器共享宿主操作系统的内核,而 ...
- wordpress:nginx负载均衡+nignweb服务器+mysql数据库+nfs-lsync+rsync备份
目录 所有知识结合,注意正式环境慎用: mariadb服务器 NFS服务器配置 web服务器配置 Nginx负载均衡 backup备份服务器配置rsync NFS服务器安装lsync进行实时同步 所有 ...
- mysql-installer-community-8.0.19.0.msi 的自定义安装与卸载
一.双击运行安装包执行安装 1.选择Custom,该种方式可以设置安装位置,仅安装所需的组件,点击Next 2.选择需要的组件,点击Advanced Options 3.设置安装位置,点击OK 4.点 ...
- kvm内存优化--KSM
一.KSM(Kernel SamePage Merging) 1.KSM简介 KSM允许内核在多个进程(包括虚拟机)之间共享完全相同的内存页,KSM让内核扫描检查正在运行中的程序并且比较他们的内存,若 ...
- golang实现命令行程序的使用帮助
通过flag包我们可以很方便的实现命令行程序的参数标志, 接下来我们来看看如何实现命令行程序的使用帮助, 通常以参数标志-h或--help的形式来使用. 自动生成使用帮助 我们只需要声明其他参数标志, ...
- This APT has Super Cow Powers.
在Debian/Ubuntu上,apt包管理器内嵌着一个彩蛋. 如果你在命令行界面输入 apt help 在最后一行能找到This APT has Super Cow Powers. 说明该apt具有 ...
- chatops
ChatOps是什么? ChatOps, 简单地说,这是一种方法,允许团队以聊天室的方式来协作和管理其基础结构.代码和数据的许多方面.通过使用聊天机器人和脚本,团队可以执行命令.查询信息,并将知识分发 ...
- zk基础—5.Curator的使用与剖析
大纲 1.基于Curator进行基本的zk数据操作 2.基于Curator实现集群元数据管理 3.基于Curator实现HA主备自动切换 4.基于Curator实现Leader选举 5.基于Curat ...
- 一文速通Python并行计算:06 Python多线程编程-基于队列进行通信
一文速通 Python 并行计算:06 Python 多线程编程-基于队列进行通信 摘要: 队列是一种线性数据结构,支持先进先出(FIFO)操作,常用于解耦生产者和消费者.慢速生产-快速消费场景中,队 ...