背景

其实文件搭建和集群搭建没有任何区别
这次用先用容器搭建出来,然后测试一下性能
想着再使用本地部署的方式搭建一下.
两项验证容器和基于文件的搭建的性能差异
部分资料来源:
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的过程以及简单性能测试的更多相关文章

  1. 基于人人框架--本地项目部署流程(前后端+IIS上传功能)

    基于人人框架--本地项目部署流程(前后端+IIS上传功能) 一.环境要求 JAVA环境 JDK:1.8 IIS 本地电脑必须要有IIS服务 MySQL 数据库采用MySQL数据库,安装版本为 5.7. ...

  2. 部署Redis Cluster 6.0 集群并开启密码认证 和 Redis-cluster-proxy负载

    部署Redis Cluster集群并开启密码认证 如果只想简单的搭建Redis Cluster,不需要设置密码和公网访问,可以参考官方文档. 节点介绍 Cluster模式推荐最少有6个节点,本次实验搭 ...

  3. K8S部署Redis Cluster集群

    kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis 介绍 • Redis代表REmote DI ...

  4. K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

    一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...

  5. 在 K8S 中快速部署 Redis Cluster & Redisinsight

    Redis Cluster 部署 使用 Bitnami helm chart 在 K8S redis 命名空间中一键部署 Redis cluster . helm repo add bitnami h ...

  6. Android Studio上手,基于VideoView的本地文件及流媒体播放器

    既然是第一个Android程序.少不了要Hello World. 1. 新建安卓project watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm0wNTE ...

  7. 如何用docker部署redis cluster

    前言 由于本人是个docker控,不喜欢安装各种环境,而且安装redis-trib也有点繁琐,索性用docker来做redis cluster. 本文用的是伪集群,真正的集群放到不同的机器即可.端口是 ...

  8. 手把手教你部署 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 ...

  9. 最适合新手的Redis Cluster搭建过程

    好记性不如烂笔头,记录分片高可用Redis Cluster的搭建过程 Redis集群演进过程 Redis单节点 主从复制: 复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 故 ...

  10. 基于Windows下使用Docker 部署Redis

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 1 去官网下载指定的版本 https:/ ...

随机推荐

  1. 游戏“外挂”?—— AI生成游戏最强攻略

    作为一名快乐的肥宅,玩游戏是居家必备,无论是王者荣耀.吃鸡.原神这些大热游戏,还是跳一跳.合成大西瓜.2048.这些风靡一时得小游戏,咱都有涉及.但是为了成为一个"头号玩家",我总 ...

  2. 差点错过!火山引擎VeDI帮这家企业成功挖掘200余条商机

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 与个体消费市场临时性需求大.决策参与人少等情况不同,企业消费市场往往因为长线需求复杂.商品/服务的价格高.参与决策 ...

  3. Python 太难懂?火山引擎数智平台这款产品可以了解一下!

      更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 「自学 Python?一般人我还是劝你算了吧!」 在国内知识分享平台「知乎」上,这一吐槽话题获得了超过 260 ...

  4. 无法获得数据库 'model' 上的排他锁。请稍后重试该操作

    标题: Microsoft SQL Server Management Studio 数据库 "XXXX" 的 创建 失败. (Microsoft.SqlServer.Smo) 有 ...

  5. Intellij Java JNI 调用 C++

    也可以用 JNA,但性能没有 JNI 好.JNA的Demo没有做,可以参考(https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=autoN ...

  6. 哈佛大学《CS50 Python人工智能入门》公开课 (2020)

    课程介绍 本课程探讨现代人工智能基础上的概念和算法,深入探讨游戏引擎.手写识别和机器翻译等技术的思想.通过实践项目,学生在将图形搜索算法.分类.优化.强化学习以及其他人工智能和机器学习的主题融入到他们 ...

  7. 【Django drf】认证类 权限类 频率类 过滤类 排序类 分页类

    目录 认证类 前期准备 自定义认证类 配置认证类 全局配置 局部禁用 认证组件使用步骤 基于类中方法的认证(了解) 权限类 前期准备 重写has_permission() 添加权限不足信息 权限组件使 ...

  8. 如何写个死循环,既不独占线程,又不阻塞UI线程?

    如果死循环独占线程,500个死循环要占用500个线程,如果死循环不独占线程,500个死循环,用200个线程也行,用20个线程也行,无非是执行的慢点 这样可以把同步操作改写为异步,并且节省线程占用 问个 ...

  9. 【Protoc】VS2019 (VS平台) 使用 CMake 编译安装、使用 Protobuf 库

    背景:工作中需要使用到 protobuf,看了一些教程,感觉都不是很适合,便自己总结一些 开发环境: Win 10 VS2019 CMake 3.24.2 Protobuf 3.21.12 (Prot ...

  10. Mac | HomeBrew 安装 & 配置 MySQL

    这个是我最新并且一直推崇的方法: 1.安装:brew install mysql 2.开启mysql:mysql.server start 3.使用mysql的配置脚本:/usr/local/opt/ ...