OpenEuler2203 基于容器和本地文件部署Redis Cluster的过程以及简单性能测试
背景
其实文件搭建和集群搭建没有任何区别
这次用先用容器搭建出来,然后测试一下性能
想着再使用本地部署的方式搭建一下.
两项验证容器和基于文件的搭建的性能差异
部分资料来源:
https://blog.csdn.net/weixin_54441446/article/details/124772542
感谢原作者.
我这边进行了简单的修改.
介质准备
拉取镜像.
我这边从阿里云上面拉取完 push到了私有的镜像库
OpenEuler上面的安装过程为:
yum install docker -y
systemctl enable docker
systemctl restart docker
拉取镜像
docker pull harbor.gscloud.online/gscloud/redis:7.0.5
配置文件准备
Edit From csdn
在每台机器上面创建目录
mkdir -p /redis_cluster_docker
cat >/redis_cluster_docker/redis_cluster.template <<EOF
port \${PORT}
requirepass Testxxxxxxxx
masterauth Testxxxxxxxx
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip `ip addr |grep inet |grep ens192 |awk '{print $2}' |awk -F "/" '{print $1}'`
cluster-announce-port \${PORT}
cluster-announce-bus-port 1\${PORT}
EOF
配置文件说明
EOF 指定文件开始结尾
> 指定全新创建文件
`` 中间进行命令替换, 其中获取ens192 网卡的地址.
\$ 进行转义, 避免变量丢失.
配置文件说明
Study From csdn
port:节点端口;
reqirepass:添加访问认证;
masterauth:如果主节点开启了访问认证,从节点访问主节点需要认证;
protected-mode:保护模式,默认值yes,即开启。
开启保护模式以后 ,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
daemonize:是否以守护线程的方式启动(后台启动),默认no;
appendonly:是否开启AOF持久化模式,默认no;
cluster-enabled:是否开启集群模式,默认no;
cluster-config-file:集群节点信息文件;
cluster-node-timeout:集群节点连接超时时间;
cluster-announce-ip:集群节点IP,填写宿主机的IP;
cluster-announce-port:集群节点映射端口;
cluster-announce-bus-port:集群节点总线端口。
配置文件说明
Study From csdn
每个Redis集群节点需要打开两个TCP连接。
端口6379提供给客户端连接,外加上一个端口16379,
记起来也比较容易,在6379的基础上加10000
端口16379提供给集群总线使用,总线用来集群节点间通信,
使用的是二进制协议。集群总线的作用:失败检测、配置升级、故障转移授权等。
客户端只能连接6379端口,不能连接端口16379。
防火墙需要确保打开这两个端口,否则集群节点之间不能通信。
命令端口和总线端口之间总是相差10000 。
修改配置文件
- 注意我的想法是在两台服务器上面创建六主六从的测试集群.
- 与原作者的文档不太一样.
- 两台服务器上面可以一模一样的处理.
cd /redis_cluster_docker
for port in `seq 7001 7006`; do \
mkdir -p ${port}/conf \
&& PORT=${port} envsubst < redis_cluster.template > ${port}/conf/redis.conf \
&& mkdir -p ${port}/data; \
done
创建容器
- 注意创建完成之后可以使用 docker ps 进行检查
for port in $(seq 7001 7006); do \
docker run -di --restart always --name redis-${port} --net host \
-v /redis_cluster_docker/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /redis_cluster_docker/${port}/data:/data \
harbor.gscloud.online/gscloud/redis:7.0.5 redis-server /usr/local/etc/redis/redis.conf; \
done
创建集群
- 需要在任一节点执行如下命令
- 注意测试最好是关闭防火墙.
docker exec -it redis-7001 /bin/bash
执行命令
redis-cli -a Testxxxxxxxx --cluster create \
10.110.139.189:7001 10.110.139.189:7002 10.110.139.189:7003 \
10.110.139.189:7004 10.110.139.189:7005 10.110.139.189:7006 \
10.110.139.190:7001 10.110.139.190:7002 10.110.139.190:7003 \
10.110.139.190:7004 10.110.139.190:7005 10.110.139.190:7006 \
--cluster-replicas 1
验证是否可以登录成功
redis-cli -a Testxxxxxxxx -c -p 7001
文件系统创建配置文件
- 注意文件系统必须使用 daemonize yes的参数不然比较麻烦.
- 容器运行时必须daemonize off 才可以.
mkdir -p /redis_cluster_file
cat >/redis_cluster_file/redis_cluster.template <<EOF
port \${PORT}
requirepass Testxxxxxxxx
masterauth Testxxxxxxxx
protected-mode no
daemonize yes
appendonly yes
dir /redis_cluster_file/\${PORT}/data/
cluster-enabled yes
cluster-config-file /redis_cluster_file/\${PORT}/conf/nodes.conf
cluster-node-timeout 15000
cluster-announce-ip `ip addr |grep inet |grep ens192 |awk '{print $2}' |awk -F "/" '{print $1}'`
cluster-announce-port \${PORT}
cluster-announce-bus-port 1\${PORT}
EOF
文件系统处理
- 注意为了同时可以使用, 建议端口号进行区分.
- 文件系统使用 8001 到 8006
cd /redis_cluster_file
for port in `seq 8001 8006`; do \
mkdir -p ${port}/conf \
&& PORT=${port} envsubst < redis_cluster.template > ${port}/conf/redis.conf \
&& mkdir -p ${port}/data; \
done
分发二进制的redis文件
将redis7.0.5 的 cli server 和benchmar
文件分发到操作系统的 /usr/bin 目录下面
chmod 777 /usr/bin/redis-*
编写启动脚本
for port in $(seq 8001 8006); do \
redis-server /redis_cluster_file/$port/conf/redis.conf; \
done
创建文件集群
redis-cli -a Testxxxxxxxx --cluster create \
10.110.139.189:8001 10.110.139.189:8002 10.110.139.189:8003 \
10.110.139.189:8004 10.110.139.189:8005 10.110.139.189:8006 \
10.110.139.190:8001 10.110.139.190:8002 10.110.139.190:8003 \
10.110.139.190:8004 10.110.139.190:8005 10.110.139.190:8006 \
--cluster-replicas 1
简单性能测试脚本
redis-benchmark -h 127.0.0.1 -p 8001 -a Testxxxxxxxx
redis-benchmark -h 127.0.0.1 -c 100 -p 8001 -a Testxxxxxxxx
redis-benchmark -h 127.0.0.1 -c 100 -p 8001 -a Testxxxxxxxx -d 1024
简单的测试结果为:
| 测试模式 | 部署模式 | ping | get | set | incr | mset |
|---|---|---|---|---|---|---|
| 测试用例1 | File | 130208 | 132450 | 131752 | 129701 | 101729 |
| 测试用例1 | Docker | 126582 | 128534 | 124069 | 132450 | 89047 |
| 测试用例2 | File | 126422 | 131061 | 129032 | 133689 | 98522 |
| 测试用例2 | Docker | 119189 | 125786 | 124069 | 134048 | 94876 |
| 测试用例3 | File | 132450 | 130039 | 132978 | 135869 | 87108 |
| 测试用例3 | Docker | 125628 | 125628 | 136986 | 120918 | 81366 |
OpenEuler2203 基于容器和本地文件部署Redis Cluster的过程以及简单性能测试的更多相关文章
- 基于人人框架--本地项目部署流程(前后端+IIS上传功能)
基于人人框架--本地项目部署流程(前后端+IIS上传功能) 一.环境要求 JAVA环境 JDK:1.8 IIS 本地电脑必须要有IIS服务 MySQL 数据库采用MySQL数据库,安装版本为 5.7. ...
- 部署Redis Cluster 6.0 集群并开启密码认证 和 Redis-cluster-proxy负载
部署Redis Cluster集群并开启密码认证 如果只想简单的搭建Redis Cluster,不需要设置密码和公网访问,可以参考官方文档. 节点介绍 Cluster模式推荐最少有6个节点,本次实验搭 ...
- K8S部署Redis Cluster集群
kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis 介绍 • Redis代表REmote DI ...
- K8S部署Redis Cluster集群(三主三从模式) - 部署笔记
一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...
- 在 K8S 中快速部署 Redis Cluster & Redisinsight
Redis Cluster 部署 使用 Bitnami helm chart 在 K8S redis 命名空间中一键部署 Redis cluster . helm repo add bitnami h ...
- Android Studio上手,基于VideoView的本地文件及流媒体播放器
既然是第一个Android程序.少不了要Hello World. 1. 新建安卓project watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm0wNTE ...
- 如何用docker部署redis cluster
前言 由于本人是个docker控,不喜欢安装各种环境,而且安装redis-trib也有点繁琐,索性用docker来做redis cluster. 本文用的是伪集群,真正的集群放到不同的机器即可.端口是 ...
- 手把手教你部署 Redis Cluster
环境准备 阿里云申请3台ECS,如下: 序号 内网IP OS A 172.16.190.78 CentOS 7.6 B 172.16.242.36 CentOS 7.6 C 172.16.190.77 ...
- 最适合新手的Redis Cluster搭建过程
好记性不如烂笔头,记录分片高可用Redis Cluster的搭建过程 Redis集群演进过程 Redis单节点 主从复制: 复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 故 ...
- 基于Windows下使用Docker 部署Redis
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 1 去官网下载指定的版本 https:/ ...
随机推荐
- 游戏“外挂”?—— AI生成游戏最强攻略
作为一名快乐的肥宅,玩游戏是居家必备,无论是王者荣耀.吃鸡.原神这些大热游戏,还是跳一跳.合成大西瓜.2048.这些风靡一时得小游戏,咱都有涉及.但是为了成为一个"头号玩家",我总 ...
- 差点错过!火山引擎VeDI帮这家企业成功挖掘200余条商机
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 与个体消费市场临时性需求大.决策参与人少等情况不同,企业消费市场往往因为长线需求复杂.商品/服务的价格高.参与决策 ...
- Python 太难懂?火山引擎数智平台这款产品可以了解一下!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 「自学 Python?一般人我还是劝你算了吧!」 在国内知识分享平台「知乎」上,这一吐槽话题获得了超过 260 ...
- 无法获得数据库 'model' 上的排他锁。请稍后重试该操作
标题: Microsoft SQL Server Management Studio 数据库 "XXXX" 的 创建 失败. (Microsoft.SqlServer.Smo) 有 ...
- Intellij Java JNI 调用 C++
也可以用 JNA,但性能没有 JNI 好.JNA的Demo没有做,可以参考(https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=autoN ...
- 哈佛大学《CS50 Python人工智能入门》公开课 (2020)
课程介绍 本课程探讨现代人工智能基础上的概念和算法,深入探讨游戏引擎.手写识别和机器翻译等技术的思想.通过实践项目,学生在将图形搜索算法.分类.优化.强化学习以及其他人工智能和机器学习的主题融入到他们 ...
- 【Django drf】认证类 权限类 频率类 过滤类 排序类 分页类
目录 认证类 前期准备 自定义认证类 配置认证类 全局配置 局部禁用 认证组件使用步骤 基于类中方法的认证(了解) 权限类 前期准备 重写has_permission() 添加权限不足信息 权限组件使 ...
- 如何写个死循环,既不独占线程,又不阻塞UI线程?
如果死循环独占线程,500个死循环要占用500个线程,如果死循环不独占线程,500个死循环,用200个线程也行,用20个线程也行,无非是执行的慢点 这样可以把同步操作改写为异步,并且节省线程占用 问个 ...
- 【Protoc】VS2019 (VS平台) 使用 CMake 编译安装、使用 Protobuf 库
背景:工作中需要使用到 protobuf,看了一些教程,感觉都不是很适合,便自己总结一些 开发环境: Win 10 VS2019 CMake 3.24.2 Protobuf 3.21.12 (Prot ...
- Mac | HomeBrew 安装 & 配置 MySQL
这个是我最新并且一直推崇的方法: 1.安装:brew install mysql 2.开启mysql:mysql.server start 3.使用mysql的配置脚本:/usr/local/opt/ ...