docker实验--redis集群搭建

时间:2023-03-09 04:12:22
docker实验--redis集群搭建

背景介绍:

我经常在做一些小项目的时候,采用了Redis来做缓存,但是都是基于单节点的,一旦redis挂了,整个项目就挂了。于是乎,想到了多节点集群的方式来使用,就开始折腾着怎么去搭建这个集群。在网上参考了一些大佬的做法以后,发现使用的ruby脚本已经过时了,所以就基于他们的方法做了一定的更新,如果有误,欢迎批评指正。

环境准备:

centOS7,Docker,redis-cli

要点:

a.Redis集群至少需要3个节点(笔者认为最好是部署奇数个节点),因为投票容错机制要求超过一半的节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。具体宕机机制参考https://www.cnblogs.com/dadonggg/p/8628735.html

b.要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。在本次实验中,笔者将使用docker来启动多个redis实例。

具体步骤:

1.安装docker。

yum update -y && yum install docker

2.启动docker服务。

service docker start

3.拉取redis镜像。

docker pull redis

4.创建redis-cluster目录

cd /home
mkdir redis-cluster

5.下载并安装redis-cli(此过程如果报错,请检查是不是和ruby有关,尝试安装ruby。yum install ruby -y)

 cd redis-cluster
curl -O http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
cp src/redis-cli /usr/bin/

6.创建并启动redis容器(因为存在大量重复的操作,采取脚本创建)。

a.创建模板文件redis-cluster.tmpl,把以下内容粘贴到里面 把ip地址换成你自己主机的ip

touch redis-cluster.tmpl
 port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
cluster-announce-ip 主机IP地址
cluster-announce-port ${PORT}
cluster-announce-bus-port ${PORT}
appendonly yes

b.批量脚本ex01.sh,ex02.sh(方便后续重复搭建,也可以直接运行)。(第二个脚本里,如果是阿里云,要添加安全组,除了7000-7005端口,还要开放17000-17005端口,我使用的是腾讯云,于是就没开)。

touch ex01.sh
for port in
do
echo "port=$port"
mkdir -p ./$port/conf
PORT=$port envsubst < ./redis-cluster.tmpl > ./$port/conf/redis.conf
mkdir -p ./$port/data;
done
touch ex02.sh
 do
docker run -d -ti -p ${port}:${port} -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/redis-cluster/${port}/data:/data --restart always --name redis-${port} --sysctl net.core.somaxconn= redis redis-server /usr/local/etc/redis/redis.conf
done

7.所有事情准备完毕。

sh ex01.sh

docker实验--redis集群搭建

sh ex02.sh
docker ps -a

保持所有容器都在running状态。

8.使用redis客户端把集群转起来。把ip换成自己主机真实ip.

 redis-cli --cluster create ip: ip: ip: ip:7003 ip: ip: --cluster-replicas 

docker实验--redis集群搭建

使用如下命令进行验证:

redis-cli --cluster  info 节点ip:端口

docker实验--redis集群搭建

发现master节点是7000 7002 7001

slave节点是 7003 7004 7005

至此集群搭建成功。