您的位置:首页 > 运维架构 > Docker

使用docker搭建redis集群(两种方式)

2020-05-07 04:21 701 查看

文章目录

前言

前面我已经完成了对于Mysql数据库集群的搭建,这里来完成对Redis数据库集群的搭建。这里就提供两种关于redis集群的搭建:

  1. 在docker中使用端口映射的技术,何为端口映射,就是说当我们建立完成redis集群以后,在使用RDM(Redis客户端)访问时候访问地址类似于
    172.18.0.1:6379
    172.18.0.2:6379
    172.18.0.3:6379
    ,就是说我们在访问时候端口还是6379,因为docker将内部的reids端口都映射到同一个端口进行访问处理。
  2. 第二种就是使用到主机的ip地址然后分配端口号,这个就拿阿里云linux服务器来举例子,可以使用自己云服务器的公网IP地址,配置上不同的端口号,这个时候可能就需要进行安全组配置的端口开放(自己的云主机的运行的小伙伴应该也都知道如何配置)具体讲到会具体讲解。就例如访问为为
    121.199.2.34:9001
    ,
    121.199.2.34:9002
    等。

第一种:端口映射

  1. 我们可以使用到
    docker search redis
    来查询与redis相关联的镜像文件,使用 docker pull 拉取下来,但是这个时候就是最为原始的redis配置,我们在进行到配置的时候就可能会出现问题,所以这里我们输入这条命令:
docker pull yyyyttttwwww/redis
// 拉取镜像文件
docker tag yyyyttttwwww/redis redis-1
// 更改名字,后续操作会简单一些。
  1. 在完成了对镜像的拉取和更换名字以后,像之前在搭建MySql数据库集群一样,定义一个网络。
docker network create --subnet=172.19.0.0/16 net2
  1. 在完成了对网络的创建以后,就可以开始对redis容器的创建,这里创建6个redis容器,6个容器一主一丛,三个主服务器连接在一起,才能够构成一个redis数据库集群。命令如下:
    因为上面我们定义了172.19.0.* 网段,所以这里将集群搭建在特殊的网段内部。
docker run -it -d --restart=always --name r1 -p 5001:6379 --net=net2 --ip 172.19.0.2 redis bash
docker run -it -d --restart=always --name r2 -p 5002:6379 --net=net2 --ip 172.19.0.3 redis bash
docker run -it -d --restart=always --name r3 -p 5003:6379 --net=net2 --ip 172.19.0.4 redis bash
docker run -it -d --restart=always --name r4 -p 5004:6379 --net=net2 --ip 172.19.0.5 redis bash
docker run -it -d --restart=always --name r5 -p 5005:6379 --net=net2 --ip 172.19.0.6 redis bash
docker run -it -d --restart=always --name r6 -p 5006:6379 --net=net2 --ip 172.19.0.7 redis bash
  1. 在完成了对网段的创建开始,就可以开始对配置文件进行配置,首先我们需要知道有哪些地方需要进行一个具体的配置:
daemonize yes    # 表示以后台的方式进行运行 不然就会出现下图所示,就不能够进行其他命令的配置
cluster-enabled yes    # 表示开启集群,默认是关闭的
cluster-config-file nodes.conf    # 表示集群的配置文件名称
cluter-node-timeout 15000    # 表示集群之间的超时时间,若是在这个时间段之内没有收到回复,表示节点出现了问题。
appendonly yes    # redis的持久化有两种RDB与AOF,具体的可以去搜索,这里开启aof 性能更加高,出现问题数据丢失更加少(只会丢失一秒种的数据)

不进入后台模式:

5. 完成了配置文件(需要我们进入到每一个容器内都进行如下的更改)

#进入r1节点
docker exec -it r1 bash
vi /usr/redis/redis.conf
cd .. // 进入到 src目录。.. 表示父级目录
./redis-server ../redis.conf // 开启服务,以哪一个配置文件进行开启。
#进入r2节点
docker exec -it r2 bash
vi /usr/redis/redis.conf
cd ..
./redis-server ../redis.conf
#进入r3节点
docker exec -it r3 bash
vi /usr/redis/redis.conf
cd ..
./redis-server ../redis.conf
#进入r4节点
docker exec -it r4 bash
vi /usr/redis/redis.conf
cd ..
./redis-server ../redis.conf
#进入r5节点
docker exec -it r5 bash
vi /usr/redis/redis.conf
cd ..
./redis-server ../redis.conf
#进入r6节点
docker exec -it r6 bash
vi /usr/redis/redis.conf
cd ..
./redis-server ../redis.conf
  1. 安装创建cluster的工具(这里是版本较低的情况下)
// 这个时候就启动成功,可以使用客户端工具进行访问。
cd /usr/redis/src
mkdir -p ../cluster
cp redis-trib.rb ../cluster/
cd ../cluster
#创建Cluster集群
./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379

第二种:端口直接访问

对于第一种的创建方式,同时映射到同一个端口,以虚拟ip的方式来进行集群的搭建。第二种就是以我们的主机ip地址进行搭建,这里以我的阿里云主机进行测试(阿里云的linux云主机真香)。
首先需要我们完成对端口的开放:

设置入方向端口:我们这里设置9001-9006。

  1. 拉取redis镜像:
docker pull redis
  1. 创建redis容器:
cd /usr/local/src && mkdir redis-cluster && cd ./redis-cluster && touch redis-cluster.conf
  1. 对redis的配置文件进行配置:
    进入命令(注意上级目录): vi redis-cluster.conf
port ${PORT}
cluster-enabled yes
protected-mode no
cluster-config-file nodes.conf
cluster-node-timeout 5000
#对外ip
cluster-announce-ip [ip]
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
  1. 自行定义网段,用于节点之间的通信:
    表示创建一个名为redis-net的网络供集群使用
docker network create redis-net
  1. 进入到对应的目录下,并生成配置文件信息:
cd /usr/local/src/redis-cluster
// 表示进入到目录下
// 注意下方的9001-9006 要和自己开放的端口保持一致。
for port in `seq 9001 9006`; do
mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.conf > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
done

可以在当前目录下使用 ls查看

  1. 通过以上创建的配置文件,使用redis镜像创建对应的6个redis容器:
for port in `seq 9001 9006`; do
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/src/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/src/redis-cluster/${port}/data:/data  --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
done
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200430210713119.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDAxNTA0Mw==,size_16,color_FFFFFF,t_70)
  1. 进入到任意一个容器的内部,执行创建集群的命令,搭建集群:
    IP: 填写自己的主机地址。
docker exec -it redis-9001 bash
redis-cli --cluster create ip:9001 ip:9002 ip:9003 ip:9004 ip:9005 ip:9006 --cluster-replicas 1

  1. 进入到集群的内部查看对应的信息。
redis-cli -h 121.199.2.XX -p 9001
cluster nodes
// 就可以开始对应的测试

后记

以上就是搭建redis集群的两种方式,很多还是学习大家的,自己也进行测试,成功之后才发出来供大家学习,有什么不得当或是有问题的地方还希望大家能够指出来。

Maycope 原创文章 113获赞 163访问量 2万+ 关注 私信
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: