Redis一直以它的高性能,高可用,分布式的特性被大家选用,特别是在一些ToC的场景中被大家广泛使用,比如做缓存,分布式锁等等。
今天我们就来聊聊Redis的高可用的集群模式,并演练一下在集群模式下的它是怎么故障转移的。我会分多篇来介绍对应的内容,当前这篇是搭建Redis集群环境,先来张集群架构图熟悉一下。
一、环境搭建:
0x01:依赖环境:Linux+Redis
0x02:下载编译文件
$ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
$ tar xzf redis-6.2.6.tar.gz
$ cd redis-6.2.6/src
$ make
0x03:创建目录
$ mkdir -p /usr/local/redis/etc /usr/local/redis/data\
/usr/local/redis/bin /usr/local/redis/logs
0x04:把编译好的二进制文件复制到相应的目录中
$ cp redis-benchmark redis-check-aof\
redis-check-rdb redis-cli redis-sentinel\
redis-server redis-trib.rb /usr/local/redis/bin
0x05:设置客户端软链
$ ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli
0x06:创建集群脚本
$ cd /usr/local/redis/
$ touch cluster.sh
$ chmod +x cluster.sh
$ vim cluster.sh
添加如下内容:
#!/bin/bash
#set -x
REDIS_DIR=/usr/local/redis
REDIS_BIN=${REDIS_DIR}/bin/
# 配置目录
REDIS_ETC=${REDIS_DIR}/etc/
# 工作目录
REDIS_DATA=${REDIS_DIR}/data/
# 日志目录
REDIS_LOG=${REDIS_DIR}/logs/
# 服务端口
PORTS="7000 7001 7002 7003 7004 7005"
# 集群创建指令
TEMP="${REDIS_BIN}redis-cli --cluster create"
for port in ${PORTS}; do
CONF=${REDIS_ETC}${port}
# 创建配置目录与数据目录
if [ ! -d ${CONF} ]; then
mkdir -p ${CONF}
mkdir -p ${REDIS_DATA}${port}
fi
# 创建配置文件
if [ ! -e ${CONF}/redis.conf ]; then
touch ${CONF}/redis.conf
# 写入配置
cat >${CONF}/redis.conf<<EOF
port ${port}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
dir ${REDIS_DATA}${port}
loglevel notice
logfile "${REDIS_LOG}${port}.log"
EOF
fi
# 启动对应的服务
${REDIS_BIN}redis-server ${CONF}/redis.conf
# 集群指令
TEMP="${TEMP} 127.0.0.1:${port} "
done
TEMP="${TEMP} --cluster-replicas 1"
echo "请在终端中运行下面的指令,如果之前运行过请忽略:"
echo ${TEMP}
0x07:运行脚本并启动对应的服务
./cluster.sh
运行后你会看到这个
请在终端中运行下面的指令,如果之前运行过请忽略:
/usr/local/redis/bin/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
0x08: 查看Redis是否启动
$ ps x | grep redis
885207 ? Ssl 0:00 /usr/local/redis/bin/redis-server *:7000 [cluster]
885213 ? Ssl 0:00 /usr/local/redis/bin/redis-server *:7001 [cluster]
885227 ? Ssl 0:00 /usr/local/redis/bin/redis-server *:7002 [cluster]
885237 ? Ssl 0:00 /usr/local/redis/bin/redis-server *:7003 [cluster]
885247 ? Ssl 0:00 /usr/local/redis/bin/redis-server *:7004 [cluster]
885253 ? Ssl 0:00 /usr/local/redis/bin/redis-server *:7005 [cluster]
885873 pts/0 S+ 0:00 grep --color=auto redis
0x09:执行0x07中输出的指令来创建集群
$ /usr/local/redis/bin/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
看到这样的一句话,请一定输入:yes,回车执行
Can I set the above configuration? (type 'yes' to accept):yes
运行后看到如下内容说明集群创建成功:
[OK] All 16384 slots covered.
0x0A:用客户端连接到服务体验一下:
$ redis-cli -c -p 7000
redis 127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
redis 127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
redis 127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
redis 127.0.0.1:7002> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"
至此整个集群已运行起来了。
二、查看集群状态:
0x01: 查看状态
$ redis-cli -p 7000 cluster nodes
7e4983679f4733b7c57f5880d08b54f60da1b20e 127.0.0.1:7001@17001 master - 0 1636459919000 2 connected 5461-10922
e52cce0aba2fad9008b594afa1eb75a86fa7a617 127.0.0.1:7002@17002 master - 0 1636459920668 3 connected 10923-16383
78dcb2561f35b195890e8b9b6899b3748508d8e7 127.0.0.1:7004@17004 slave e52cce0aba2fad9008b594afa1eb75a86fa7a617 0 1636459920567 3 connected
280dc6d63a858fe93c85bb2de2d2f52d80090b22 127.0.0.1:7003@17003 slave 7e4983679f4733b7c57f5880d08b54f60da1b20e 0 1636459919565 2 connected
023fbcdc385841810a5056c148b89d88bd497c93 127.0.0.1:7000@17000 myself,master - 0 1636459919000 1 connected 0-5460
a6d284c75bbfc2c829596ff18a3fbbbc82dd9b7b 127.0.0.1:7005@17005 slave 023fbcdc385841810a5056c148b89d88bd497c93 0 1636459920000 1 connected
输出的内容可以清晰的看到对应的关系
master nodes
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
slave nodes 及对应的master node
127.0.0.1:7003 -> 127.0.0.1:7001
127.0.0.1:7004 -> 127.0.0.1:7002
127.0.0.1:7005 -> 127.0.0.1:7000
总结:集群的搭建已完成了,并可以清晰的看到对应的关系,最后再来放一下开始的图片,让大家更直观的认识。
后面我会增加一篇《聊聊Redis的集群模式- 故障转移》,对Redis的高可用有更清晰的认知。
喜欢的朋友请一键三连:点赞,在看,+分享
文章转载自码农半亩田,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。