Redis单机搭建
Redis下载
这里使用的是redis5.0.3
Redis下载有多种方式,可以选择官网也可以选择镜像
## 下载
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
## 解压
tar -zxvf elasticsearch-7.10.2-linux-x86_64.tar.gz -C /
## 软链接
ln -s /elasticsearch-7.10.2/ es/
gcc编译
## 安装gcc
yum install gcc
## 进入到解压好的redis目录下,进行编译与安装
cd /redis
make
修改配置
## 创建持久化目录
mkdir /data/redis
## 修改配置文件
vim redis.conf
配置文件
#后台启动
daemonize yes
#关闭保护模式,开启的话,只有本机才可以访问redis
protected-mode no
# 需要注释掉bind(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
#bind 127.0.0.1
#修改持久化文件目录
dir /data/redis/
启动服务
## 启动
src/redis-server redis.conf
## 验证服务
ps -ef | grep redis
## 进入客户端
src/redis-cli
退出
## 退出客户端
quit
## 退出redis服务
src/redis-cli shutdown
Redis 主从架构搭建
这里准备2台机器
主节点:192.168.186.131:6379
从节点:192.168.186.132:6379
主从节点搭建都和单机搭建基本一致,只需修改从节点配置即可
从节点所需修改配置
## 配置主从复制
# 从主节点的redis实例复制数据,主节点ip:端口
replicaof 192.168.186.131:6379
replica-read-only yes # 配置从节点只读
主节点启动,从节点启动
验证
主节点写入一个key value;从节点能够同步数据就可以了
如果数据不能同步可能是防火墙问题关闭即可
Redis 哨兵架构搭建
在主从架构中主节点挂了,从节点是不会顶上来的,从节点只是做了读写分离和数据备份
哨兵架构可以监测主节点变化情况和选举主节点的功能
客户端只需要连接哨兵便能访问redis,redis的主节点变化不会影响到客户端
搭建
这里搭建2个哨兵,1个主从redis
redis主节点:192.168.186.131:6379
redis从节点:192.168.186.132::6379
redis主从,上诉搭建方式
snetinel节点:
192.168.186.131:26379;192.168.186.132:26379
修改配置
vim sentinel.conf
配置文件
daemonize yes
## mymaster客户端连接时才有用,可随意修改,ip:port 是主节点ip:port,最后一个数字2表示2台sentinel认为主节点不可访问才是不可返回
sentinel monitor mymaster 192.168.0.60 6379 2
启动sentinel
src/redis-sentinel sentinel.conf
验证
src/redis-cli -p 26379
info
sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有sentinel的配置文件里去
#代表redis主节点的从节点信息
sentinel known-replica mymaster 192.168.186.132 6379
#代表感知到的其它哨兵节点
sentinel known-sentinel mymaster 192.168.186.131 26379 84bbfc7608019b020884e1cf045460916942e0f9
当redis主节点如果挂了,哨兵集群会重新选举出新的redis主节点,同时会修改所有sentinel节点配置文件的集群元数据信息
#代表redis主节点的从节点信息
sentinel known-replica mymaster 192.168.186.131 6379
#代表感知到的其它哨兵节点
sentinel known-sentinel mymaster 192.168.186.131 26379 84bbfc7608019b020884e1cf045460916942e0f9
同时还会修改sentinel文件里之前配置的mymaster对应的主节点
sentinel monitor mymaster 192.168.186.132 6379 2
Redis 集群架构搭建
redis的集群是由redis分配主从和槽位(当然也可以命令手动指定主从),这里我们只需要正常启动6个配置好的redis实例就可以了
前期准备
三台机器,ip分别为192.168.186.131;192.168.186.132;192.168.186.133
每台机器搭建2个redis 服务,端口6001,6002,6003,6004,6005,6006
# 每台机器首先创建一个redis-cluster文件夹方便管理
mkdir /redis/redis-cluster
cd /redis/redis-cluster
# 然后在别创建2个文件夾放不同端口文件
mkdir 6001 6004
# 把之前的redis.conf配置文件copy到6001
cp /redis/redis.conf /redis/redis-cluster/6001
修改配置文件
## 后台启动
daemonize yes
## 端口(分别对每个机器的端口号进行设置)
port 6001
## 把pid进程号写入pidfile配置的文件
pidfile /var/run/redis_6001.pid
## 指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
dir /redis/redis-cluster/6001/
## 启动集群模式
cluster-enabled yes
## 集群节点信息文件,这里600x最好和port对应上
cluster-config-file nodes-6001.conf(集群节点信息文件,这里800x最好和port对应上)
cluster-node-timeout 15000
## 需要注释掉bind(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
# bind 127.0.0.1
## 关闭保护模式
protected-mode no
把修改后的配置文件,copy到6004,修改有端口号的配置项
批量替换命令
:%s/源字符串/目的字符串/g
另外两台机器也需要做上面几步操作,第二台机器用6002和6005,第三台机器用6003和6006
启动
启动6个redis实例,然后检查是否启动成功,这时候集群还未创建
## 启动服务
/redis/src/redis-server /redis/redis-cluster/600X/redis.conf
## 检查6个redis实例是否都启动
ps -ef | grep redis
创建集群
执行这条命令需要确认三台机器之间的redis实例要能相互访问,可以先简单把所有机器防火墙关掉,如果不关闭防火墙则需要打开redis服务端口和集群节点gossip通信端口16379(默认是在redis端口号上加1W)
防火墙
## 临时关闭防火墙
systemctl stop firewalld
## 禁止开机启动
systemctl disable firewalld
集群创建
## --cluster-replicas 1表示每个主节点需要1个从节点
/redis/src/redis-cli --cluster create --cluster-replicas 1 192.168.186.131:6001 192.168.186.132:6002 192.168.186.133:6003 192.168.186.131:6004 192.168.186.132:6005 192.168.186.133:6006

集群检查
连接任意一个redis客户端
## -a访问服务端密码,-c表示集群模式,-h指定ip地址,-p端口号
/redis/src/redis-cli -c -h 192.168.186.132 -p 6002
## 查看集群信息
cluster info
## 查看节点列表
cluster nodes

从cluster nodes可以看出集群关系
1(主)-6(从) 槽位:0-5460
2(主)-4(从) 槽位:5461-10922
3(主)-5(从) 槽位:10923-16383
关闭集群需要逐个关闭,集群一旦构建好后,停机后只需每个节点重新启动便可,不需要在执行集群创建命令
/redis/src/redis-cli -c -h 192.168.186.132 -p 6002 shutdown
Redis集群水平扩缩容
下面看下集群命令
src/redis-cli --cluster help

- create:创建一个集群环境host1:port1 … hostN:portN
- call:可以执行redis命令
- add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
- del-node:移除一个节点
- reshard:重新分片
- check:检查集群状态
扩容
在刚刚搭好的集群上面进行水平扩容,增加一个小集群6007(主)和6008(从);
首先需要启动2个redis实例

2个新节点启动并没有加入到集群,cluster nodes 发现只有6个节点

现在开始加入主节点
src/redis-cli --cluster add-node 192.168.186.132:6007 192.168.186.132:6001
现在看下集群状态,多了一个master(刚加入的节点都直接是master)

这时候加入的master不可以使用因为它没有槽位,需要rehash分配槽位
分配槽位
src/redis-cli --cluster reshard 192.168.186.132:6002


这时候再看一下集群信息

加入从节点
src/redis-cli --cluster add-node 192.168.186.132:6008 192.168.186.132:6002
刚加入在集群里面是master,现在我们要进入6008的客户端
src/redis-cli -c -h 192.168.186.132 -p 6008
## 分配主节点 后面这字符串就是6007的唯一标识
cluster replicate 7e4da930cbbcccbb8656dbb5e1f5bead97f9f6ac

扩容成功
缩容
现在我们删除6007,6008这一个小集群
删除6008从节点
## 后面这节点id是6008的id
src/redis-cli --cluster del-node 192.168.186.132:6008 87d4ff53c193c24ff7b6c6cdd33478531dd7fe1e
删除6007主节点
删除主节点之前需要先把hash槽释放掉
src/redis-cli --cluster reshard 192.168.186.132:6007


删除节点
src/redis-cli --cluster del-node 192.168.186.132:6007 7e4da930cbbcccbb8656dbb5e1f5bead97f9f6ac

缩容成功