• 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
  • 相关阅读:
    wamp本地能访问,但局域网不能访问的解决办法
    大家瞧不起的国内开源(转php100)
    获取系统闲置时间
    typeofconstructor 简单
    再读《如何掌控自己的时间和生活》 简单
    再读《拆掉思维的墙》 简单
    换行whitespace, wordwrap, wordbreak 简单
    css: tablelayout 简单
    转要用笔记本,请自配小桌 简单
    汇总图片、文本的垂直居中纯css实现 简单
  • 原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/16863606.html
Copyright © 2020-2023  润新知