Linux系统集群部署:(Cluster)
redis集群部署也是实现redis故障转移的方案之一,也就是高可用性(支持主从复制和节点的自动故障转移)。还有另一个作用就是:数据分区(集群将数据分散到多个节点,⼀⽅⾯突破了Redis单机内存⼤⼩的限制,存储容量⼤⼤增加。另⼀⽅⾯每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力)。主从部署及哨兵部署等,每个节点都包含了完整的主数据,并不是真正的分布式运行模式。
而Redis 集群是 Redis 的⼀种分布式运⾏模式,它通过分⽚(sharding)来提供数据的⾃动分区和管理,从⽽实现数据的⾼可⽤性和可扩展性。
在集群模式下,数据被分割成多个部分(称为槽或slots),分布在多个 Redis 节点上。
1. Redis集群的数据分⽚
Redis集群引⼊了哈希槽的概念 Redis集群有16384个哈希槽(编号0-16383) 集群的每个节点负责⼀部分哈希槽, 每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接⾃动跳转到这个对应的节点上进⾏存取操作:
以3个节点组成的集群为例: 节点A包含0到5460号哈希槽 ,节点B包含5461到10922号哈希槽, 节点C包含10923到16383号哈希槽。
Redis集群的主从复制模型 集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽⽽不可以⽤。
为每个节点添加⼀个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1为主节点继续服务。当B和B1都失败后,集群将不可⽤。
2. Reids 集群部署
Redis Cluster被配置为三主三从模式。这意味着每台服务器上的两个Redis节点中,⼀个节点作为主库(master),另⼀个作为从库(slave)。
基于主从架构的基础上,我们会在每一个机器上部署一个6380的redis服务,也就是每个机器上有2个redis服务。也就不能用redis.conf来启动服务了,因为一个redis.conf文件不能同时启用2个服务。
1.4.3.2. redis 集群配置准备
1首先创建一个cluster文件夹,这里面会存储两个redis服务的redis.conf配置,以及两个服务的日志。只不过是以端口区分。
2同时在redis下也创建一个cluster,存放的是两个redis服务的工作目录。也会按照端口进行区分。
3需要注意的是我们三台机器上的6379,6380的服务是完全一样的,只是ip端口不同。因此我们在配置一个机器的时候,另外两个机器的配置可以直接复制过去。先依次修改6379的文件,再依次修改6380的文件。
命令:
-- 创建集群配置文件夹,将下面的2行配置复制过去,另外两个机器重复这个过程 mkdir -p /opt/software/redis/redis-stable/cluster mkdir -p /opt/software/redis/cluster vim ./cluster/redis_6379.conf vim ./cluster/redis_6380.conf -- 配置⽂件准备完成之后,启动所有redis服务,⽤cluster配 置⽂件 redis-server ./cluster/redis_6379.conf redis-server ./cluster/redis_6380.conf -- 检查服务 ps aux | grep redis -- 创建三主三从集群模式,每⼀个主节点带⼀个从节点 redis-cli --cluster create --cluster-replicas 1 192.168.75.129:6379 192.168.75.129:6380 192.168.75.131:6379 192.168.75.131:6380 192.168.75.132:6379 192.168.75.132:6380 -- 查看集群信息 redis-cli cluster info -- 查看单个节点信息 redis-cli info replication -- 查看集群节点身份信息 redis-cli cluster nodes 19-- 停⽌redis服务 redis-cli -p 6379 shutdown redis-cli -p 6380 shutdown
6379配置 文件
# 允许所有的IP地址 bind * -::* # 后台运⾏ daemonize yes # 允许远程连接 protected-mode no # 开启集群模式 cluster-enabled yes # 集群节点超时时间 cluster-node-timeout 5000 # 配置数据存储⽬录 dir "/opt/software/redis/cluster" # 开启AOF持久化 appendonly yes # 端⼝ port 6379 # log⽇志 logfile "/opt/software/redis/redis-stable/cluste r/redis6379.log" # 集群配置⽂件 cluster-config-file nodes-6379.conf # AOF⽂件名 appendfilename "appendonly6379.aof" # RBD⽂件名 dbfilename "dump6379.rdb"
6380配置
# 允许所有的IP地址 bind * -::* # 后台运⾏ daemonize yes # 允许远程连接 protected-mode no # 开启集群模式 cluster-enabled yes # 集群节点超时时间 cluster-node-timeout 5000 # 配置数据存储⽬录 dir "/opt/software/redis/cluster" # 开启AOF持久化 appendonly yes # 端⼝ port 6380 # log⽇志 logfile "/opt/software/redis/redis-stable/cluste r/redis6380.log" # 集群配置⽂件 cluster-config-file nodes-6380.conf # AOF⽂件名 appendfilename "appendonly6380.aof" # RBD⽂件名 dbfilename "dump6380.rdb"
启动6379的服务后,查看下进程:ps aux|grep redis 。这时我们的三台机器上都分别运行了2个cluster服务。
然后使用命令创建集群:注意改成自己的ip及端口。这个命令只需要在一台机器上执行就可以。也就是在129,7号机上执行的。
-- 创建三主三从集群模式,每⼀个主节点带⼀个从节点 redis-cli --cluster create --cluster-replicas 1 192.168.75.129:6379 192.168.75.129:6380 192.168.75.131:6379 192.168.75.131:6380 192.168.75.132:6379 192.168.75.132:6380
回复yes。
然后查看集群信息:
redis-cli cluster inf
也可以查看
-- 查看单个节点信息 redis-cli info replication
可以看到6379的这个节点的端口是master的角色,因为我们没有指明端口的情况下,他默认的就是6379.它的从节点是131的6380
此外,我们还可以:查看节点的配置
-- 查看集群节点身份信息 redis-cli cluster node
可以看到3个master节点,以及分别对应的槽位。也可以根据编号查看对应的从节点。已经搭建完成。
模拟故障转移:
比如129的主节点6379如果故障,那么它的从节点131的6380应该晋升为主节点。
将129的6379的服务干掉:redis-cli shutdown
然后直接查看131的6380角色:redis-cli -p 6380 info replication
将129的6379的服务恢复后,它也有了自己的小弟:
本文原创,转载必追究版权。