首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >redis 集群搭建

redis 集群搭建

作者头像
张哥编程
发布2024-12-13 14:23:07
发布2024-12-13 14:23:07
2380
举报
文章被收录于专栏:云计算linux云计算linux

redis 集群搭建

1.redis 主从复制

一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 ,处理读请求。

主从复制的作用
  • 1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 4、读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量。
  • 5、高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
1.配置Master主机

a 在/usr/redis04下新建master_slaver文件夹

代码语言:javascript
复制
mkdir master_slaver

b 在 /usr/redis04/master_slaver下新建 master夹

代码语言:javascript
复制
[root@redis01 master_slaver]# mkdir master

c 将单机版的redis.conf 复制到 master 目录下面

代码语言:javascript
复制
cp /usr/redis04/redis.conf master/

修改以下内容

代码语言:javascript
复制
#端口号
port 8001
#绑定ip
bind 192.168.13.100

#保护模式改为no
protected-mode no

#redis 后台运行
daemonize yes

#记录当前redis服务进程的ID
pidfile /var/run/redis_8001.pid

d 在master下启动redis master

代码语言:javascript
复制
[root@redis01 master]# pwd
/usr/redis04/master_slaver/master

[root@redis01 master]# /usr/redis04/bin/redis-server redis.conf 

e 验证 ps -ef |grep redis

2.配置Slaver主机

a 在 /usr/redis04/master_slaver 新建slaver ,并且把 master/redis.conf 拷贝到slaver中

代码语言:javascript
复制
[root@redis01 master_slaver]# pwd
/usr/redis04/master_slaver
[root@redis01 master_slaver]# mkdir slaver
[root@redis01 master_slaver]# cp master/redis.conf slaver/
[root@redis01 master_slaver]# ls

b 将 slaver中的redis.conf 中8001 修改为 8002,并且

代码语言:javascript
复制
slaveof 192.168.13.100 8001
#端口号
port 8002
#绑定ip
bind 192.168.13.100

#保护模式改为no
protected-mode no

#redis 后台运行
daemonize yes

#记录当前redis服务进程的ID
pidfile /var/run/redis_8002.pid

可以在底行模式下使用替换命令快速实现

代码语言:javascript
复制
:%s/8001/8002/g 

c 在 /usr/redis04/master_slaver/slaver 启动slaver

代码语言:javascript
复制
[root@redis01 slaver]# pwd
/usr/redis04/master_slaver/slaver
[root@redis01 slaver]# /usr/redis04/bin/redis-server redis.conf 

d 验证

3.验证主从复制效果

a 打开一个窗口,连接redis的master

代码语言:javascript
复制
[root@redis01 slaver]# /usr/redis04/bin/redis-cli -h redis01 -p 8001

b 打开另一个窗口,连接redis的slaver,在slaver只可以读取到数据,不可以写入数据

代码语言:javascript
复制
[root@redis01 ~]# /usr/redis04/bin/redis-cli -h redis01 -p 8002
redis01:8002> get a
"1"
redis01:8002> set a 1
(error) READONLY You can't write against a read only replica.

2.redis集群模式

主从复制,存在单点故障的问题。也就是说如果主机坏了,我们就不能往缓存服务器中写数据了。为了解决

主机的单点故障问题,我们可以创建redis 集群。可以同时启动多态redis 服务器 ,其中有一些服务器是主机,有

些服务器是备机,一旦主机出现故障,该主机的备机会自动升级成主机。

解决问题:

  • 1,单机redis故障时,redis就不能使用
  • 2,大型网站应用,热点数据量往往巨大,使用一台 Redis 实例无满足需求,这时 就需要使用 多台 Redis (集群)作为缓存数据库。才能在用户请求时快速的进行响应。

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带

宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接

集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<-

>slot<->value

通俗的说,redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是

说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集

群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只

需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

搭建集群

集群规划

1.搭建7001节点

a 新建/cluster/7001文件夹下

代码语言:javascript
复制
[root@redis01 redis04]# mkdir cluster
[root@redis01 redis04]# mkdir cluster/7001
[root@redis01 7001]# pwd
/usr/redis04/cluster/7001

b 将修改一下内容

代码语言:javascript
复制
#端口号
port 7001
#绑定ip
bind 192.168.13.100

#保护模式改为no
protected-mode no

#redis 后台运行
daemonize yes

#记录当前redis服务进程的ID
pidfile /var/run/redis_7001.pid

cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000

c 在 /usr/redis04/cluster/7001下启动7001 服务器,并且检查server

代码语言:javascript
复制
[root@redis01 7001]# pwd
/usr/redis04/cluster/7001
[root@redis01 7001]# /usr/redis04/bin/redis-server redis.conf 

d 检查服务

代码语言:javascript
复制
ps -ef | grep redis

2.搭建剩余5个节点服务

a 在/usr/redis04/cluster 创建7002 7003 7004 7005 7006 文件夹

代码语言:javascript
复制
[root@redis01 cluster]# pwd
/usr/redis04/cluster
[root@redis01 cluster]# mkdir 7002 7003 7004 7005 7006

b 将7001 中的配置文件复制到 7002 7003 7004 7005 7006 中

代码语言:javascript
复制
[root@redis01 cluster]# pwd
/usr/redis04/cluster
[root@redis01 cluster]# cp 7001/redis.conf 700
7001/ 7002/ 7003/ 7004/ 7005/ 7006/ 
[root@redis01 cluster]# cp 7001/redis.conf 7002/
[root@redis01 cluster]# cp 7001/redis.conf 7003/
[root@redis01 cluster]# cp 7001/redis.conf 7004/
[root@redis01 cluster]# cp 7001/redis.conf 7005/
[root@redis01 cluster]# cp 7001/redis.conf 7006/

c 进入7002 修改配置文件中的应用信息,替换7001 为7002,并且保存退出

代码语言:javascript
复制
:%s/7001/7002/g

d 启动7002服务,并检查进程

代码语言:javascript
复制
[root@redis01 7002]# pwd
/usr/redis04/cluster/7002
[root@redis01 7002]# /usr/redis04/bin/redis-server redis.conf 

e,按照 c d步骤启动剩余7003 7004 7005 7006 server

f 检查

代码语言:javascript
复制
ps -ef | grep redis
2.创建集群

--cluster-replicas 指定 master 与slaver的数量比例

代码语言:javascript
复制
/usr/redis04/bin/redis-cli  --cluster create 192.168.13.100:7001 192.168.13.100:7002 192.168.13.100:7003 192.168.13.100:7004 192.168.13.100:7005 192.168.13.100:7006 --cluster-replicas 1

创建成功

使用客户端链接集群 必须使用 -c 连接

代码语言:javascript
复制
/usr/redis04/bin/redis-cli -c -h 192.168.13.100 -p 7002
4集群管理
通过--cluster help可以查看相关指令
代码语言:javascript
复制
/usr/redis04/bin/redis-cli  --cluster help
检查集群状态
代码语言:javascript
复制
/usr/redis04/bin/redis-cli --cluster check 192.168.13.100:7002
添加主节点

再添加之前首先要像7001-6一样,修改配置文件,启动7007 服务

代码语言:javascript
复制
/usr/redis04/bin/redis-cli --cluster add-node 192.168.13.100:7007 192.168.13.100:7001
添加从节点

--cluster-master-id 为从节点对应主节点的id

代码语言:javascript
复制
/usr/redis04/bin/redis-cli --cluster add-node 192.168.13.100:7008 192.168.13.100:7001  --cluster-slave  --cluster-master-id  c66796c98b585c27d0f60f29ae40c6cc30753920

添加的主节点还不能使用,因为没有分配slots,

重新分配slots
代码语言:javascript
复制
/usr/redis04/bin/redis-cli --cluster reshard 192.168.13.100:7001

all 代表从所有有数据据节点进行迁移到目的节点,也可以选择 目标节点id回车,最后以done进行结束

done 代表结束

迁移成功之后会7007才可以接收数据

删除节点

删除主节点需要先使用 reshard 把主节点的slots移到其他节点才可以

代码语言:javascript
复制
/usr/redis04/bin/redis-cli --cluster del-node 192.168.13.100:7002  bbfce86274f3bf34e07967f9b5928b96ca4069a8

移除 slaver 节点(7005)就没有限制,可以直接删除

代码语言:javascript
复制
/usr/redis04/bin/redis-cli --cluster del-node 192.168.13.100:7005  acc711f3c252b89447e340c03180e23a1c192da2
集群关机之后,集群重启,只需要直接启动各个节点,不需要重新组网,redis会根据node.conf自动组网
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis 集群搭建
  • 1.redis 主从复制
  • 2.redis集群模式
    • 搭建集群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档