OpenShift上部署Redis主从集群

时间:2021-06-21 03:01:03

客户有部署有状态服务的需求,单机部署模式相对简单,尝试一下集群部署。

关于Redis的master,slave 以及sentinal的架构和作用不提,有兴趣可以参考之前的博客

https://www.cnblogs.com/ericnie/p/7203950.html

github上参考的文章不少,但很多都需要基于连接互联网进行构建,同时也创建不少的buildconfig,研究了一下,还需要在本地部署一个git.

立刻觉得把问题搞复杂了。所以本文主要以简化为主,说明主要核心步骤,当然也掉到坑里浪费了些时间,不失为一种学习过程吧。

github上参考链接

https://github.com/mjudeikis/redis-openshift

 

1.构建镜像

先clone到本地

git clone https://github.com/mjudeikis/redis-openshift

目录结构比较清晰明了,我喜欢

[root@master ~]# tree redis-openshift
redis-openshift
├── image
│   ├── Dockerfile
│   ├── Dockerfile.1
│   ├── epel-7.repo
│   ├── redis-master.conf
│   ├── redis-openshift.tar
│   ├── redis-slave.conf
│   └── run.sh
├── list.yaml
├── openshift
│   ├── build.yaml
│   ├── is-base.yaml
│   ├── is-output.yaml
│   ├── redis-master-dc.yaml
│   ├── redis-master-service.yaml
│   ├── redis-sentinel-dc.yaml
│   ├── redis-sentinel-services.yaml
│   └── redis.yaml
└── README.md

对了,这里我也根据我的环境修改了Dockerfile,主要是yum源的问题

先下载一个放到目录下

http://mirrors.aliyun.com/repo/epel-7.repo,

Dockerfile

FROM rhel7

#RUN yum install epel-release -y
COPY epel-7.repo  /etc/yum.repos.d/epel.repo

RUN yum install redis hostname -y ; yum clean all

COPY redis-master.conf /redis-master/redis.conf
COPY redis-slave.conf /redis-slave/redis.conf
RUN mkdir -p /redis-sentinel ; chmod -R 777 /redis-sentinel /redis-slave
COPY run.sh /run.sh

CMD [ "/run.sh" ]

ENTRYPOINT [ "bash", "-c" ]

我修改了run.sh文件,最核心的原因是启动slave的时候无法获取master的地址,核心语句是

  while true; do
    master=$(redis-cli -h ${REDIS_SENTINEL_SERVICE_HOST} -p ${REDIS_SENTINEL_SERVICE_PORT} --csv SENTINEL get-master-addr-by-name mymaster | tr ',' ' ' | cut -d' ' -f1)
    echo " ***** ${master}"

在启动sentinel服务的时候,还能获取到,不知道为什么相同的语句在启动slave的时候不管用了,折腾半天,发现环境变量里面有这个值,直接修改成

master=${REDIS_MASTER_SERVICE_HOST}

oc new-project建立一个项目,然后

docker build -t  registry.example.com/openshift/redis-openshift:1.0 .

docker push  registry.example.com/openshift/redis-openshift:1.0

oc import-image redis-openshift:latest --from=registry.example.com/openshift/redis-openshift:1.0  --insecure --confirm

这里必须表扬一下openshift的了,因为在调试过程中我的run.sh改来改去,每次改动需要build镜像,搞完后,直接运行上面三条,就把镜像刷新了

而Openshift的dc的trigger功能发挥作用,每次发现镜像更新后就自动更新,发布新应用,减少大量时间,感觉非常不错!

 

2.构建一系列的dc和service

修改openshift下的配置文件,确保镜像地址无误。

oc create -f openshift/redis-master-dc.yaml
oc create -f openshift/redis-master-service.yaml

oc create -f openshift/redis-sentinel-dc.yaml
oc create -f openshift/redis-sentinel-service.yaml

oc create -f openshift/redis-dc.yaml

会建立一个master,3个sentinel和3个slave,如图

OpenShift上部署Redis主从集群

 进去逐个检查日志,确保成功启动

运行下面命令,查看集群信息。 

redis-cli -h redis-master  info Replication

OpenShift上部署Redis主从集群

 构建成功,可以愉快的使用了。