-
主从复制
1.1 主从复制结构模式
一主一从 一主多从 主从从
1.1.1 主从复制工作原理
1)slave向master发送sync命令
2)master启动后台存盘进程,并收集所有修改数据命令
3)master完成后台存盘后,传送整个数据文件到slave
4)slave接收数据文件,加载到内存中完成首次完全同步
5)后续有新数据产生时,master继续将新的数据收集到的修改命令依次传给slave,完成同步1.2 命令行配置(一主一从)
[root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352
命令格式:slaveof 主库Ip地址 端口号
192.168.4.52:6352> slaveof 192.168.4.51 6351 192.168.4.52:6352> info replication #查看赋值信息 # Replication role:slave #角色 master_host:192.168.4.51 #主库Ip地址 master_port:6351 #主库端端口 master_link_status:up #与主库连接状态 ... slave_read_only:1 #从服务器只能查看 ...
1.2.1 反客为主
- 将从库恢复为主库[root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> slaveof no one [root@mysql52 ~]# vim /etc/redis/6379.conf 283 #slaveof 192.168.4.51 6351 :wq [root@mysql52 ~]# /etc/init.d/redis_6379 stop [root@mysql52 ~]# /etc/init.d/redis_6379 start
1.3 永久配置
[root@mysql52 ~]# vim /etc/redis/6379.conf 283 slaveof 192.168.4.51 6351 :wq [root@mysql52 ~]# /etc/init.d/redis_6379 stop [root@mysql52 ~]# /etc/init.d/redis_6379 start
1.3.1 一主多从(192.168.4.51主 192.168.4.52和192.168.4.53 从)
[root@mysql53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> slaveof 192.168.4.51 6351 192.168.4.53:6353> info replication [root@mysql53 ~]# vim /etc/redis/6379.conf 283 slaveof 192.168.4.51 6351 :wq [root@mysql53 ~]# /etc/init.d/redis_6379 stop [root@mysql53 ~]# /etc/init.d/redis_6379 start
1.3.2 主从从(192.168.4.51和192.168.4.53主 192.168.4.54从)
[root@mysql54 ~]# redis-cli -h 192.168.4.54 -p 6354 192.168.4.54:6354> slaveof 192.168.4.53 6353 [root@mysql53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> info replication ... slave0:ip=192.168.4.54,port=6354,state=online,offset=2092,lag=1 [root@mysql54 ~]# vim /etc/redis/6379.conf 283 slaveof 192.168.4.53 6353 :wq [root@mysql54 ~]# /etc/init.d/redis_6379 stop [root@mysql54 ~]# /etc/init.d/redis_6379 start
1.4 配置带验证的主从复制(主从都配置master和slave密码)
1.4.1 配置master
-
设置连接密码.重启服务
[root@mysql51 ~]# vim +501 /etc/redis/6379.conf 501 requirepass 123456 #定义连接密码 :wq [root@mysql51 ~]# /etc/init.d/redis_6379 stop [root@mysql51 ~]# /etc/init.d/redis_6379 start
1.4.2 配置slave
-
设置连接密码,重启服务
[root@mysql52 ~]# vim +289 /etc/redis/6379.conf 290 masterauth 123456 #主库密码 :wq [root@mysql52 ~]# /etc/init.d/redis_6379 stop [root@mysql52 ~]# /etc/init.d/redis_6379 start
1.4.3 命令行设置密码(192.168.4.53 192.168.4.54)
[root@mysql53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> CONFIG set masterauth 123456 #命令行设置密码 192.168.4.53:6353> CONFIG REWRITE #永久生效 [root@mysql53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> config set requirepass 123456 192.168.4.53:6353> keys * (error) NOAUTH Authentication required. 192.168.4.53:6353> auth 123456 192.168.4.53:6353> config get requirepass 192.168.4.53:6353> CONFIG REWRITE 192.168.4.54:6353> info replication [root@mysql54 ~]# redis-cli -h 192.168.4.54 -p 6354 192.168.4.54:6354> config get masterauth" 192.168.4.54:6354> config set masterauth 123456 192.168.4.54:6354> CONFIG REWRITE 192.168.4.54:6354> info replication
1.5 哨兵服务
1.5.1 哨兵服务介绍-
监控master服务
-
发现master宕机后,将从服务器提升为主服务器
-
主配置文件:sentinel.conf
1.5.2 安装源码的redis软件(不需要初始化)
1.5.3 配置哨兵服务[root@mysql57 ~]# vim redis-4.0.8/sentinel.conf #模板 [root@mysql57 ~]# vim /etc/sentinel.conf bind 0.0.0.0 sentinel monitor redis51 192.168.4.51 6351 1 sentinel auth-pass redis51 123456 :wq
1.5.3 启动哨兵服务
[root@mysql57 ~]# redis-sentinel /etc/sentinel.conf
1.5.4 测试配置
[root@mysql51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456 shutdown [root@mysql51 ~]# netstat -ntlup | grep redis-server [root@mysql51 ~]# /etc/init.d/redis_6379 start [root@mysql51 ~]# netstat -ntlup | grep redis-server [root@mysql51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456 192.168.4.51:6351> info replication 192.168.4.51:6351> config set masterauth 123456 192.168.4.51:6351> config rewrite 192.168.4.51:6351> info replication
-
- 持久化
2.1 RDB(默认)
2.1.1 RDB介绍- Redis数据库文件,全称 Redis DataBase
- 数据持久化方式之一
- 数据持久化默认方式
- 按照指定时间间隔,将内存中的数据集快照写入硬盘
- 快照术语叫snapshot
- 恢复时,将快照文件直接读入内存
-
定义RDB文件名
dbfilename “dump.rdb” #文件名2.1.2 使用RDB文件恢复数据
- 备份数据[root@mysql50 ~]# cp /var/lib/redis/6379/dump.rdb /root/ [root@mysql50 ~]# scp /root/dump.rdb root@192.168.4.56:/opt
-
恢复数据
[root@mysql56 ~]# /etc/init.d/redis_6379 stop [root@mysql56 ~]# rm -rf /var/lib/redis/6379/dump.rdb [root@mysql56 ~]# cp /opt/dump.rdb /var/lib/redis/6379/ [root@mysql56 ~]# /etc/init.d/redis_6379 start [root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356 192.168.4.56:6356> keys *
2.2.3 优化设置
- 数据从内存保存到硬盘的频率save 900 1 #15分钟内且有1个key改变自动存盘 save 300 10 #5分钟内且有10个key改变自动存盘 save 60 10000 #1分钟内且有10000个key改变自动存盘
- 手动存盘
save #阻塞写存盘
bgsave #不阻塞写存盘
2.2.4 RDB优点与缺点
RDB优点
– 高性能的持久化时实现-----创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何 IO 操作。
–比较适合大规模数据恢复,且对数据完整行要求不是非常高的场合。
RDB 的缺点
– 意外宕机,丢失最后一次持久化的所有数据。
2.2 AOF
2.2.1 AOF介绍
Append Only File
追加方式记录写操作的文件
记录redis服务所有写操作
不断的将新的写操作,追加到文件的末尾
默认没有启用
使用cat命令可以查看文件内容2.2.2 启用AOF
[root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356 192.168.4.56:6356> keys * 192.168.4.56:6356> config set appendonly yes #启用 192.168.4.56:6356> config get appendonly 192.168.4.56:6356> config rewrite #写进配置文件 192.168.4.56:6356> keys * [root@mysql56 ~]# ls /var/lib/redis/6379/ appendonly.aof dump.rdb [root@mysql56 ~]# cat /var/lib/redis/6379/appendonly.aof
2.2.3 使用AOF文件恢复数据
- 备份数据
[root@mysql56 ~]# cp /var/lib/redis/6379/appendonly.aof /root
[root@mysql56 ~]# scp /root root@192.168.4.50:/opt - 手动存盘
-
恢复数据
[root@mysql50 ~]# /etc/init.d/redis_6379 stop [root@mysql50 ~]# ls /var/lib/redis/6379/ appendonly.aof dump.rdb [root@mysql50 ~]# rm -rf /var/lib/redis/6379/* [root@mysql50 ~]# cp /opt/appendonly.aof /var/lib/redis/6379/ [root@mysql50 ~]# ls /var/lib/redis/6379/ appendonly.aof [root@mysql50 ~]# /etc/init.d/redis_6379 start [root@mysql50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 192.168.4.50:6350> keys *
2.2.4 优化配置
- 定义文件名
appendonly yes #启用aof,默认no
appendfilename “appendonly.aof” #指定文件名 - AOF文件记录写操作的方式
appendfsync always #时时记录,并完成磁盘同步
appendfsync everysec #每秒记录一次,并完成磁盘同步
appendfsync no #写入aof ,不执行磁盘同步 - 日志文件会不断增大,何时触发日志重写
auto-aof-rewrite-min-size 64mb #首次重写触发值
auto-aof-rewrite-percentage 100 #再次重写,增长百分比
- 定义文件名
-
修复AOF文件
[root@mysql56 ~]# vim /var/lib/redis/6379/appendonly.aof [root@mysql56 ~]# /etc/init.d/redis_6379 stop [root@mysql56 ~]# /etc/init.d/redis_6379 start [root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356 Could not connect to Redis at 192.168.4.56:6356: Connection refused Could not connect to Redis at 192.168.4.56:6356: Connection refused not connected> exit [root@mysql56 ~]# netstat -ntlup | grep redis-server [root@mysql56 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof 0x 1ba: Expected prefix '*', got: 'j' AOF analyzed: size=475, ok_up_to=442, diff=33 This will shrink the AOF from 475 bytes, with 33 bytes, to 442 bytes Continue? [y/N]: y Successfully truncated AOF [root@mysql56 ~]# /etc/init.d/redis_6379 start /var/run/redis_6379.pid exists, process is already running or crashed [root@mysql56 ~]# rm -rf /var/run/redis_6379.pid [root@mysql56 ~]# /etc/init.d/redis_6379 start [root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356 192.168.4.56:6356> keys *
2.2.5 AOF优点与缺点
• AOF 优点
– 可以灵活的设置持久化方式
– 出现意外宕机时,仅可能丢失 1 秒的数据
• AOF 的缺点
– 持久化文件的体积通常会大于 RDB方式。
– 执行 fsync 策略时的速度可能会比 RDB方式慢。