Redis集群安装

文章介绍在三台主机上安装三主三从的Redis集群,安装步骤如下:

安装前准备:源码包安装redis需要部署gcc

yum install -y gcc

redis下载,7.0+版本redis支持通过主机名访问集群

wget https://download.redis.io/releases/redis-7.0.7.tar.gz

配置主机名:

hostnamectl set-hostname redis-node1

vim /etc/hosts

10.0.0.10 redis-node1
10.0.0.11 redis-node2
10.0.0.12 redis-node3

redis集群各节点安装,以redis01为例

mkdir -p /data/redis/redis01/{conf,log,data,run}

将redis.tar.gz在/data/目录下解压、编译安装

cd /data/; tar -xf redis*.tar.gz
cd redis-7.0.7/src
make
cd redis-7.0.7
make install PREFIX=/data/redis/redis01

将源码包中的redis.conf复制到安装路径下的conf目录下

cp redis-7.0.7/redis.conf /data/redis/redis01/conf/redis-node01.conf

其中的地址、端口、路径等信息根据实际进行修改

vim /data/redis/redis01/conf/redis-node01.conf

# 本机地址
bind 10.0.0.10
# 端口
port 17001
# pid存储目录
pidfile /data/redis/redis01/run/redis_01.pid
# 日志存储目录
logfile /data/redis/redis01/log/redis_01.log
# 数据存储目录(目录要提前创建好)
dir /data/redis/redis01/data/
# 开启集群
cluster-enabled yes
# 集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不同
cluster-config-file nodes-01.conf
# 集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
cluster-node-timeout 15000
# 开启持久化
appendonly yes
# 守护进程
daemonize yes
# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。
protected-mode no
# 以下为redis7新的配置项
cluster-preferred-endpoint-type hostname
cluster-announce-hostname redis-node1
 
# 设置最大内存限制
maxmemory 24gb
# 数据清理机制
maxmemory-policy volatile-lru
# 鉴权密码配置,$password配置为真实密码
masterauth "$password"
requirepass "$password"
# 数据备份
save 3600 1 300 100 60 10000

将编译好的安装包拷贝到其他节点

cp -ar /data/redis/redis01 /data/redis/redis04
scp -r /data/redis 10.0.0.11:/data
scp -r /data/redis 10.0.0.12:/data

登录redis-node2节点

cd /data/redis
mv redis01 redis02
mv redis04 redis05

登录redis-node3节点

cd /data/redis
mv redis01 redis03
mv redis04 redis06

各个节点根据实际进行修改配置文件

启动各个节点

/data/redis/redis01/bin/redis-server /data/redis/redis01/conf/redis.conf;
/data/redis/redis04/bin/redis-server /data/redis/redis04/conf/redis.conf;

/data/redis/redis02/bin/redis-server /data/redis/redis02/conf/redis.conf;
/data/redis/redis05/bin/redis-server /data/redis/redis05/conf/redis.conf;

/data/redis/redis03/bin/redis-server /data/redis/redis03/conf/redis.conf;
/data/redis/redis06/bin/redis-server /data/redis/redis06/conf/redis.conf;

设置集群模式

/data/redis/redis01/bin/redis-cli --cluster create 10.0.0.10:17001 10.0.0.11:17001 10.0.0.12:17001 10.0.0.10:17002 10.0.0.11:17002 10.0.0.12:17002 --cluster-replicas 1 -a ‘pwd’

查看集群状态

/data/redis/redis01/bin/redis-cli -c -h 10.0.0.10 -p 17001 -a ‘pwd’ cluster info
在这里插入图片描述

/data/redis/redis01/bin/redis-cli -c -h 10.0.0.10 -p 17001 -a ‘pwd’ cluster nodes
在这里插入图片描述
id:45da901c0ad3f5c882765b-------f2dc81f083b,节点ID,这个值在节点启动时创建,作为唯一标识
ip:port:-.-.-.43:17001@27001,节点的通信地址
flags:myself,master:逗号分割的标记位,可能的值及含义如下:
– myself:当前连接的节点
– master:节点是主节点
– slave: 节点是从节点
– fail?:当前节点无法联系,但逻辑上是可达的(非 FAIL 状态)
– fail:节点处于 FAIL 状态,大部分节点都无法与其取得联系,则会将该节点由 PFAIL 状态升级为 FAIL 状态
– handshake:还未取得信任的节点,当前正在与其进行握手
– noaddr:没有地址的节点(No address known for this node)
– noflags:连个标记都没有(No flags at all)
master-id:45da901c0ad3f5c882765b-------f2dc81f083b,因为当前节点是从节点,所以会列出所属主节点的ID,即-.-.-.43:17001
ping-sent:-0,最近一次发送 ping 的时间,这个时间是一个 unix 毫秒时间戳,0 代表没有发送过
pong-recv:1661445823000,最近一次收到pong的时间,使用 unix 时间戳表示
config-epoch:1,节点的 epoch 值(如果该节点是从节点,则为其主节点的 epoch 值),每当节点发生失败切换时,都会创建一个新的且递增的 epoch 值,如果多个节点竞争同一个哈希槽,epoch 值更高的节点更容易抢夺到
link-state:connected,集群总线使用的链接的状态,我们使用这个链接与集群中其他节点进行通信,值可以是 connected 或 disconnected
slot:0-5460,一个哈希槽范围;Redis集群把把所有master节点映射到[0-16383]的slot上,即所有master节点均分16384大小的slot空间,每个master节点占有一定的slot空间,当存储数据时,首先会对 key 使用 CRC16 算法进行加密,将得到的值 mod 16384,Redis则根据该计算值将该key放入对应的节点,均衡集群压力。同样的,取数据时也会对 Key 进行同样的计算,根据得到的值去对应的节点获取数据(从当前节点获取或重定向到其他节点);

当发现集群状态异常,如连接时发现JedisClusterOperationException: Cluster retry deadline exceeded,可重新设置集群:

停止redis进程(节点)

ps -ef|grep redis|grep -v grep|awk ‘{print $2}’|xargs kill -9

清理各节点数据

rm -rf /data/redis/redis01/data/* /data/redis/redis01/log/* /data/redis/redis01/run/;
rm -rf /data/redis/redis04/data/
/data/redis/redis04/log/* /data/redis/redis04/run/*;

rm -rf /data/redis/redis02/data/* /data/redis/redis02/log/* /data/redis/redis02/run/;
rm -rf /data/redis/redis05/data/
/data/redis/redis05/log/* /data/redis/redis05/run/*;

rm -rf /data/redis/redis03/data/* /data/redis/redis03/log/* /data/redis/redis03/run/;
rm -rf /data/redis/redis06/data/
/data/redis/redis06/log/* /data/redis/redis06/run/*;

启动各个节点

如上

设置集群模式

如上

查看集群状态

如上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值