Redis集群基本概念
- 在实际项目中,一般不会只在一台机器上部署redis服务器,因为单台redis服务器不能满足高并发的压力,另外如果该服务器或者redis失效,整个系统就可能崩溃
- 项目里一般会用主从复制的模式来提升性能,用集群模式来提升吞吐量并提升可用性
基于主从复制模式的集群
- 在出从复制模式的集群里,主节点一般是一个,从节点一般是两个或者多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统就能切换到从节点去读写数据,从而提升系统的可用性
- 在采用主从复制模式里默认的读写分离机制,就能提升系统的缓存读写性能
- 在实际应用中,如果有相应的设置,在向一台redis服务器里写数据后,这个数据可以复制到另一台(或多台)redis服务器,这里数据源叫主服务器(master),复制数据目的地的服务器叫从服务器(slave)
主从复制模式的优势
- 可以把写操作集中到主服务器上,读操作集中到从服务器上,提升读写性能
- 由于出现了数据备份,因此能提升数据的安全性
主从复制模式集群实操
1.用命令搭建主从集群
这里用docker容器搭建一主二从的集群,在配置主从关系时,需要在从节点上使用slaveof命令
1.1创建主节点
docker run -itd --name redis-master -p 6379:6379 redis:latest
1.2创建从节点
这里因为在一台机器上,所以需要配置不同的端口
docker run -itd --name redis-slave1 -p 6380:6380 redis:latest
获取容器的ip
docker inspect redis-master|grep IPAddress
[root@localhost ~]# docker inspect redis-master|grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
进入主节点容器
docker exec -it redis-master /bin/bash
连接redis
redis-cli
查看主从关系
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:dfbc81120a9de962ff09133c757d50239238955a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
进入从节点
docker exec -it redis-slave1 /bin/bash
连接redis
redis-cli
使用slaveof配置从属关系
这里的ip 端口就是主节点的ip 端口
127.0.0.1:6379> slaveof 172.17.0.2 6379
OK
查看主从关系
另一个从节点和以上操作一样,注意端口
2.通过配置搭建主从集群
创建主节点容器
docker run -itd --name redis-master -p 6379:6379 redis:latest
准备redis-slave1和redis-slave2配置文件
其中主要的配置是:
slaveof 127.12.0.2 6379
创建从节点一的容器
docker run -itd --name redis-slave1 -v /root/redis/redis-slave1/redis.conf:/redisConfig/redisSlave1.conf -p 6380:6380 redis:latest redis-server /redisConfig/redisSlave1.conf
进入从节点一容器
docker exec -it redis-slave1 /bin/bash
连接redis并查看从属关系
root@f4cfaf03ffec:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:266
slave_priority:100
slave_read_only:1
connected_slaves:0
master_failover_state:no-failover
master_replid:1a8171720b8f1ebeb04c72020a2f05152f92006b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:266
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:266
从节点二创建也和上面类似,注意端口和配置即可
3.测试
在主节点上创建几个值
连接从节点进行查询
127.0.0.1:6379> get name
"yohoo"
127.0.0.1:6379> get age
"26"