基于CentOS7下的Redis集群教程,包括:
首先需要安装Redis所需要的依赖:
yum install -y gcc tcl
解压缩:
tar -zxvf redis-6.2.4.tar.gz
解压后:
进入redis目录:
cd redis-6.2.4
运行编译命令:
make && make install
如果没有出错,应该就安装成功了。
redis-cli redis-server
默认安装位置/usr/local/bin,相当于配置了环境变量,这样就可以在任意目录下执行redis工具 redis-server redis-cli
单节点配置:
# 启动单节点的redis
mkdir single
cd single/
# 复制redis.conf文件到当前目录
cp ../redis.conf .
# 修改配置
vim redis.conf
配置内容
# 所有主机都可以访问 75行
bind 127.0.0.1 --> bind 0.0.0.0
# 端口 98行
port 6379
# 是否以守护线程方式执行(后台运行) 257行
daemonize no --> daemonize yes
# pid 文件存储位置 用来锁定写操作只有获得该锁的进程才有写入权限 289行
pidfile /var/run/redis_6379.pid
# 日志文件存储位置 302行
logfile ""
# 数据存储的名字 431行
dbfilename 6379.rdb
# 数据存储的路径,当前运行的目录 454行
dir ./
启动Redis:
redis-server redis.conf
查看redis进程
ps -ef|grep redis
通过Redis客户端连接
redis-cli -h IP或者主机名 -p 端口
关闭redis服务
redis-cli shutdown
我们搭建的主从集群结构如图:
共包含三个节点,一个主节点,两个从节点。
这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:
IP | PORT | 角色 |
---|---|---|
192.168.85.143 | 7001 | master |
192.168.85.143 | 7002 | slave |
192.168.85.143 | 7003 | slave |
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件
复制资料中的 master-slave 文件夹到虚拟机中
配置文件中修改了每个实例的端口、rdb文件保存位置
启动3个redis实例,启动命令:
cd master-slave/
# 第1个
redis-server redis-7001.conf
# 第2个
redis-server redis-7002.conf
# 第3个
redis-server redis-7003.conf
可以使用脚本
start-all.sh
启动
stop-all.sh
关闭服务
需要在虚拟机中开启脚本运行权限
chmod 777 st*
现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。
有临时和永久两种模式:
slaveof no one
修改配置文件(永久生效) replicaof 127.0.0.1 7001
在redis.conf中添加一行配置:slaveof或replicaof
注意:7002-redis.conf和7003-redis.conf的第477行
使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
slaveof
注意:在5.0以后新增命令replicaof,与salveof效果一致。
如果使用方式二,命令如下。
通过redis-cli命令连接7002,执行下面命令:
# 连接 7002
redis-cli -p 7002
# 执行slaveof
slaveof 127.0.0.1 7001
通过redis-cli命令连接7003,执行下面命令:
# 连接 7003
redis-cli -p 7003
# 执行slaveof
slaveof 127.0.0.1 7001
然后连接 7001节点,查看集群状态:
# 连接 7001
redis-cli -p 7001
# 查看状态
info replication
结果:
执行下列操作以测试:
set num 123
get num
,再执行set num 666
get num
,再执行set num 888
可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。
这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。如图:
三个sentinel实例信息如下:
节点 | IP | PORT |
---|---|---|
s1 | 192.168.85.143 | 27001 |
s2 | 192.168.85.143 | 27002 |
s3 | 192.168.85.143 | 27003 |
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件:
复制资料中的sentinel
目录到虚拟机中
修改内容
# 修改哨兵配置文件
bind 0.0.0.0
port 27001
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile ""
dir /tmp
# 配置监控数据节点 mymaster是主节点的别名 后面是主机地址 端口 2表示判断主节点故障需要至少2个哨兵节点同意,超过半数同意及判断节点故障,所以一般情况下哨兵节点的个数设置为奇数 84行
sentinel monitor mymaster 192.168.85.143 7001 2
# 哨兵节点定期发送ping命令判断redis数据节点和其他哨兵节点是否可达,如果超过这个时间没有相应,则判断节点不可达,默认是30秒,单位为毫秒 125行
sentinel down-after-milliseconds mymaster 30000
# 故障转移完成后,每次向新的主节点发起复制操作的从节点个数 200行
sentinel parallel-syncs mymaster 1
# 故障转移超时时间,默认3分钟 225行
sentinel failover-timeout mymaster 180000
启动3个redis实例,启动命令:
# 第1个
redis-sentinel sentinel-27001.conf
# 第2个
redis-sentinel sentinel-27002.conf
# 第3个
redis-sentinel sentinel-27003.conf
注意: 设置主从配置后reids会自动更改配置文件中的内容,确保重新复制master-slave中的配置到虚拟机中
分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:
这里我们会在同一台虚拟机中开启6个redis实例,模拟分片集群,信息如下:
角色 | IP | port | 槽分配 | 说明 |
---|---|---|---|---|
master-1 | 192.168.85.143 | 7001 | {0…5460} | 主节点 |
master-2 | 192.168.85.143 | 7002 | {5461…10922} | 主节点 |
master-3 | 192.168.85.143 | 7003 | {10923…16383} | 主节点 |
slave-1 | 192.168.85.143 | 7004 | 从节点 | |
slave-2 | 192.168.85.143 | 7005 | 从节点 | |
slave-3 | 192.168.85.143 | 7006 | 从节点 |
复制资料中的 cluster
目录到虚拟机中
主要修改内容如下:
bind 0.0.0.0
port 7001
daemonize yes
pidfile /var/run/redis_cluster_7001.pid
dbfilename 7001.rdb
dir ./
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file nodes-7001.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
使用脚本开启集群
./start-all.sh
# 通过客户端连接
redis-cli -p 7001
# 查看集群节点信息
cluster nodes
虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联。
我们需要执行命令来创建集群
# 查看命令
redis-cli --cluster help
然后通过命令来管理集群:
redis-cli --cluster create 192.168.85.143:7001 192.168.85.143:7002 192.168.85.143:7003 192.168.85.143:7004 192.168.85.143:7005 192.168.85.143:7006 --cluster-replicas 1
命令说明:
redis-cli --cluster
代表集群操作命令create
:代表是创建集群--replicas 1
或者--cluster-replicas 1
:指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1)
得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master# 输入yes
查看集群信息
redis-cli -p 7001 cluster nodes
尝试连接7001节点,存储一个数据:
# 连接
redis-cli -p 7001
# 存储数据
set num 123
# 读取数据
get num
# 再次存储
set a 1
结果悲剧了:
集群操作时,需要给redis-cli
加上-c
参数才可以:
redis-cli -c -p 7001
1、执行各个文件夹中的 stop-all.sh 脚本
ps -ef | grep redis #确认所有redis已经关闭
3、进入/usr/local/bin/ 删除 redis 相关命令
4、删除解压后的redis文件夹
压缩包及配置文件:
链接:https://pan.baidu.com/s/1HgcttssT-pjAOB1d70euZg?pwd=9fml
提取码:9fml
–来自百度网盘超级会员V1的分享