redis集群

目录

一、redis集群模式

二、主从复制模式

1、主从复制原理

2、主从复制模式集群配置

1、实验环境

2、实验步骤

三、哨兵模式

1、工作原理

2、主要功能

3、发布和订阅模式

4、哨兵模式实验

四、Redis集群模式

1、Redis集群模式概括

2、Redis集群模式作用

3、Redis集群模式实验

一、redis集群模式

主从复制模式

哨兵模式:是为了弥补主从复制模式中主机宕机后,主备切换的复杂性而演变出来的。哨兵模式就是用来监控的,只要作用是监控主从集群,自动切换主备,完成集群故障转移

cluster三种模式:是官方提供集群模式,不仅实现了高可用、读写分离、也实现了真正的分布式存储

二、主从复制模式

1、主从复制原理

① 从redis开启同步服务,连接master发送sync命令

② 主服务器开始执行bgsave,派生一个fork子进程去做RDB快照,并使用缓存区记录bgsave之后的写命令

③ 主服务区bgsave完成以后,向从服务器发送快照文件,并继续缓存写的命令

④ 快照文件完成以后,向从服务器发送缓存写的命令。

⑤ 缓存写命令执行完后,以后每个写命令都会同步给从服务器

2、主从复制模式集群配置

1、实验环境

角色IP
master192.168.159.13
slave192.168.159.20
slave192.168.159.159

2、实验步骤

三台redis正常安装,之前的博客写了

①配置master节点

[root@master ~]# vim /etc/redis/6379.conf    ## 进入redis的配置文件


 bind 0.0.0.0                     ## 第70行修改加监听地址为0.0.0.0
 
daemonize yes                      ## 第137行开启守护进程

logfile /var/log/redis_6379.lo     ## 第172行指定日志文件目录位置
 
dir /var/lib/redis/6379            ## 第264行,指定工作目录

appendonly yes                     ## 第700行开启AOF持久化功能



[root@master bin]# /etc/init.d/redis_6379 restart         ## 重启redis服务
Stopping ...
Redis stopped
Starting Redis server...

②配置slave1和slave2节点(配置一样)

[root@slave1 ~]# vim /etc/redis/6379.conf    ## 进入redis的配置文件


 bind 0.0.0.0                     ## 第70行修改加监听地址为0.0.0.0
 
daemonize yes                      ## 第137行开启守护进程


logfile /var/log/redis_6379.lo     ## 第172行指定日志文件目录位置
 
dir /var/lib/redis/6379            ## 第264行,指定工作目录

replicaof 192.168.159.13 6379      ## 第288行指定同步的IP地址和端口


appendonly yes                     ## 第700行开启AOF持久化功能

[root@slave1 ~]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@slave1 ~]# ss -natp |grep 6379
LISTEN     0      128          *:6379                     *:*                   users:(("redis-server",pid=13420,fd=6))
TIME-WAIT  0      0      127.0.0.1:6379               127.0.0.1:57084              
ESTAB      0      0      192.168.159.20:35572              192.168.159.13:6379                users:(("redis-server",pid=13420,fd=8))

③在master上验证

[root@master bin]# redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.159.20,port=6379,state=online,offset=1750,lag=1
slave1:ip=192.168.159.159,port=6379,state=online,offset=1750,lag=1
master_replid:21a4e24bc8705e1a36ebcc5c2409d0931aed2c35
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1750
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1750

三、哨兵模式

在主从复制的基础上起到主节点自动故障转移的作用

1、工作原理

当主服务器中断服务后,可以将一个从服务器升级为主服务器,以便继续提供服务,但是这个过程需要人工手动来操作。为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。(先主观下线,后客观下线)

2、主要功能

① 监控主服务器和从服务器是否正常运行

② 主服务器出现故障时自动将从服务器转换为主服务器

3、发布和订阅模式

① 哨兵节点向master节点发送两条连接,命令连接和订阅连接

命令连接:用于建立连接,然后发送info请求,用于获取redis-master的信息,状态,role角色、offset段偏移量等

②订阅连接,为了方便后续获取master的数据

4、哨兵模式实验

①实验环境

角色IP
master192.168.159.13
slave1192.168.159.20
slave2192.168.159.159

② 哨兵配置文件,三台服务器都需要配置

[root@master ~]# vim /opt/redis-5.0.7/sentinel.conf 

protected-mode no  ## 17行取消注释,关闭保护模式

port 26379         ## 21行默认的监听端口

daemonize yes      ## 26行开启守护进程

logfile "/var/log/sentinel.log"  ## 36行指定日志存放位置

dir "/var/lib/redis/6379"  ## 65行指定数据库存放位置

sentinel monitor mymaster 192.168.159.13 6379 2 ##83行指定哨兵节点

sentinel down-after-milliseconds mymaster 30000 #判定服务器down掉的时间周期,默认30000毫秒(30秒)

sentinel parallel-syncs mymaster 1   

sentinel failover-timeout mymaster 180000   #146行,故障节点的最大超时时间为180000 (180秒 )

sentinel deny-scripts-reconfig yes


 
grep -v "^#\|^$" /opt/redis-5.0.7/sentinel.conf  查看配置的文件内容

protected-mode no
port 26379
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile "/var/log/sentinel.log"
dir "/var/lib/redis/6379" 
sentinel monitor mymaster 192.168.159.13 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

③开启哨兵模式 先开master ,再开启slave1和slave2

cd /opt/redis-5.0.7/  
redis-sentinel sentinel.conf &   ##后台启动哨兵

④在master上查看哨兵信息

[root@master redis-5.0.7]# redis-cli -p 26379 info sentinel 
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.159.13:6379,slaves=0,sentinels=3



四、Redis集群模式

1、Redis集群模式概括

① Redis集群模式就是,可以解决写的操作无法负载均衡,存储受到单机限制,以及故障自动切换功能的一种集群。

② 集群由多个节点组成,Redis的数据分布在这些节点中。

③ 集群中的节点分为主节点和从节点,只有主节点复制读写请求和集群信息的维护,从节点只进行主节点数据和状态信息的复制。
 

2、Redis集群模式作用

数据分区:数据分区(或称数据分片) 是集群最核心的功能。

① 集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加;
② 另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
③ Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及

高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似) ;当任一节点发生故障时,集群仍然可以对外提供服务

3、Redis集群模式实验

本实验使用一台虚拟机模拟

[root@zwb_redis01 ~]# cd /etc/redis/

[root@zwb_redis01 redis]# mkdir -p /etc/redis/redis-cluster/redis600{1..6}

[root@zwb_redis01 redis]# cd redis-cluster/redis6001

vim /opt/redis.sh

#!/bin/bash
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done


[root@zwb_redis01 redis]# cd /opt/

[root@zwb_redis01 opt]# sh redis.sh

[root@zwb_redis01 redis]# cd redis-cluster/
[root@zwb_redis01 redis-cluster]# ls
redis6001  redis6003  redis6005
redis6002  redis6004  redis6006



[root@zwb_redis01 redis-cluster]# ls /etc/redis/redis-cluster/*  ## 检验
/etc/redis/redis-cluster/redis6001:
redis-cli  redis.conf  redis-server

/etc/redis/redis-cluster/redis6002:
redis-cli  redis.conf  redis-server

/etc/redis/redis-cluster/redis6003:
redis-cli  redis.conf  redis-server

/etc/redis/redis-cluster/redis6004:
redis-cli  redis.conf  redis-server

/etc/redis/redis-cluster/redis6005:
redis-cli  redis.conf  redis-server

/etc/redis/redis-cluster/redis6006:
redis-cli  redis.conf  redis-server

配置集群配置文件

[root@zwb_redis01 redis-cluster]# ls
redis6001  redis6002  redis6003  redis6004  redis6005  redis6006
[root@zwb_redis01 redis-cluster]# cd redis6001
[root@zwb_redis01 redis6001]# ls
redis-cli  redis.conf  redis-server
[root@zwb_redis01 redis6001]# vim redis.conf 

 69行 #bind 127.0.0.1      #将其注释,即监听所有端口
  88行 protected-mode no    #关闭保护模式
  92行 port 6001            #为了区分,将端口更改,6个不能相同
  136行 daemonize yes          #开启守护进程
  699行 appendonly yes      #开启AOF持久化
  832行 cluster-enabled yes #开启集群功能
  840行 cluster-config-file nodes-6001.conf  #群集名称文件设置
  846行 cluster-node-timeout 15000  #群集超时时间设置

将配置好6001的配置文件,拷贝到另外6002-6006中,修改为各自端口

启动redis 节点

[root@zwb_redis01 redis6002]# cd /opt                

[root@zwb_redis01 opt]# vim /opt/redisqidong.sh

#!/bin/bash
for i in {1..6}
do
cd /etc/redis/redis-cluster/redis600$i
redis-server redis.conf
done
~                                                                                               
~     
           
[root@zwb_redis01 opt]# source redisqidong.sh         ### 启动
8565:C 06 Oct 2022 02:51:04.526 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8565:C 06 Oct 2022 02:51:04.526 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=8565, just started
8565:C 06 Oct 2022 02:51:04.526 # Configuration loaded
8567:C 06 Oct 2022 02:51:04.572 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8567:C 06 Oct 2022 02:51:04.572 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=8567, just started
8567:C 06 Oct 2022 02:51:04.572 # Configuration loaded
8572:C 06 Oct 2022 02:51:04.593 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8572:C 06 Oct 2022 02:51:04.593 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=8572, just started
8572:C 06 Oct 2022 02:51:04.593 # Configuration loaded
8577:C 06 Oct 2022 02:51:04.623 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8577:C 06 Oct 2022 02:51:04.623 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=8577, just started
8577:C 06 Oct 2022 02:51:04.623 # Configuration loaded
8582:C 06 Oct 2022 02:51:04.655 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8582:C 06 Oct 2022 02:51:04.655 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=8582, just started
8582:C 06 Oct 2022 02:51:04.655 # Configuration loaded
8587:C 06 Oct 2022 02:51:04.681 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8587:C 06 Oct 2022 02:51:04.681 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=8587, just started
8587:C 06 Oct 2022 02:51:04.681 # Configuration loaded      

启动集群

[root@zwb_redis01 redis6006]# redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6005 to 127.0.0.1:6001
Adding replica 127.0.0.1:6006 to 127.0.0.1:6002
Adding replica 127.0.0.1:6004 to 127.0.0.1:6003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cf9f910ec86d8342a1b2d9772d16a08b284e6c3d 127.0.0.1:6001
   slots:[0-5460] (5461 slots) master
M: d313359d96331c3a29feb8c7190840988495ca90 127.0.0.1:6002
   slots:[5461-10922] (5462 slots) master
M: cde875e1ff8ee6139c7ed08c5e9ec277eaad899e 127.0.0.1:6003
   slots:[10923-16383] (5461 slots) master
S: ac9604817c45821d6c96ca316ca9f86396e3d2fd 127.0.0.1:6004
   replicates cde875e1ff8ee6139c7ed08c5e9ec277eaad899e
S: 862e44292efd5ab7521cb74c89da7d2792e90a02 127.0.0.1:6005
   replicates cf9f910ec86d8342a1b2d9772d16a08b284e6c3d
S: b596e7774f1a1e39c54a862b588e90f4a255ac21 127.0.0.1:6006
   replicates d313359d96331c3a29feb8c7190840988495ca90
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 127.0.0.1:6001)
M: cf9f910ec86d8342a1b2d9772d16a08b284e6c3d 127.0.0.1:6001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 862e44292efd5ab7521cb74c89da7d2792e90a02 127.0.0.1:6005
   slots: (0 slots) slave
   replicates cf9f910ec86d8342a1b2d9772d16a08b284e6c3d
S: ac9604817c45821d6c96ca316ca9f86396e3d2fd 127.0.0.1:6004
   slots: (0 slots) slave
   replicates cde875e1ff8ee6139c7ed08c5e9ec277eaad899e
S: b596e7774f1a1e39c54a862b588e90f4a255ac21 127.0.0.1:6006
   slots: (0 slots) slave
   replicates d313359d96331c3a29feb8c7190840988495ca90
M: d313359d96331c3a29feb8c7190840988495ca90 127.0.0.1:6002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: cde875e1ff8ee6139c7ed08c5e9ec277eaad899e 127.0.0.1:6003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

测试

[root@zwb_redis01 redis6006]# redis-cli -p 6001 -c       ## 哈希槽的分配
127.0.0.1:6001> cluster slots
1) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 6001                                ## 主
      3) "cf9f910ec86d8342a1b2d9772d16a08b284e6c3d"
   4) 1) "127.0.0.1"
      2) (integer) 6005                                ## 从
      3) "862e44292efd5ab7521cb74c89da7d2792e90a02"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 6002                                ## 主
      3) "d313359d96331c3a29feb8c7190840988495ca90"
   4) 1) "127.0.0.1"
      2) (integer) 6006                                ## 从
      3) "b596e7774f1a1e39c54a862b588e90f4a255ac21"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 6003                                 ## 主
      3) "cde875e1ff8ee6139c7ed08c5e9ec277eaad899e"
   4) 1) "127.0.0.1"
      2) (integer) 6004                                 ## 从
      3) "ac9604817c45821d6c96ca316ca9f86396e3d2fd"

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值