redis集群与主从配置
- redis安装-redis集群管理
- redis主从复制(读写分离)-redis集群管理
- redis主从从架构搭建-redis集群管理
- redis从库只读设置-redis集群管理
- redis主从复制的原理-redis集群管理
- redis sentinel(哨兵) 配置详解-redis集群管理
- redis sentinel.conf详解-redis集群管理
- redis 集群环境搭建-redis集群管理
- redis集群插槽分配-redis集群管理
- redis新增集群节点-redis集群管理
- redis删除集群节点-redis集群管理
- redis集群出现宕机没法访问-redis集群管理
- redis 集群使用主从复制架构-redis集群管理
redis 基础教程
- Redis概述
- 基于linux下redis安装与配置
- 基于window安装redis
- Redis配置文件详解
- 通过redis客户端查看和设置配置
- Redis 客户端连接、密码验证、连接数设置
- 使用info命令获取 redis 服务详细信息
- Redis Desktop Manager客户端使用教程
redis 数据类型
Redis 高级教程
知识点
相关文章
更多最近更新
更多redis 集群使用主从复制架构-redis集群管理
2019-03-24 00:09|来源: 网路
redis集群使用主从架构如下图,能有效解决集群中节点连接不上造成集群挂掉的情况
a) 在Redis集群中可以使用主从模式实现某一个节点的高可用
b) 当该节点(master)宕机后,集群会将该节点的从数据库(slave)转变为(master)继续完成集群服务;
创建主从集群
参考前面的主从复制和集群环境搭建,启动6个redis实例,分别是:
6380(主) 6480(从)
6381(主) 6481(从)
6382(主) 6482(从)
[root@master redis-cluster-master-slave]# pwd
/opt/redis/redis-cluster-master-slave
[root@master redis-cluster-master-slave]# tree
├── 6380
│ └── redis.conf
├── 6381
│ └── redis.conf
├── 6382
│ └── redis.conf
├── 6480
│ └── redis.conf
├── 6481
│ └── redis.conf
└── 6482
└── redis.conf
启动redis-server
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6380/redis.conf
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6381/redis.conf
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6382/redis.conf
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6480/redis.conf
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6481/redis.conf
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6482/redis.conf
创建集群,指定了从库数量为1,创建顺序为主库(3个)、从库(3个)
[root@master redis-cluster-master-slave]# /opt/redis/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.56.101:6380 192.168.56.101:6381 192.168.56.101:6382 192.168.56.101:6480 192.168.56.101:6481 192.168.56.101:6482
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.56.101:6380
192.168.56.101:6381
192.168.56.101:6382
Adding replica 192.168.56.101:6480 to 192.168.56.101:6380
Adding replica 192.168.56.101:6481 to 192.168.56.101:6381
Adding replica 192.168.56.101:6482 to 192.168.56.101:6382
M: 768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 192.168.56.101:6380
slots:0-5460 (5461 slots) master
M: 87d7a6fba680f6826fe680a73ab9ea692aa1b03f 192.168.56.101:6381
slots:5461-10922 (5462 slots) master
M: aba2eba21bbe0b39423afd940a40e692c4fe7408 192.168.56.101:6382
slots:10923-16383 (5461 slots) master
S: 74f0fd0468eefad443bcd4627069d217e9213c72 192.168.56.101:6480
replicates 768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15
S: 4ce9eab1382bc2e1886c29df3b4263e701bf5e6e 192.168.56.101:6481
replicates 87d7a6fba680f6826fe680a73ab9ea692aa1b03f
S: 4d09704a783936c024305797dec32e5d1debe922 192.168.56.101:6482
replicates aba2eba21bbe0b39423afd940a40e692c4fe7408
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 192.168.56.101:6380)
M: 768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 192.168.56.101:6380
slots:0-5460 (5461 slots) master
M: 87d7a6fba680f6826fe680a73ab9ea692aa1b03f 192.168.56.101:6381
slots:5461-10922 (5462 slots) master
M: aba2eba21bbe0b39423afd940a40e692c4fe7408 192.168.56.101:6382
slots:10923-16383 (5461 slots) master
M: 74f0fd0468eefad443bcd4627069d217e9213c72 192.168.56.101:6480
slots: (0 slots) master
replicates 768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15
M: 4ce9eab1382bc2e1886c29df3b4263e701bf5e6e 192.168.56.101:6481
slots: (0 slots) master
replicates 87d7a6fba680f6826fe680a73ab9ea692aa1b03f
M: 4d09704a783936c024305797dec32e5d1debe922 192.168.56.101:6482
slots: (0 slots) master
replicates aba2eba21bbe0b39423afd940a40e692c4fe7408
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
查看集群节点信息
192.168.56.101:6380> cluster nodes
74f0fd0468eefad443bcd4627069d217e9213c72 192.168.56.101:6480 slave 768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 0 1468862135140 4 connected
4ce9eab1382bc2e1886c29df3b4263e701bf5e6e 192.168.56.101:6481 slave 87d7a6fba680f6826fe680a73ab9ea692aa1b03f 0 1468862137161 5 connected
87d7a6fba680f6826fe680a73ab9ea692aa1b03f 192.168.56.101:6381 master - 0 1468862133120 2 connected 5461-10922
768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 192.168.56.101:6380 myself,master - 0 0 1 connected 0-5460
aba2eba21bbe0b39423afd940a40e692c4fe7408 192.168.56.101:6382 master - 0 1468862138173 3 connected 10923-16383
4d09704a783936c024305797dec32e5d1debe922 192.168.56.101:6482 slave aba2eba21bbe0b39423afd940a40e692c4fe7408 0 1468862136149 6 connected
测试集群
1、添加和查询数据
192.168.56.101:6380> set abc 123
-> Redirected to slot [7638] located at 192.168.56.101:6381
OK
192.168.56.101:6480> get abc
-> Redirected to slot [7638] located at 192.168.56.101:6381
"123"
192.168.56.101:6480> keys *
(empty list or set)
[root@master redis-cluster]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6481 -c
192.168.56.101:6481> keys *
1) "abc"
添加和查询都正常,说明集群运行正常
2、测试集群中slave节点宕机
将6480节点kill掉,查看情况。
查看集群节点信息,发现6480已经断开连接:
192.168.56.101:6481> cluster nodes
aba2eba21bbe0b39423afd940a40e692c4fe7408 192.168.56.101:6382 master - 0 1468862952812 3 connected 10923-16383
87d7a6fba680f6826fe680a73ab9ea692aa1b03f 192.168.56.101:6381 master - 0 1468862953824 2 connected 5461-10922
74f0fd0468eefad443bcd4627069d217e9213c72 192.168.56.101:6480 slave,fail 768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 1468862829946 1468862827923 4 disconnected
4d09704a783936c024305797dec32e5d1debe922 192.168.56.101:6482 slave aba2eba21bbe0b39423afd940a40e692c4fe7408 0 1468862951799 3 connected
768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 192.168.56.101:6380 master - 0 1468862949770 1 connected 0-5460
4ce9eab1382bc2e1886c29df3b4263e701bf5e6e 192.168.56.101:6481 myself,slave 87d7a6fba680f6826fe680a73ab9ea692aa1b03f 0 0 5 connected
连接集群中的客户端,发现集群可用,可见从数据库宕机不会影响集群正常服务
192.168.56.101:6481> get abc
-> Redirected to slot [7638] located at 192.168.56.101:6381
"123"
192.168.56.101:6381> set k1 111
-> Redirected to slot [12706] located at 192.168.56.101:6382
OK
192.168.56.101:6382> get k1
"111"
192.168.56.101:6382>
[root@master redis-cluster]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6482 -c
192.168.56.101:6482> get k1
-> Redirected to slot [12706] located at 192.168.56.101:6382
"111"
192.168.56.101:6382>
[root@master redis-cluster]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6382 -c
192.168.56.101:6382> get k1
"111"
恢复6480服务:
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6480/redis.conf
测试6480中的数据:
192.168.56.101:6480> get k1
-> Redirected to slot [12706] located at 192.168.56.101:6382
"111"
3、测试集群中master宕机
假设6380宕机:
查看集群情况:
192.168.56.101:6382> cluster nodes
768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 192.168.56.101:6380 master,fail - 1468863435404 1468863431554 1 disconnected
4d09704a783936c024305797dec32e5d1debe922 192.168.56.101:6482 slave aba2eba21bbe0b39423afd940a40e692c4fe7408 0 1468863595024 6 connected
aba2eba21bbe0b39423afd940a40e692c4fe7408 192.168.56.101:6382 myself,master - 0 0 3 connected 10923-16383
74f0fd0468eefad443bcd4627069d217e9213c72 192.168.56.101:6480 master - 0 1468863594011 8 connected 0-5460
4ce9eab1382bc2e1886c29df3b4263e701bf5e6e 192.168.56.101:6481 slave 87d7a6fba680f6826fe680a73ab9ea692aa1b03f 0 1468863597051 5 connected
87d7a6fba680f6826fe680a73ab9ea692aa1b03f 192.168.56.101:6381 master - 0 1468863596038 2 connected 5461-10922
发现:
1、6380节点失效不可用
2、6480节点从slave转换为master
测试集群是否可用:
192.168.56.101:6382> get abc
-> Redirected to slot [7638] located at 192.168.56.101:6381
"123"
集群可用。
恢复6380,并查看集群信息
[root@master redis-cluster-master-slave]# /usr/local/bin/redis-server /opt/redis/redis-cluster-master-slave/6380/redis.conf
192.168.56.101:6382> cluster nodes
768ad8c6edc4b88b650bffc9ab0fd22f4e85ce15 192.168.56.101:6380
slave
74f0fd0468eefad443bcd4627069d217e9213c72 0 1468863759429 8 connected
4d09704a783936c024305797dec32e5d1debe922 192.168.56.101:6482 slave aba2eba21bbe0b39423afd940a40e692c4fe7408 0 1468863757408 6 connected
aba2eba21bbe0b39423afd940a40e692c4fe7408 192.168.56.101:6382 myself,master - 0 0 3 connected 10923-16383
74f0fd0468eefad443bcd4627069d217e9213c72 192.168.56.101:6480 master - 0 1468863754363 8 connected 0-5460
4ce9eab1382bc2e1886c29df3b4263e701bf5e6e 192.168.56.101:6481 slave 87d7a6fba680f6826fe680a73ab9ea692aa1b03f 0 1468863758418 5 connected
87d7a6fba680f6826fe680a73ab9ea692aa1b03f 192.168.56.101:6381 master - 0 1468863756394 2 connected 5461-10922
发现:
1、6380节点可用
2、6480依然是主节点
3、6380成为6480的从数据库
注:使用集群需要注意的事项
1、 多键的命令操作(如MGET、MSET),如果每个键都位于同一个节点,则可以正常支持,否则会提示错误。
2、 集群中的节点只能使用0号数据库,如果执行SELECT切换数据库会提示错误。
书生参考网络整理
redis知识点
redis快速入门
reids常用命令
redis数据结构
java_API_客户端
Jedis
Tlcache
redis_持久化
AOF
RDB
发布订阅(pub/sub)
redis_事件
redis事务
redis通讯协议
RESP(Redis Serialization Protocol)
redis高可用
redis哨兵
监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover)
redis主从复制
-
- 主从复制
- 从从复制
-
- slave向master发送sync命令;
- master开启子进程执行bgsave写入rdb文件;
- master发送缓存和RDB文件给slave;
- master发送数据发送给slave完成复制;
redis集群(Redis_Cluster)
相关问答
更多-
使用spring-data-redis集群redis,[2023-12-20]
用的是什么集群方式,JedisSentinelPool 还是ShardedJedisPool。 如果用的是前者,配置是需要连接sentinel端口的(默认26379),不是连接redis端口(6379)。 或者把spring相关配置文件贴出来一下。 127.0.0.1:26379 127.0.0.1:26380 127.0.0.1:26381 -
使用spring-data-redis集群redis,[2022-05-20]
用的是什么集群方式,JedisSentinelPool 还是ShardedJedisPool。 如果用的是前者,配置是需要连接sentinel端口的(默认26379),不是连接redis端口(6379)。 或者把spring相关配置文件贴出来一下。redis怎么使用[2024-01-20]
应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。 这样处理,主要是实时读写redis,而mysql数据则通过队列异步处理,缓解mysql压力,不过这种方法应用场景主要基于高并发,而且redis的高可用集群架构相对更复杂,一般不是很推荐。redis 没有什么持久化能主从复制吗[2022-10-05]
作用是复制一个与当前进程一样的进程,新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,也称为原进程的子进程。redis主从复制的延时怎么处理[2022-05-31]
应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键redis 如何判断是集群还是主从[2022-05-08]
redis主从复制 redis主从配置比较简单,基本就是在从节点配置文件加上:slaveof 192.168.33.130 6379 主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件重建内存表。 redis复制过程如下: 1、slave server启动连接到master server之后,salve server主动发送SYNC命令给master ser ...23,redis如何实现主从复制[2022-09-24]
redis主从复制 和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。 全量同步 Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: - 从服务器连接主服务器,发送SYNC命令; - 主服务器接收到SYNC命名后,开始执行B ...redis主从复制最好采用哪种结构[2022-08-21]
redis主从复制总结整理 主题 Redis Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件全量传输给slave,然后再将dump后的操作实时同步到slave中。让从服务器(slave server)成为主服务器(master server)的精确复制品。官方文档ReplicationHowto中提到以下特点: 一个master支持多个slave,slave可以接受其他slave的连接,作为其他slave的master,从而形成一个master-sl ...redis 如何判断是集群还是主从[2023-01-22]
redis主从复制 redis主从配置比较简单,基本就是在从节点配置文件加上:slaveof 192.168.33.130 6379 主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件重建内存表。 redis复制过程如下: 1、slave server启动连接到master server之后,salve server主动发送SYNC命令给master ser ...redis主从复制不能是守护进程吗[2022-04-11]
1. client在一个连接中发出multi命令时, 2. 这个连接会进入一个事务上下文, 3. 该连接后续的命令不会立即执行, 4. 而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令!