Redis主从与集群配置

来源:互联网 发布:js 点击显示modal 编辑:程序博客网 时间:2024/05/19 00:39

Redis持久化
rdb方式:
RDB方式的持久化是通过快照完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘
RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:

   save  900  1   save  300  10   save  60   10000     save开头的一行就是持久化配置,可以配置多个条件(每行配置一个条件),每个条件之间是"或"的关系,"save 900 1"表示15分钟内至少1个键被更改则进行快照     Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存;根据数据量大小与结构和服务器性能不同,这个时间也不同;通常将记录一千万个字符串类型键,大小为1GB的快照文件载入到内存中需要花费20~30秒中

问题总结: 通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据;如果数据很重要以至于无法承受任何损失,则……

aof方式:

     appendonly  yes    [将no改为yes,这样aof方式的持久化就开启]

redis主从复制:
为了高可用,引入redis的主从复制的概念:
第一步:复制一个redis
第二步:在redis.conf文件中的端口改为6380
第三步:打开slaveof注释并将主机的ip和端口配置 slaveof minimaster 6379
从机是只读的

Redis集群

 1.集群通信是通过"ping-pong"机制进行通信 2.客户端不需要将所有的节点都连接上,只需要连接其中一个节点即可 3.集群中存储数据是存储到一个个的槽中,集群中槽的个数是固定的:16384;槽的编号是[0-16383];在集群中存储数据时,会根据key进行计算,计算出一个结果,然后将这个结果和16384取余,余数就是这个key将要存储的槽的编号 4.槽的编号之间不能断开 5.槽的计算会将数据保存的很平均,不会产生一个槽满一个槽空的情况

redis-cluster投票:容错
什么时候整个集群不可用(cluster_state:fail)??

    1.如果集群任意master挂掉,且当前master没有slave,集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态    2.如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态

集群搭建:
由于集群的脚本是ruby语言编写的,所以需要准备ruby的环境
安装ruby:
yum install -y ruby
yum install -y rubygems

安装ruby和redis的接口程序
拷贝redis-3.0.0.gem至 /usr/local下
执行:
gem install /usr/local/redis-3.0.0.gem

集群环境最少要三台机器(master),每个主机都需要配置一个从机,即总共需要6台机器
6台机器的端口号如下:
7001 7002 7003 7004 7005 7006

在 /usr/local 下新建rediscluster
mkdir redisicluster
cp /usr/local/redis /usr/local/rediscluster
cd /usr/local/rediscluster
mv redis redis01
cp ./redis01 ./redis02 …….
这里写图片描述
分别修改端口:(redis.conf)
port: 7001 / 7002 / 7003 / 7004 / 7005 / 7006
cluster-enable => yes
cp /usr/local/redis-3.0.0.gem/src/redis-trib.rb /usr/local/rediscluster
这里写图片描述
cd /usr/local/rediscluster
vi start-all.sh [启动脚本]
#!/bin/bash
cd redis01/bin
./redis-server redis.conf
cd ../..
cd redis02/bin
./redis-server redis.conf
cd ../..
cd redis03/bin
./redis-server redis.conf
cd ../..
cd redis04/bin
./redis-server redis.conf
cd ../..
cd redis05/bin
./redis-server redis.conf
cd ../..
cd redis06/bin
./redis-server redis.conf
cd ../..

sh start-all.sh
[权限不够] chown 777 start-all.sh
启动成功:

执行命令:       ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

启动前检查redis0X里面是否有dump.rdb和nodes.conf
若有则会执行脚本后,出现以下错误:
这里写图片描述

解决方案
这里写图片描述

成功:
这里写图片描述

原创粉丝点击