Redis集群架构搭建——主从、哨兵、集群

上一篇文章Ubuntu上通过源码方式安装Redis已经介绍了如何安装redis,在这篇文章中,将会教大家搭建Redis的几种高可用的架构:主从架构、哨兵集群、Cluster集群。
本篇文章使用的redis版本为6.2.13,不同版本的配置可能有略微的区别,比如replicaof/slaveof。

因为设备有限,只能在一台Ubuntu虚拟机上通过不同端口启动多个redis服务,

注意:

1、配置文件中配置的logfile、dir后面的路径要提前创建好

2、启动redis的命令不要直接复制,否则可能会提示"没有那个文件或目录",自己手敲的命令就可以正常执行(血的教训)

目录

一、搭建主从架构

搭建主节点

复制配置文件

修改配置文件

启动主节点

搭建从节点

复制配置文件

修改配置文件

启动从节点

二、搭建哨兵集群架构

增加一个从节点

搭建哨兵节点

复制sentinel.conf

修改设置

启动哨兵节点

查看集群信息

测试哨兵选主

三、搭建高可用集群架构

创建所有节点

创建一个集群

四、集群水平扩展

添加集群节点

设置为从节点

删除集群节点

节点重新分片


一、搭建主从架构

主从架构的redis集群模式最低配置是一个master一个slave,所以要启动两个redis服务。

搭建主节点

复制配置文件

切换到redis安装目录,复制一份配置文件

bash 复制代码
cp redis.conf redis_6379.conf

如下图所示:

修改配置文件

修改一下redis_6379.conf,通过Ctrl+F搜索并修改以下配置。

bash 复制代码
# bind 127.0.0.1 -::1

protected-mode no

# 设置启动端口号
port 6379

# 设置后台启动
daemonize yes

# 进程ID保存的文件
pidfile /var/run/redis_6379.pid

# 设置日志文件名
logfile "redis_6379.log"

启动主节点

按照上一步修改完redis_6379.config之后,通过下面的命令启动redis

bash 复制代码
./src/redis-server redis_6379.conf

如图,查看日志文件,redis成功启动了

搭建从节点

复制配置文件

切换到redis安装目录,复制一份配置文件,直接复制之前的6379文件,懒得重复修改一些设置。

bash 复制代码
cp redis_6379.conf redis_6389.conf

修改配置文件

修改一下redis_6389.conf,通过Ctrl+F搜索并修改以下配置。

bash 复制代码
# 设置启动端口号
port 6389

# 从节点只能处理读操作,当前版本redis默认开启的配置
replica-read-only yes

# 配置redis主节点ip地址和端口号
replicaof 192.168.254.128 6379

# 进程ID保存的文件
pidfile /var/run/redis_6389.pid

# 保存数据的文件地址
dir /usr/local/redis/6389/data

# 日志文件的文件名
logfile "/usr/local/redis/6389/logs/redis_6389.log"

注意:为了避免文件找不到问题,需要先在/usr/local下创建对应的目录

/redis/6389/data

/redis/6389/logs

启动从节点

通过以下命令启动从节点

java 复制代码
./src/redis‐server redis_6389.conf

如下图,slave节点成功启动,并从主节点6379同步了数据。

然后在主节点设置几个key,看一下是否会同步到从节点:

通过redis-cli命令连接主节点(默认连接的是端口号是6379的redis节点),可以通过-p指定端口号。第一次使用redis-cli可能会提示安装redis-tools,复制命令回车即可。

设置一个name

从节点上获取name

至此,redis主从架构的搭建就圆满完成了。

二、搭建哨兵集群架构

哨兵集群架构其实就是在主从架构的基础上,引入了哨兵节点,哨兵不处理客户端的读写请求,只负责监控主节点和从节点,当发现主节点挂了,会重新选举一个主节点,选举主节点的过程是通过多个哨兵投票得到的,只有超过半数的哨兵同意选举才能成立,所以哨兵的数量要设置成奇数,防止平票重新选举的情况发生。因此,哨兵集群架构最少要有3个哨兵节点。

增加一个从节点

在第一节主从架构的基础上,再搭建一个redis节点6399。

从6389节点复制一份配置文件

bash 复制代码
cp redis_6389.conf redis_6399.conf

然后修改下面这些配置就可以了(Ctrl+F搜索替换6389为6399,能偷懒就偷懒~)

bash 复制代码
port 6399

pidfile /var/run/redis_6399.pid

logfile "/usr/local/redis/6399/logs/redis_6399.log"

dir /usr/local/redis/6399/data

然后输入命令启动

bash 复制代码
./src/redis‐server redis_6399.conf

同样的,它会从主节点6379同步数据。

搭建哨兵节点

复制sentinel.conf

bash 复制代码
cp sentinel.conf sentinel_6380.conf 

修改设置

bash 复制代码
port 6380

daemonize yes

logfile "/usr/local/redis/6380/logs/redis_6380.log"

dir /usr/local/redis/6380/data

pidfile /var/run/redis_6380.pid

# 配置主节点ip和端口号,最后一个2表示当哨兵节点中两个通过选举结果时,才设置候选节点为master
# 一般设置成哨兵节点数/2 + 1
sentinel monitor mymaster 192.168.254.128 6379 2

然后按照类似的方法创建两个哨兵节点6390和6400

复制一份sentinel_6380.conf配置文件

bash 复制代码
cp sentinel_6380.conf sentinel_6390.conf

替换6380为6390,然后同理创建6400

启动哨兵节点

bash 复制代码
src/redis-sentinel sentinel_6380.conf

src/redis-sentinel sentinel_6390.conf

src/redis-sentinel sentinel_6400.conf

启动完成后,点击任意一个配置文件,发现文件末尾多了一段内容。

查看集群信息

连接6400端口的哨兵节点,通过redis的info命令查看到整个集群的信息

bash 复制代码
redis-cli -p 6400

info

测试哨兵选主

通过kill命令杀死redis主节点,看一下能否完成新的master选举。

如上图,主节点已经下线了,连接其他两个从节点中任意一个,例如,连接6389

发现6389被设置成了主节点

至此,redis的哨兵集群架构也搭建完成了。

三、搭建高可用集群架构

在这里创建一共九个节点,按照1主2从的比例,刚好3组小集群。

创建所有节点

第一步:在redis安装目录下创建一个cluster目录,复制一份配置文件

bash 复制代码
cp redis.conf ./cluster/redis_6500.conf

然后修改redis_6500.conf

bash 复制代码
#bind 127.0.0.1 -::1

protected-mode no

port 6500

daemonize yes

pidfile /var/run/redis_6500.pid

logfile "/usr/local/redis-cluster/6500/logs/redis_6500.log"

dir /usr/local/redis-cluster/6500/data

appendonly yes

# 取消以下设置的注释,并修改对应的值
cluster-enabled yes

cluster-config-file nodes-6500.conf

cluster-node-timeout 15000

接着,只需要复制/cluster/6500.conf就行了,Ctrl+F搜索替换6500为6501、6502、6503、6504、6505、6506、6507、6508,完成其余节点的创建。

bash 复制代码
cp ./cluster/redis_6500.conf ./cluster/redis_6501.conf

cp ./cluster/redis_6500.conf ./cluster/redis_6502.conf

cp ./cluster/redis_6500.conf ./cluster/redis_6503.conf

cp ./cluster/redis_6500.conf ./cluster/redis_6504.conf

cp ./cluster/redis_6500.conf ./cluster/redis_6505.conf

cp ./cluster/redis_6500.conf ./cluster/redis_6506.conf

cp ./cluster/redis_6500.conf ./cluster/redis_6507.conf

cp ./cluster/redis_6500.conf ./cluster/redis_6508.conf

如图所示

然后尝试启动一下其中任意一个服务,看一下日志是否有报错,保证配置文件没有问题。

然后,依次启动6501-6508的节点。

通过ps命令查看到所有节点都启动了

创建一个集群

通过命令将刚刚启动的9个节点加入到一个集群中。

--cluster-replicas指定每个小集群的从节点数量,开头已经说了,是按照3组1主2从的结构搭建集群,所以这里指定的值为2

bash 复制代码
./src/redis-cli --cluster create 192.168.254.128:6500 192.168.254.128:6501 192.168.254.128:6502 192.168.254.128:6503 192.168.254.128:6504 192.168.254.128:6505 192.168.254.128:6506 192.168.254.128:6507 192.168.254.128:6508 --cluster-replicas 2

如图,前面三个节点被设置成了主节点,因为多个主、从节点都在一台机器上,所以有黄色的Warning。

根据提示输入yes开始创建集群,如图,集群就搭建好了

注意:集群模式下连接redis客户端的命令有点不同

bash 复制代码
 ./src/redis-cli -c -h 192.168.254.128 -p 6505

-c 表示通过集群模式连接

-h 指定服务器ip地址

为了保证节点数据的安全,集群的节点不会全部都部署在在本机,而且主、从节点一般不会是同一个服务器下的redis服务,因为一旦这台机器坏了,那么这个分片的数据将全部丢失。

因为从节点只负责备份数据,不会处理请求,所以在连接从节点6505执行命令时,会自动重定向到他的主节点6501(6500-6502是主节点,也就是创建集群指定的前3个节点)。

最后介绍两个命令

bash 复制代码
cluster info # 查看集群信息

cluster nodes # 查看集群的节点

至此,Redis的高可用集群也搭建完成了。

四、集群水平扩展

在此之前,要在/user/local/redis-cluster目录下创建目录/6509/logs和/6509/data。

复制一份之前的配置文件

bash 复制代码
cp ./cluster/redis_6508.conf ./cluster/redis_6509.conf

然后Ctrl+F替换

最后Ctrl + S保存文件内容改变,保存成功右上角会有上传成功的提示。

然后启动6509节点

bash 复制代码
./src/redis-server ./cluster/redis_6509.conf

添加集群节点

当有新的节点添加到cluster集群,默认是master节点,通过add-node命令来添加节点,第一个ip:端口号表示待加入的节点,第二个ip:端口号为集群中任意一个节点。

添加刚刚创建的6509到集群

bash 复制代码
redis-cli --cluster add-node 192.168.254.128:6509 192.168.254.128:6500

设置为从节点

连接6509

bash 复制代码
redis-cli -c -h 192.168.254.128 -p 6509

查看集群节点信息

bash 复制代码
cluster nodes

设置6509节点的主节点为6500

bash 复制代码
cluster replicate 节点ID

节点ID就是上图红框内的一长串字符串

bash 复制代码
cluster replicate cbce6fa89b45e4406db54862fed9c1e452ddba4e

然后再查看集群节点

删除集群节点

可以通过del-node命令删除集群中的节点,第一个参数是节点的ip:端口号,第二个参数是节点的ID

bash 复制代码
redis-cli --cluster del-node 192.168.254.128:6509 25c2ccdd1bed9536475e9e1a0b9d17b001654aa1

当删除主节点时,需要把数据迁移到其他从节点,保证数据不丢失,也就是通过下一个部分给节点重新分片。

节点重新分片

bash 复制代码
redis-cli --cluster reshared 192.168.254.128:6509

好了,文章就分享到这里了,看完不要点赞+收藏哦~

相关推荐
weixin_462428471 分钟前
使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
java·缓存
程序媛小果2 分钟前
基于java+SpringBoot+Vue的桂林旅游景点导游平台设计与实现
java·vue.js·spring boot
骑鱼过海的猫1234 分钟前
【java】java通过s3访问ceph报错
java·ceph·iphone
杨充10 分钟前
13.观察者模式设计思想
java·redis·观察者模式
Lizhihao_12 分钟前
JAVA-队列
java·开发语言
喵叔哟22 分钟前
重构代码之移动字段
java·数据库·重构
喵叔哟22 分钟前
重构代码之取消临时字段
java·前端·重构
fa_lsyk24 分钟前
maven环境搭建
java·maven
Daniel 大东43 分钟前
idea 解决缓存损坏问题
java·缓存·intellij-idea
wind瑞1 小时前
IntelliJ IDEA插件开发-代码补全插件入门开发
java·ide·intellij-idea