使用Docker在多台物理机上搭建Redis Cluster

背景介绍
由于最近在做一个缓存项目,这个项目中把Redis当作缓存,因为单机Redis性能不够的原因,就想要把单机Redis改成Redis Cluster。

至于Redis Cluster原理这块,本文只是用来介绍如何使用Docker来搭建Redis Cluster,就不会很具体很深入的去介绍了。

开始行动
首先需要的是在服务器上安装Docker,如果已经安装了Docker,可以选择跳过这一步。

安装Docker
在安装Docker之前,首先要确定服务器上是否之前有安装Docker,有的话需要卸载掉它们:

卸载Docker以及删除残留文件
Centos/REHL

sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
如果感觉还没有删除干净,可以使用命令查看一下:

yum list installed | grep docker
比如我的是这样:

[root@server-1 ~]# yum list installed|grep docker
docker-ce-cli.x86_64 1:19.03.8-3.el7 @docker-ce-stable
再使用命令去卸载它:

[root@server-1 ~]# yum -y remove docker-ce-cli.x86_64
Ubuntu/Debian

sudo apt-get remove docker docker-engine
或者:

sudo apt-get remove docker-ce docker-ce-cli
根据官方文档的提示,/var/lib/docker/目录下会保留原Docker的镜像、网络、存储卷等文件。如果需要全新安装Docker需删除/var/lib/docker/目录:

rm -fr /var/lib/docker/
使用脚本一键安装
为了方便和快速安装,这里使用的是Docker提供的一键安装脚本,来安装Docker:

curl -sSL https://get.docker.com/ | sh
如果你是非root用户安装,想要运行Docker建议执行下面的命令:

sudo usermod -aG docker your-user
脚本提示安装完后,为了确保Docker是正常可用的,使用Docker运行一个Hello-World,来测一下:

配置镜像加速器(中科大):

我使用的是阿里云的镜像加速,你们需要的话,可以去阿里云搜索 容器镜像服务 找到镜像加速那一列

CentOS

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Ubuntu/Debian

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
启动Hello World:

docker run hello-world
运行结果:

[root@server-1 ~]# docker run hello-world
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

以下内容省略…
如果运行正常,接下来就是开始搭建Redis Cluster了。

搭建Redis Cluster
这里我一共有三台服务器,用来搭建三主三从,它们分别如下:

192.168.11.176
192.168.11.161
192.168.11.164
这三台服务器用来搭建三主三从,也就是需要六个节点,给它们分配的端口如下:

192.168.11.176:7000
192.168.11.176:7001
192.168.11.161:7002
192.168.11.161:7003
192.168.11.164:7004
192.168.11.164:7005
为了方便管理和使用,Docker搭建Redis Cluster时,就需要将配置文件挂载;配置文件挂载目录/data/redis。

配置文件模板:

端口

port ${PORT}

关闭保护模式

protected-mode no

以集群的方式启动

cluster-enabled yes

集群节点配置文件

cluster-config-file nodes.conf

节点访问超时 毫秒数

cluster-node-timeout 5000

节点静态IP;Docker容器需要指定这个IP,比如192.168.11.176,否则节点无法被发现

cluster-announce-ip 192.168.XX.XX

节点映射端口

cluster-announce-port ${PORT}

节点通讯端口

cluster-announce-bus-port 1${PORT}

AOF持久化

appendonly yes

实例密码

requirepass 123456

主从密码

masterauth 123456

日志文件

logfile access.log
把模板放在/data/redis目录,文件名为redis-cluster.template。

修改好模板后,分别在不同服务器上生成相关的目录和文件。

生成目录和配置文件
由于我的三主三从,是在三台服务器上搭建的,一台服务器分别有一主和一从,所以需要命令来自动生成。

比如,我在192.168.11.176这台服务器上搭建的是7000、7001端口的Redis Cluster,所以命令指定的是7000到7001:

for port in seq 7000 7001; do
mkdir -p ./KaTeX parse error: Undefined control sequence: \ at position 13: {port}/conf \̲ ̲ && PORT={port} envsubst < ./redis-cluster.template> ./KaTeX parse error: Undefined control sequence: \ at position 24: …onf/redis.conf \̲ ̲ && mkdir -p .…{port}/data;
done
创建好192.168.11.176服务器上的配置文件后,再去创建192.168.11.161、192.168.11.164。它们对应的端口是7002 7003、7004 7005,所以上面的命令在不同服务器上执行时也要改的。

创建完后,记得查看一下配置文件的内容是否正确

创建Redis Cluster容器
在三台服务器上都执行完上面的命令后,再通过下面的命令创建容器:

拉取Redis镜像:

docker pull redis
创建容器:

for port in seq 7000 7001; do
docker run -d -ti -p p o r t : {port}: port:{port} -p 1 p o r t : 1 {port}:1 port:1{port}
-v /data/redis/KaTeX parse error: Undefined control sequence: \ at position 56: …dis/redis.conf \̲ ̲-v /data/redis/{port}/data:/data
–restart always --name redis-${port}
–sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
done
分别在不同的服务器上创建完容器,并启动后,接下来就是建立集群之间的关系了。

建立集群
想要建立集群之间的关系,首先进入一个容器(哪个都行,我当前进如的是redis-7000这个容器):

docker exec -it redis-7000 bash
进去之后,再执行创建集群的命令:

redis-cli -c -h 192.168.11.176 -p 7000 -a 123456
–cluster create 192.168.11.176:7000 192.168.11.176:7001
192.168.11.161:7002 192.168.11.161:7003 192.168.11.164:7004
192.168.11.164:7005 --cluster-replicas 1
执行之后,Redis Cluster会自动分配哪些Redis主,哪些Redis是从:

redis_cluster_01
redis_cluster_01

输入yes后,会提示我们已经建立成功了(如果建立不成功或者一直在join,建议检查一下容器之间能否通讯):

redis_cluster_02
redis_cluster_02

接下来之后只要测试一下,能否进行数据的存储即可:

root@05ca62be4abd:/data# redis-cli -h 192.168.11.176 -p 7000
192.168.11.176:7000> auth 123456
OK
192.168.11.176:7000> set mykey1 v1
OK
192.168.11.176:7000> set mykey2 v2
(error) MOVED 14119 192.168.11.164:7004
192.168.11.176:7000>
可以看到,我设置mykey1的时候是成功的,设置mykey2时会提示我,这个key的slot被分配到了192.168.11.164:7004这台Redis上,需要去这一台Redis才能进行设置。

这时只需要去192.168.11.164:7004这台服务器,执行设置命令即可:

root@pi-1:/data/redis# docker exec -it redis-7004 bash
rroot@ed351bd4f15c:/data# redis-cli -h 192.168.11.164 -p 7004
192.168.11.164:7004> auth 123456
OK
192.168.11.164:7004> set mykey2 v2
OK
192.168.11.164:7004>
当然,你不想麻烦的话,也可以在使用redis-cli连接服务器时,加上-c参数就不需要在不同的服务器上换来换去了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值