redis的持久化和主从复制及redis集群

 

目录

 

一、redis的持久化

第一种持久化方式: RDB

第二种持久化方式:AOF

二、redis的主从复制

2.1 主从配置

2.1.1 主redis配置:无需任何配置

2.1.2 从redis配置:

        修改从redis服务器上的redis.conf文件,添加slaveof 主redis ip 主redis端口

 2.2 主从复制的过程

三、redis集群

3.1 redis集群是多少台?

3.2 为什么集群中有一台挂了,则整个集群都挂了呢?

3.3redis集群搭建

3.3.1 集群环境搭建

3.3.2.搭建步骤


一、redis的持久化

        Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

第一种持久化方式: RDB

         RDB方式持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。

​         RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:

save 900 1  #900秒内容如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000 #表示60秒内如果超过10000个key被修改,则发起快照保存

RDB持久化的优缺点:

优点: 让redis的数据存取速度变快

缺点:服务器断电时会丢失部分数据(数据的完整性得不到保证)

第二种持久化方式:AOF

默认情况下Redis没有开启AOF(append onlyfile)方式的持久化,可以通过配置redis.conf开启appendonly参数:

appendonly yes

AOF持久化策略:

#appendfsync always   #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
#appendfsync no        #从不同步。高效但是数据不会被持久化。

 AOF持久化的优缺点:

优点:持久化良好,能包证数据的完整性

缺点:大大降低了redis系统的存取速度

二、redis的主从复制

        持久化保证了即使redis服务重启也会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障

 

说明:

  • 主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。

  • 主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。

  • 只有一个主redis,可以有多个从redis。

  • 主从复制不会阻塞master,在同步数据时,master可以继续处理client 请求

  • 一个redis可以即是主又是从

2.1 主从配置

2.1.1 主redis配置:无需任何配置

2.1.2 从redis配置:

        修改从redis服务器上的redis.conf文件,添加slaveof 主redis ip 主redis端口

 2.2 主从复制的过程

过程图:

 过程说明:

        a.从 会往 主 发送sync命令(同步)
        b.主 会往 从 发送rdb文件
        c.主 会往 从 发送写命令

注意:主死了从只能读

三、redis集群

架构图:

 

3.1 redis集群是多少台?

        redis集群最少是6台,原因是投票容错要超过半数:3台(主),然后为了redis高可用需要给三台主redis配置三台从redis

3.2 为什么集群中有一台挂了,则整个集群都挂了呢?

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),节点的fail是通过集群中超过半数的节点检测失效时才生效.

 (2)存取数据时连接任一节点都可以,但集群中有一个节点fail整个集群都会fail

 

redis集群中有16384个槽分给了3个节点,存取数据时根据crc16(key)%16384=0~16383 这样一个算法给要存储的数据分配一个槽,如果如上图Server1挂了,那么数据就没法存储,所以整个集群都挂了

3.3redis集群搭建

Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。

Redis集群至少需要6台服务器。

搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006

3.3.1 集群环境搭建

[root@upload ~]# yum install ruby
[root@upload ~]# yum install rubygems
[root@upload ~]# gem install redis-3.0.0.gem

Successfully installed redis-3.0.0

1 gem installed

Installing ri documentation for redis-3.0.0...

Installing RDoc documentation for redis-3.0.0...

[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr  1  2015 redis-trib.rb

3.3.2.搭建步骤

注意:必须删除dump.rdb和appendonly.aof文件

搭建伪分布式,需要6个redis实例放到/usr/local/redis-cluster目录下,并且运行在不同的端口7001-7006

cp -r  /usr/local/redis  /usr/local/redis-cluster/redis-7001

3.3.3.创建6个redis实例

每个实例运行在不同的端口。还需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。

 

3.3.4.启动每个redis实例

创建启动集群的脚本:start-all.sh 放在/usr/local/redis-cluster目录下。

cd redis-7001
./bin/redis-server bin/redis.conf
cd ..
cd redis-7002
./bin/redis-server bin/redis.conf
cd ..
cd redis-7003
./bin/redis-server bin/redis.conf
cd ..
cd redis-7004
./bin/redis-server bin/redis.conf
cd ..
cd redis-7005
./bin/redis-server bin/redis.conf
cd ..
cd redis-7006
./bin/redis-server bin/redis.conf
cd .. 
[root@localhost redis-cluster]# chmod 777 start-all.sh

创建关闭集群的脚本:shutdown-all.sh,放在/usr/local/redis-cluster目录下。

cd redis-7001
./redis7001/ bin/redis-cli -p 7001 shutdown
./redis7001/ bin/redis-cli -p 7002 shutdown
./redis7001/ bin/redis-cli -p 7003 shutdown
./redis7001/ bin/redis-cli -p 7004 shutdown
./redis7001/ bin/redis-cli -p 7005 shutdown
./redis7001/ bin/redis-cli -p 7006 shutdown
[root@localhost redis-cluster]# chmod 777shutdown-all.sh

3.3.5.使用ruby搭建集群

使用ruby脚本搭建redis集群

 cd /usr/upload/redis-3.0.0/src
./redis-trib.rb create --replicas 1 192.168.184.134:7001 192.168.184.134:7002 192.168.184.134:7003 192.168.184.134:7004 192.168.184.134:7005 192.168.184.134:7006

成功:

[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006
>>> Creating cluster
Connecting to node 192.168.25.153:7001: OK
Connecting to node 192.168.25.153:7002: OK
Connecting to node 192.168.25.153:7003: OK
Connecting to node 192.168.25.153:7004: OK
Connecting to node 192.168.25.153:7005: OK
Connecting to node 192.168.25.153:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.25.153:7001
192.168.25.153:7002
192.168.25.153:7003
Adding replica 192.168.25.153:7004 to 192.168.25.153:7001
Adding replica 192.168.25.153:7005 to 192.168.25.153:7002
Adding replica 192.168.25.153:7006 to 192.168.25.153:7003
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
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.25.153:7001)
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   slots: (0 slots) master
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   slots: (0 slots) master
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   slots: (0 slots) master
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost redis-cluster]#

3.3.6.测试

启动时使用-c参数来启动集群模式,命令如下:

./redis-cli -c -p 7001

 

3.3.7. redis cluster命令

cluster info   #打印集群的信息

cluster nodes  #列出集群当前已知的所有节点(node),以及这些节点的相关信息 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值