一主从复制
主服务器接收客户端访问
从服务器自动同步主服务器数据
二 结构模式
一主一从 ,一主多从, 主从从
三哨兵服务
监视master 服务器
一主一从
Redis 服务运行后 ,默人都是master 服务器
1 配置从库
-
6351 > info replication -查看复制信息
-
6352 > slaveof 192.168.4.51 6351 临时配置
指定主服务器及其端口
3)root@ 6352 ] vim /etc/redis/6379.conf 永久配置
Slaveof 192.168.4.51 6351
Wq
4) 6352> info reploication
Role : slave
master_host:192.168.4.51
master_port:635
2 客户端链接51 插入信息
客户端连接52 查看信息
192.168.4.51:6351> set x 110
OK
192.168.4.52:6352> get x
“119”
一主多从
添加53 为51 从服务器 ,
6353 > slaveof 192.168.4.51 6353 临时添加53为从服务器
51 查看主从信息
192.168.4.51:6351> info replication
Replication
role:master
connected_slaves:2
slave0:ip=192.168.4.52,port=6352,state=online,offset=1231,lag=0
slave1:ip=192.168.4.53,port=6353,state=online,offset=1231,lag=1
主丛丛
将54主机添加53 从服务器(即是主又是从)
6354 > ;salveof 192.168.4.53 6353
客户端链接51 插入信息
客户端连接52\53 查看信息
***********************************
反客为主
将从库恢复为主库 54主机
192.168.4.54:6354> slaveof no one 临时设置
OK
192.168.4.54:6354> info replication
Replication
role:master
Vim /etc/redis/6379.conf
#slaveof 192.168.4.53 6353 -注释掉此行
***********************************
给主机51配置待验证的主从复制
1设置连接密码
Vim /etc/redis/6379.conf
501 requirepass 123456
Wq
51 52 需要配置密码 :Vim /etc/init.d/redis_6379
-h 1926.168.4.51 -p6351 -a 123456
/etc/init.d/redis_6379 start
2配置slave
从服务器指定主服务器的连接密码
52> info replication
53> info replication
Vim /etc/redis.6379.conf
289 行
Masterauth 123456
Stop
Start
52> info replication
**************************************
哨兵服务 此案例哨兵为52主机
1 Redis Sentinel 模式简介
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。
Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与redis集群可通讯的机器中监控redis集群。
Sentinel 网络 圣天诺; 近卫军团; 尖兵; 护卫者; 哨兵;
美 [ˈsentɪnl]
记忆技巧:sent 感觉 + in + el 人;总称 → 感觉危险的人 → 哨兵
哨兵作用:
监视master 服务器
Master 服务器宕机后,将从服务器升级为主服务器
2 )主要功能有一下几点
1、不时地监控redis是否按照预期良好地运行;
2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3、能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
4、哨兵为客户端提供服务发现,客户端链接哨兵,哨兵提供当前master的地址然后提供服务,如果出现切换,也就是master挂了,哨兵会提供客户端一个新地址。
3 )哨兵(sentinel)本身也是支持集群的
很显然,单个哨兵会存在自己挂掉而无法监控整个集群的问题,所以哨兵也是支持集群的,我们通常用三台哨兵机器来监控一组redis集群。
***********************************************************
配置哨兵服务
一配置文件
创建主配置文件 //etc/sentinel.conf
配置文件:
Vim /etc/sentinel.conf
Bind 0.0.0.0
Port 26379
Sentinel monitor server51 192.168.4.51 6351 1
Sentinel auth-pass server51 123456
52主机
Redis-sentinel /etc/sentinel.conf
51主机
/etc/init.d/redis_6379 stop
6352 > redis-cli -h 192.168.4.52 -p 6352 -a 123456
192.168.4.52:6352> info replication
Replication
role:master
环境准备
50主机
53主机
二 持久化
1 RDB
2 AOF
1 ) RDB Redis database
数据持久化方式之一
指定时间间隔,将内存数据保默认方式
存在硬盘
Snapshot 快照
恢复时,将快照直接读入内存
- 优化设置
1保存数据时间频率
Save 900 1
Save 300 10
Save 60 10000
2 RDB 文件名
Dbfilename “dump.rdb”
3)手动存盘
Save
Bgsave 不阻塞写存盘
百度上坑太多,如果你遇到搭建redis集群的时候出现这个错误在百度上找到解决办法基本上都是坑。
首先集群搭建完成后,你肯定去登陆redis进行测试
1.redis01/redis-cli -h “xxx.xxx.xxx.xxx” -p 8001 -c
登陆进去测试
xxx.xxx.xxx.xxx>set test aaa
报错(error) CLUSTERDOWN Hash slot not served
重点:
没有分配槽,因为redis集群要分配16384个槽来储存数据,那么没有分配槽则报如上错误
什么原因呢?
99%的原因是最后使用ruby来搭建集群的时候纯手贱错误操作
./redis-trib.rb create --replicas 1 xxx.xxx.xxx.xxx:8001 xxx.xxx.xxx.xxx:8002 xxx.xxx.xxx.xxx:8003 xxx.xxx.xxx.xxx:8004 xxx.xxx.xxx.xxx:8005 xxx.xxx.xxx.xxx:8006
上面执行完时会出现提示
Can I set the above configuration? (type ‘yes’ to accept):
你需要输入yes,而并非缩写 y,因为玩linux的都习惯的会输入 y,但是这里不行,要全拼yes才可以。
就是这个错误引起的分配槽失败。
50 注释掉集群
(error) CLUSTERDOWN Hash slot not served
********************************8
RDB 优点
大规模数据恢复,完整性不高
快,高性能的持久化体现-创建一个子进程执行持久化,先将数据写入临时文件,持久化结束后,在用这个临时文件替换上次持久化好的文件; 过程中主进程不做任何io操作
缺点
意外宕机,丢失最后一次持久化所有数据
***************************************
AOF
Append only file
追加方式记录写操作的文件
记录redis服务所有写操作
不断将新的写操作追加到文件的末尾
默认没有启用
可用cat查看文件内容
1 启用:
6350>Config set appendonly yes
6350>Config rewrite 写进配置文件
Ls /var/lib/redis/6379
appendonly.aof dump.rdb
2 备份数据:
Cp /varf/lib/redis/6379/appendonly.aof
53 恢复数据
拷贝备份文件
重启redis
rm -rf /var/lib/redis/6379/*
254 cp /root/appendonly.aof /var/lib/redis/6379/
255 ls /var/lib/redis/6379/
257 /etc/init.d/redis_6379 stop
258 /etc/init.d/redis_6379 start
259 redis-
cli -h 192.168.4.53 -p 6353
Keys *
3 优化配置
定义文件名
Appendonly yes
Appendonyanme “appendonly.aof”
Appendfsync always
Auto-aof-rewrite-min-size 64 mb 首次触发重写
Auto-aof-rewrite-percentage 100 再次重写 增长百分比
修复AOF 文件
[root@mysql53 6379]# cd /var/lib/redis/6379/
vim appendonly.aof
Redis-check-aof --fic appendonly.aof
Rm -rf /var/run/redis_6379.pid
/etc/init.d/redis_6379 start
Redis-cli -h 192.168.4.53 -p 6353
192.168.4.53:6353> keys *
- “c”
- “x”
- “v”
- “h”
- “jcosv”
4 AOF 优点缺点
优点
灵活设置永久持久化方式
出现宕机,仅仅可能丢失一秒数据
缺点
持久化文件体积通常会大于RDB方式
执行fsync策略的速度可能会比RDB 方式慢
***************************************
数据类型:
字符串 set mset
列表
Hash表
集合
有序集合
字符串
String
Set key value px millseconds nx xx
Set first “hello world”
Setrange key offset value 从偏移量开始复写key
set first “hello world”
OK
192.168.4.50:6350> setrange first 2 “girl”
(integer) 11Incr page
192.168.4.50:6350> get first
“hegirlworld”
Strlen first 统计长度
(integer) 11
append first myname 存在则追加,不存在则创建key
(integer) 17
192.168.4.50:6350> setbit peter 1 1
(integer) 0
192.168.4.50:6350> setbit peter 2 1
(integer) 0
192.168.4.50:6350> setbit peter 3 1
(integer) 0
192.168.4.50:6350> setbit peter 4 1
(integer) 0
192.168.4.50:6350> bitcount peter
(integer) 5
Decr key
Set level 0
Decr level
-1
-2
-3
Decr level 3
-3
Set page 1000
Incr page
(integer) 1001
Getrange key start end
192.168.4.50:6350> getrange first 2 5
“girl”
192.168.4.50:6350> get first
“hegirlworldmyname”
列表 list 一个字符队列
先进后出
一个变量存储多个值
<<—a b c—>>
Ipush name ixxi haha dc
Keys *
Get name 看不了
Type name
List
Ipush name lala dada xixi
Irange key start stop
Lrange name 0 - 1 输出所有
Lpop key 删除开头
Lrange name 0 -1
Lpop name
Llen key llen name
Lindex
Rpush
Rpop
哈希
Redis hash
一个变量有多列,每个列有不同值
Hset \ hmset
Hset site baidu baidu.com
Type
Hash
Get
error
Hget \ hmget keys
Hget site baidu
Hset site 163 www.163.com
Hget site 163
Hkeys keys\ site 查看hash所有名称
Hvals site
Hkeys site
Baidu 163
Hdel site 删除变量