分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)

基于CentOS7下的Redis集群教程,包括:

  • 单机安装Redis
  • Redis主从
  • Redis分片集群

单机安装Redis

首先需要安装Redis所需要的依赖:

yum install -y gcc tcl

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第1张图片

解压缩:

tar -zxvf redis-6.2.4.tar.gz

解压后:

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第2张图片

进入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

Redis主从集群

集群结构

我们搭建的主从集群结构如图:

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第3张图片

共包含三个节点,一个主节点,两个从节点。

这里我们会在同一台虚拟机中开启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

结果:

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第4张图片

测试

执行下列操作以测试:

  • 利用redis-cli连接7001,执行set num 123
  • 利用redis-cli连接7002,执行get num,再执行set num 666
  • 利用redis-cli连接7003,执行get num,再执行set num 888

可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。

搭建哨兵集群

集群结构

这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。如图:

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第5张图片

三个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中的配置到虚拟机中

测试

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第6张图片

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第7张图片
分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第8张图片

搭建分片集群

集群结构

分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第9张图片

这里我们会在同一台虚拟机中开启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 -- 集群搭建(主从、哨兵、分片)_第10张图片

然后通过命令来管理集群:

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

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第11张图片

# 输入yes

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第12张图片

查看集群信息

redis-cli -p 7001 cluster nodes

测试

尝试连接7001节点,存储一个数据:

# 连接
redis-cli -p 7001
# 存储数据
set num 123
# 读取数据
get num
# 再次存储
set a 1

结果悲剧了:

分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第13张图片

集群操作时,需要给redis-cli加上-c参数才可以:

redis-cli -c -p 7001

这次可以了:
分布式缓存 -- Redis -- 集群搭建(主从、哨兵、分片)_第14张图片

卸载redis

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的分享

你可能感兴趣的