Redis集群

1:集群

Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

集群两种实现方式:
1:代理主机
在这里插入图片描述

2:去中心化配置
在这里插入图片描述

2:搭建集群

6台服务器搭建Redis集群:端口号分别为6379,6380,6381,6389,6390,6391。
主服务器分别为6379,6380,6381。

2.1:配置防火墙开启6个端口号

firewall-cmd --permanent --add-port=端口号/tcp
#开启后查询是否开启
firewall-cmd --query-port=端口号/tcp
#重启firewall
firewall-cmd --reload

2.2:配置xxx.conf文件

include redis.conf  #引入redis.conf 
port 端口号
pidfile /var/run/redis_端口号.pid
dbfilename dump端口号.rdb
cluster-enabled yes
cluster-config-file nodes-端口号.conf
cluster-node-timeout 15000 #失联时间超过15000毫秒即可切换主机

比如设置6379端口的conf文件:名为redis6379.conf

include /myRedis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
cluster-enabled yes   
cluster-config-file nodes-6379.conf  
cluster-node-timeout 15000 

为每一个redis服务设置conf文件。

2.3:启动6台Redis服务器

[root@LKCentos01 myRedis]# redis-server redis6379.conf 
[root@LKCentos01 myRedis]# redis-server redis6380.conf 
[root@LKCentos01 myRedis]# redis-server redis6381.conf 
[root@LKCentos01 myRedis]# redis-server redis6389.conf 
[root@LKCentos01 myRedis]# redis-server redis6390.conf 
[root@LKCentos01 myRedis]# redis-server redis6391.conf 
[root@LKCentos01 myRedis]# ps -ef | grep redis
root      16227      1  0 15:09 ?        00:00:00 redis-server *:6379 [cluster]
root      16235      1  0 15:09 ?        00:00:00 redis-server *:6380 [cluster]
root      16241      1  0 15:09 ?        00:00:00 redis-server *:6381 [cluster]
root      16247      1  0 15:09 ?        00:00:00 redis-server *:6389 [cluster]
root      16267      1  0 15:10 ?        00:00:00 redis-server *:6390 [cluster]
root      16273      1  0 15:10 ?        00:00:00 redis-server *:6391 [cluster]
root      16279  15709  0 15:10 pts/0    00:00:00 grep --color=auto redis

2.4:查看目录下是否生成结点配置文件

结点配置文件:nodes-端口号.conf

生成结点的配置文件:
[root@LKCentos01 myRedis]# ls
nodes-6380.conf  nodes-6389.conf  nodes-6391.conf  redis6380.conf  redis6389.conf  redis6391.conf  sentinel.conf
nodes-6379.conf  nodes-6381.conf  nodes-6390.conf  redis6379.conf   redis6381.conf  redis6390.conf  redis.conf

2.5:合体结点成为集群

需要进入redis的安装目录下的src目录下:
使用此命令搭建:

redis-cli --cluster create  IP1:6379 IP2:6380 IP3:6381 IP4:6389 IP5:6390 IP6:6391  --cluster-replicas 1

–clister-replicas 1表示一台主机一台从机,刚好三组。

2.6:查看集群信息

使用此命令进入redis服务:集群为无中心化配置,无论从哪一个端口都可进入集群。

redis-cli -c -p 端口号

查看集群信息:CLUSTER NODES
master为主,slave为从。

127.0.0.1:6379> CLUSTER NODES
34e6d31d8d0100319922f8f137766613fced0741 192.168.111.130:6379@16379 myself,master - 0 1651059170000 1 connected 0-5460
9c8ef059ab65b15f05cba65188088edb8c6e96e1 192.168.111.130:6381@16381 master - 0 1651059172467 3 connected 10923-16383
a34c810bfb5520a04fa56ae9020e0a41c15fb8af 192.168.111.130:6391@16391 slave 34e6d31d8d0100319922f8f137766613fced0741 0 1651059172000 1 connected
0ed5e63e44bfbe07b89e5493f7a21111cf8298d8 192.168.111.130:6390@16390 slave 9c8ef059ab65b15f05cba65188088edb8c6e96e1 0 1651059172000 3 connected
025ee04022814bbcdff67038bcdafb32501b72d7 192.168.111.130:6389@16389 slave 5ff3619a812241945c7477009bb889e7aa1d489b 0 1651059171000 2 connected
5ff3619a812241945c7477009bb889e7aa1d489b 192.168.111.130:6380@16380 master - 0 1651059173472 2 connected 5461-10922

3:故障恢复

3.1:宕机

此时让主机6379宕机,查看6379的从机是否会变为新的主机。
查看进行,直接杀掉6379的进程即可。

[root@centos7 src]# ps -ef | grep redis
root      42944      1  0 19:31 ?        00:00:00 redis-server *:6379 [cluster]
root      42950      1  0 19:31 ?        00:00:00 redis-server *:6380 [cluster]
root      42958      1  0 19:31 ?        00:00:00 redis-server *:6381 [cluster]
root      42964      1  0 19:31 ?        00:00:00 redis-server *:6389 [cluster]
root      42970      1  0 19:31 ?        00:00:00 redis-server *:6390 [cluster]
root      42978      1  0 19:31 ?        00:00:00 redis-server *:6391 [cluster]
root      43273  36142  0 19:35 pts/2    00:00:00 grep --color=auto redis
[root@centos7 src]# kill -9 42944

3.2:查看是否有人替代

此时的6379端口的主机宕机,重新进入集群中,查看结点信息:
可用看到6379fail,而它的从机6391变为新的主机。

127.0.0.1:6380> CLUSTER NODES
5ff3619a812241945c7477009bb889e7aa1d489b 192.168.111.130:6380@16380 myself,master - 0 1651059432000 2 connected 5461-10922
025ee04022814bbcdff67038bcdafb32501b72d7 192.168.111.130:6389@16389 slave 5ff3619a812241945c7477009bb889e7aa1d489b 0 1651059428000 2 connected
0ed5e63e44bfbe07b89e5493f7a21111cf8298d8 192.168.111.130:6390@16390 slave 9c8ef059ab65b15f05cba65188088edb8c6e96e1 0 1651059433605 3 connected
a34c810bfb5520a04fa56ae9020e0a41c15fb8af 192.168.111.130:6391@16391 master - 0 1651059432000 7 connected 0-5460
9c8ef059ab65b15f05cba65188088edb8c6e96e1 192.168.111.130:6381@16381 master - 0 1651059432000 3 connected 10923-16383
34e6d31d8d0100319922f8f137766613fced0741 192.168.111.130:6379@16379 master,fail - 1651059366391 1651059364000 1 disconnected

3.3:恢复运行

让宕机的6379继续运行:

redis-server redis6379.conf 

再次进入集群,查看6379主从性:
此时的6379作为6391的从机运行

[root@centos7 myRedis]# redis-cli -c -p 6379
127.0.0.1:6379> CLUSTER NODES
9c8ef059ab65b15f05cba65188088edb8c6e96e1 192.168.111.130:6381@16381 master - 0 1651060505000 3 connected 10923-16383
a34c810bfb5520a04fa56ae9020e0a41c15fb8af 192.168.111.130:6391@16391 master - 0 1651060504000 7 connected 0-5460
0ed5e63e44bfbe07b89e5493f7a21111cf8298d8 192.168.111.130:6390@16390 slave 9c8ef059ab65b15f05cba65188088edb8c6e96e1 0 1651060504000 3 connected
5ff3619a812241945c7477009bb889e7aa1d489b 192.168.111.130:6380@16380 master - 0 1651060503382 2 connected 5461-10922
34e6d31d8d0100319922f8f137766613fced0741 192.168.111.130:6379@16379 myself,slave a34c810bfb5520a04fa56ae9020e0a41c15fb8af 0 1651060503000 7 connected
025ee04022814bbcdff67038bcdafb32501b72d7 192.168.111.130:6389@16389 slave 5ff3619a812241945c7477009bb889e7aa1d489b 0 1651060505395 2 connected

### Redis 集群的搭建与配置 #### 一、Redis 集群简介 Redis 是一种高性能的键值存储系统,支持多种数据结构操作。通过集群模式可以实现分布式存储和高可用性。Redis 集群允许多个 Redis 实例协同工作,提供更高的吞吐量和更强的数据持久化能力。 --- #### 二、环境准备 在开始之前,需确认以下条件已满足: - 所有服务器的操作系统版本一致(如 CentOS 7 或 Windows),并安装了相同版本的 Redis 软件。 - 已关闭防火墙或开放必要的端口(默认 Redis 使用 6379 及其衍生端口)。 - 每台服务器上至少有两个 Redis 实例运行,分别作为主节点和从节点[^1]。 --- #### 三、具体步骤 ##### 1. 下载并解压 Redis 文件 下载指定版本的 Redis 压缩包(如 Redis 6.2.5 或更高版本),将其解压到目标路径下。例如,在 Linux 中执行以下命令: ```bash wget http://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5.tar.gz cd redis-6.2.5 make ``` ##### 2. 创建多个实例目录 为每个 Redis 实例创建独立的工作目录,并复制 `redis.conf` 至对应文件夹中。例如: ```bash mkdir -p /service/redis/{6379,6380} cp redis.conf /service/redis/6379/ cp redis.conf /service/redis/6380/ ``` ##### 3. 修改配置文件 编辑每个实例下的 `redis.conf` 文件,设置不同的监听端口号和其他必要参数。以下是关键配置项: - 设置绑定 IP 地址:`bind 0.0.0.0` - 关闭保护模式:`protected-mode no` - 开启集群功能:`cluster-enabled yes` - 指定集群配置文件位置:`cluster-config-file nodes-{port}.conf` - 设定日志级别:`loglevel notice` ##### 4. 启动 Redis 实例 依次启动各个 Redis 实例。例如: ```bash redis-server /service/redis/6379/redis.conf redis-server /service/redis/6380/redis.conf ``` 如果是在多台物理机上部署,则需要远程登录每台机器重复上述过程[^2]。 ##### 5. 构建集群拓扑 利用 `redis-cli` 的集群管理工具完成初始化操作。假设当前存在六个节点分布在三台主机上,则可输入如下指令构建集群关系: ```bash redis-cli --cluster create \ 192.168.x.y:6379 192.168.x.z:6379 ... \ --replicas 1 ``` 其中 `--replicas` 参数表示每个主节点分配几个副本[^4]。 ##### 6. 验证集群状态 最后可以通过以下方式验证集群是否正常运作: ```bash redis-cli -c -h {任意IP} -p {任一口号} CLUSTER INFO CLUSTER NODES PING SET key value GET key ``` --- #### 四、注意事项 - 如果使用 Docker 容器来部署 Redis 集群,请确保容器间网络互通良好。 - 对于 Windows 平台上的开发测试场景,可通过批处理脚本来简化服务启动流程[^3]。 --- #### 五、示例代码片段 下面展示了一个简单的 Python 程序用于连接至 Redis 集群并向其中写入一条记录: ```python import redis r = redis.StrictRedisCluster(startup_nodes=[{"host": "127.0.0.1", "port": "6379"}], decode_responses=True) r.set('foo', 'bar') print(r.get('foo')) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值