前几天收到需求, 需要做一个Redis的集群, 让主从节点分布在两个机房中, 来保证当一个机房停电后, 数据库依然可用. 这里记录一下搭建过程. 我这里是搭建了一个15个master个15个slaver的集群. Redis5.0后提供一种更加简单的方式去建立集群.(redis cluster 至少需要三个主节点三个从节点)
安装环境 :
CentOS7
docker version 19.03.9
docker pull redis
默认是下载最新版本的镜像, 可以用docker pull redis:tag 方式拉取指定版本.
docker network create redis-net
以一台机器上的一个节点进行演示, 其他节点操作相同, 只是需要修改对应的端口.
mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
vi redis-cluster.tmpl
#内容如下
port ${
PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
# 服务器IP, 自行填写
cluster-announce-ip xx.xx.xx.xx
cluster-announce-port ${
PORT}
# 集群节点间通信端口, 与redis端口的偏移量必须是10000
cluster-announce-bus-port 1${
PORT}
appendonly yes
for port in `seq 11025 11030`; do \
mkdir -p ./${
port}/conf \
&& PORT=${
port} envsubst < ./redis-cluster.tmpl > ./${
port}/conf/redis.conf \
&& mkdir -p ./${
port}/data; \
done
此时redis-cluster目录文件结构如下:
进入其中一个目录 11025:
进入 conf , 修改redis.conf文件
需要修改cluster-announce-bus-port 21025
这一行, 使其与redis端口11025的偏移量是10000.
其他节点操作相同, 注意修改端口.
docker run -d -ti -p 11025:11025 -p 21025:21025 \
-v /usr/local/redis-cluster/11025/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/redis-cluster/11025/data:/data \
--restart always --name redis-11025 --net redis-net \
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
docker exec -it redis-11025 bash
# 执行如下命令
/usr/local/bin/redis-cli --cluster create \
ip:10025 \
ip:10026 \
ip:10027 \
ip:11025 \
ip:11026 \
ip:11027 \
ip:12025 \
ip:12026 \
ip:12027 \
ip:46025 \
ip:46026 \
ip:46027 \
ip:47025 \
ip:47026 \
ip:47027 \
ip:10028 \
ip:10029 \
ip:10030 \
ip:11028 \
ip:11029 \
ip:11030 \
ip:12028 \
ip:12029 \
ip:12030 \
ip:46028 \
ip:46029 \
ip:46030 \
ip:47028 \
ip:47029 \
ip:47030 \
--cluster-replicas 1
其中 ip为服务器ip, --cluster-replicas 1 代表主从节点平均分配, 即15个主节点,15个从节点.至此redis集群搭建完毕.
参考文档