分布式--Redis持久化策略、主从复制、集群

一、持久化策略

上篇提到Redis和memcached对比,还具有持久化功能,Redis支持两种持久化策略:

策略 描述 优点 缺点
rdb 默认模式,可以在指定间隔时间内生成数据快照,默认保存到dump.rdb文件中,每次重启会从该文件中读取 数据保存在子进程中,对主进程影响小;rdb是紧凑型文件,恢复数据效率高于aof 保存点之间redis崩溃,可能会丢失数据;子进程fork时,数据量过大导致的性能低下
aof 执行修改数据的操作,直接同步到数据库文件中 数据安全性高 文件大小大于rdb,效率较慢

开启aof需要修改配置文件:

# 开启aof
appendonly yes
# 保存的文件名
appendfilename "appendonly.aof"

二、主从复制

Redis支持一主多从,保证节点的高可用,节点有多个复制品(replica)构成,其中一个为主(master),其余的为从(slave)
主从复制可以对主节点数据备份,提升容灾能力。在Redis中,主节点一般用作写数据,从节点只具备读数据功能,因而实现读写分离,提高集群性能

1. 主从环境搭建

我们需要使用多个redis来模拟多台服务器,在redis安装目录/usr/local/redis新建一个replica目录,并在其中创建masterslave1slave2目录

mkdir replica
cd replica
mkdir master
mkdir slave1
mkdir slave2

将redis下的bin目录分别复制到三个目录中

cp -r bin ./replica/master
cp -r bin ./replica/slave1
cp -r bin ./replica/slave2

2. 修改主从配置

目前主机的端口为:6379

修改两个从机的配置,一个设置为6380,一个设置为6381

# 端口
port 6380
# 主机ip和端口
replicaof 192.168.42.4 6379

3. 启动三个redis

编写shell脚本:

vi start.sh

内容为:

cd /usr/local/redis/replica/master/bin
./redis-server redis.conf
cd /usr/local/redis/replica/slave1/bin
./redis-server redis.conf
cd /usr/local/redis/replica/slave2/bin
./redis-server redis.conf

赋予权限并执行:

chmod 777 start.sh
./start.sh

查看进程:

三个redis都正常启动完成了

4. 测试主从

4.1 主机写数据

我们通过主机写数据,进入主机的客户端:

cd /usr/local/redis/replica/master/bin/
./redis-cli

写入数据:

set info hello

还可以使用info命令查看主机的状态:


可以看到两个从机已经确立了主从关系

4.2 从机读数据

进入从机的客户端,使用-p指定6380端口:

cd /usr/local/redis/replica/slave1/bin
./redis-cli -p 6380

读取数据:

get info

结果:

4.3 主机宕机

将主机关闭,客户端中使用shutdown

shutdown

进程查看,已经关闭了:

此时使用从机获取刚刚的数据依然有效:

三、哨兵

主从复制可以实现主机节点宕机后,依然可以获取从节点的数据,可用性确实提高了,但是从节点只能读不能写,这也是一个致命的问题。哨兵就是为了解决从机不可写而产生的,一旦发现主机宕机,那么哨兵将通过检举,提升一台从机为主机,因而使之拥有写能力,哨兵可以配置多台

1. 配置文件

将redis解压完的目录下的sentinel.conf文件复制三份到上面三个redis中

cp ./sentinel.conf /usr/local/redis/replica/master/bin/
cp ./sentinel.conf /usr/local/redis/replica/slave1/bin/
cp ./sentinel.conf /usr/local/redis/replica/slave2/bin/

修改内容为:

# 改端口 ,推荐使用2+对应redis的端口
port 26379
# 后台进程
daemonize yes
# 出错日志存放路径
logfile “/usr/local/redis/replica/master/26379.log”
# 哨兵监听的主机ip和端口 后面2是表示2台哨兵发现后才触发从机升级
sentinel monitor mymaster 192.168.93.10 6379 2
# 改端口 ,推荐使用2+对应redis的端口
port 26380
# 后台进程
daemonize yes
# 出错日志存放路径
logfile “/usr/local/redis/replica/slave1/26380.log”
# 哨兵监听的主机ip和端口 后面2是表示2台哨兵发现后才触发从机升级
sentinel monitor mymaster 192.168.93.10 6379 2
# 改端口 ,推荐使用2+对应redis的端口
port 26381
# 后台进程
daemonize yes
# 出错日志存放路径
logfile “/usr/local/redis/replica/slave2/26381.log”
# 哨兵监听的主机ip和端口 后面2是表示2台哨兵发现后才触发从机升级
sentinel monitor mymaster 192.168.93.10 6379 2

2. 启动哨兵

在启动哨兵之前,记得先把redis启动

./redis-sentinel ./sentinel.conf

3. 测试

接着把主机关闭:

在从机中查看状态,可以看到上升为主机了:

接着测试下写功能:

四、集群

哨兵解决了从节点不可写的问题,但没能解决负载均衡,集群解决了写操作的负载均衡,并可以水平扩展,在Redis中,超过1/2的节点不可用,那么整个集群就不可用了,所以我们都是搭建奇数台Redis服务器

1. 环境搭建

复制6份redis的bin目录到三个文件夹下:

cd /usr/local/redis
mkdir cluster
cp -r bin cluster/cluster-7001
cp -r bin cluster/cluster-7002
cp -r bin cluster/cluster-7003
cp -r bin cluster/cluster-7004
cp -r bin cluster/cluster-7005
cp -r bin cluster/cluster-7006

2. 修改配置文件

redis.conf配置文件修改以下内容:

port 7001
# 取消注释,开启集群功能
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
daemonize yes
protected-mode no
pidfile /var/run/redis_7001.pid
port 7002
# 取消注释,开启集群功能
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 15000
daemonize yes
protected-mode no
pidfile /var/run/redis_7002.pid
port 7003
# 取消注释,开启集群功能
cluster-enabled yes
cluster-config-file nodes-7003.conf
cluster-node-timeout 15000
daemonize yes
protected-mode no
pidfile /var/run/redis_7003.pid

剩余的4-6也进行配置

3. 启动Redis

-bash-4.2# pwd
/usr/local/redis/cluster

vi start-cluster.sh

内容为:

./cluster-7001/redis-server ./cluster-7001/redis.conf
./cluster-7002/redis-server ./cluster-7002/redis.conf
./cluster-7003/redis-server ./cluster-7003/redis.conf
./cluster-7004/redis-server ./cluster-7004/redis.conf
./cluster-7005/redis-server ./cluster-7005/redis.conf
./cluster-7006/redis-server ./cluster-7006/redis.conf

修改执行权限:

chmod 777 ./start-cluster.sh

启动Redis:

./start-cluster.sh 

进程查询:

4. 启动集群

上面只是启动了Redis,但想让多个Redis建立集群关系,还需使用下面命令(Redis5以上):

./redis-cli --cluster create 192.168.42.4:7001 192.168.42.4:7002 192.168.42.4:7003 192.168.42.4:7004 192.168.42.4:7005 192.168.42.4:7006 --cluster-replicas 1

--cluster-replicas 1 表示1台主机对应1台从机

执行后,输入yes

5. 测试

进入客户端,注意加上-c

./redis-cli -p 7001 -c

结果:

以上就是Redis的基本使用和配置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容