redis数据库【redis数据库的配置、redis数据库基本命令、redis持久化、redis性能管理、redis数据库的群集】故障及解决方案

redis数据库

一、关系数据库和非关系数据库的对比

【1】关系型数据库

(1)结构化数据库,创建在关系模型基础上,面向记录
大致包括:oracle、mysql、SQL server、DB2(大数据常用)、Microsoft access

【2】非关系型数据库

除了主流的关系型数据库外的数据库,都认为是非关系型
大致包括:redis、mongdb、hbase、couhdb

【3】非关系型数据库产生的背景

(1)对数据库高并发读写需求
(2)对海量数据高效存储与访问需求
(3)对数据库高可扩展性与高可用性需求

二、redis简介

【1】redis数据库存储形式

redis是基于内存运行并支持持久化,采用key-value(键值对)的存储形式

【2】优势:

具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份

三、redis安装及优化

【1】redis安装部署
(1)解压软件包
tar zxvf /opt/redis-5.0.7.tar.gz
(2)编译安装
yum install -y gcc gcc-c++
cd /opt/redis-5.0.7
make 
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin
(3)设置redis配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
#####一直回车########
Selected config:
Port           : 6379   端口号
Config file    : /etc/redis/6379.conf    配置文件
Log file       : /var/log/redis_6379.log   日志文件
Data dir       : /var/lib/redis/6379    数据文件
Executable     : /usr/local/bin/redis-server   执行文件
Cli Executable : /usr/local/bin/redis-cli  客户端执行文件
######查看配置文件##########
vim /etc/redis/6379.conf
70:bind 127.0.0.1    监听的主机地址
89:protected-mode yes 
93:port 6379  端口
102:tcp-backlog 511
114:timeout 0 
131:tcp-keepalive 300
137:daemonize yes   启用守护进程
148:supervised no
159:pidfile /var/run/redis_6379.pid   指定PID文件
167:loglevel notice   日志级别
172:logfile /var/log/redis_6379.log   指定日志文件
(4)redis进程控制
/etc/init.d/redis_6379 status|stop|start|restart
(5)查看运行状态
/etc/init.d/redis_6379 status
Redis is running (5942)
netstat -lntup | grep redis
【2】redis数据库常用的命令
(1)连接数据库和redis数据库中的基本操作
redis-cli [-h 192.168.60.30 -p 6379]       进入数据库
keys *    查看所有数据库,可以使用通配符【?表示单个字符,*表示所有字符】
set 键值对 值      设置数据变量和值
get 键值对 值     查询数据变量和值
exists 判断键值对是否存在
del 删除当前数据库的指定key
type  获取key对应的value值类型
rename(覆盖)/rename(不覆盖)  对已有的key进行重命名
dbsize    查看当前数据库中key的数目
select 3  创建数据库3
move 键值对 目标数据库
(2)redis-benchmark检测
-h  指定服务器主机名
-p  指定服务器端口
-c   指定并发连接数
-n  指定请求数
-d  以字节的形式指定set/get值得数据大小
-q  强制退出redis,仅显示query/sec值
redis-benchmark -h 192.168.60.30 -p 6379 -c 100 -n 10000
(3)redis hash对象存储

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储2^32-1键值对(40多亿)。
格式为:hset 类名 键值对 值
主要命令为:
在这里插入图片描述

【3】redis持久化

redis是运行在内存中,内存中的数据断电丢失,为了能够重用redis数据,或者防止系统故障,需要将redis中的数据写入到磁盘空间中,即持久化

(1)持久化的分类

RDB方式:创建快照的方式获取某一时刻redis中所有数据的副本
AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
再生产环境中一般使用两者结合的方式,使用RDB方式快照,然后在断点的部分使用AOF方式回复。
默认文件名dump.rdb

(2)触发条件

在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
执行save或者是bgsave(异步)命令
执行flushall命令,清空数据库所有数据
执行shutdown命令,保证服务器正常关闭且不丢失任何数据

(3)优缺点

适合大规模的数据恢复,如果业务对数据完整性和一直性要求不高,RDB是很好的选择
数据的完整性和一致性不高
备份时占用内存

(4)redis持久化的配置
vim /etc/redis/6379.conf
219:save 900 1    900
220:save 300 10
221:save 60 10000
【4】redis性能管理
(1)内存使用率是Redis服务最关键的一部分。

理想情况下,“used_memory_rss”的值应该比“used_memory”略微高一点
如果Redis实例的内存使用率超过最大可用内存,即“used_memory”>最大可用内存,那么操作系统会将内存与Swap空间交换,把内存中旧的或不再使用的内容写入硬盘上的Swap分区,以便留出新的物理内存给新页或活动页(page)使用。
通过查看“used_memory”指标可知道Redis的内存情况,当“used_memory”>最大可用内存时,Redis实例正在进行内存交换或者已经内存交换完毕。如果Redis进程上发生内存交换,那么Redis及使用Redis数据的应用性能都会受到严重影响。

(2)延迟诊断

Redis之所以这么流行的主要原因之一就是低延迟特性带来的高性能,所以说解决延迟问题是提高Redis性能最直接的办法。
以1G带宽来说,若是延迟时间远高于200μs,那明显是出现了性能问题。Redis是单核执行所有客户端的请求的, 即使在服务器上会有一些慢的IO操作,这些请求也都是按序排队等待执行的。

(3)内存碎片诊断

内存碎片是由操作系统低效的分配除回收物理内存得到的。如内存碎片率超过1.5,可能是操作系统或Redis实例中内存管理变差的表现。

(4)redis优化场景

①根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。
②若业务场景不需要数据持久化,关闭持久化方式用以提高处理性能及内存使用率。
③不要让你的Redis所在机器物理内存使用超过实际内存总量的60%。
④默认情况下,尽量不要让Redis实例的客户端连接数超出5000

四、redis数据库的群集

【1】安装redis数据库
tar zxvf redis-5.0.7.tar.gz 
    yum install -y gcc gcc-c++
    cd /opt/redis-5.0.7
    make
    make PREFIX=/usr/local/redis install
    ln -s /usr/local/redis/bin/* /usr/local/bin
    cd /opt/redis-5.0.7/utils
    ./install_server.sh
【2】配置群集
vim /etc/redis/6379.conf
70 #bind 127.0.0.1
89 protected-mode no
93 port 6379
137 daemonize yes
700:appendonly yes
833:cluster-enabled yes
834:
841:cluster-config-file nodes-6379.conf
842:
847:cluster-node-timeout 15000

/etc/init.d/redis_6379 restart
【3】安装ruby对象编程语言
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
rvm list known   //查看ruby的版本信息
  # MRI Rubies
  [ruby-]1.8.6[-p420]
  [ruby-]1.8.7[-head] # security released on head
  [ruby-]1.9.1[-p431]
  [ruby-]1.9.2[-p330]
  [ruby-]1.9.3[-p551]
  [ruby-]2.0.0[-p648]
  [ruby-]2.1[.10]
... ... ...
sh rvm-installer.sh   //生成rvm.sh脚本
source /etc/profile.d/rvm.sh      //全局声明
rvm install 2.4.10   //安装
rvm use 2.4.10     //使用
gem install redis   //使用ruby编译安装redis

systemctl stop firewalld
setenforce 0
【4】启动redis群集(六节点)
redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1

yes  回车
【5】验证redis群集功能

(1)在master服务器上写入数据

redis-cli -c -h 192.168.60.10
set name zhangsan
get name

(2)在slave服务器上面能够同步数据

redis-cli -c -h 192.168.60.30
get name

五、redis故障及处理

【问题1】redis数据库在进行群集启动设置时出现无法连接错误
redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1

在这里插入图片描述
分析:无法连接说明端口的问题,在四层之上网络中都是跑的端口号,如下图,查看端口信息是因为节点服务端口没有生效

netstat -lnutp | grep 6379

在这里插入图片描述

【解决方案】修改配置文件,重新启动端口
vim /etc/redis/6379.conf
  bind 192.168.60.10 192.168.60.16 192.168.60.15
/etc/init.d/redis_6379 restart 

redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1
【问题2】当master宕机恢复之后数据无法找回,并且再取消群集删除所有同步文件之后无法再次使用群集
get name

在这里插入图片描述
分析:宕机之后恢复无法找回数据,根据提示信息说明群集处于down状态,检查之后master没有任何问题,检查端口号都是没有任何的问题,那就说明此前创建的群集失效,所以需要重新启动群集

redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1

在这里插入图片描述
重新启动群集出现错误是数据库中的群集数据没有同步,无法重新重启群集。说明在群集数据文件中会存在以前同步的数据。

【解决方案】备份原有的数据再删除数据存放目录下的所有(主要是appendonly.aof)重新起动redis数据库
cd /var/lib/redis/6379/
mv ./* /opt/6379
rm -rf ./*
/etc/init.d/redis_6379 restart 

redis-cli --cluster create \
192.168.60.15:6379 \
192.168.60.16:6379 \
192.168.60.30:6379 \
192.168.60.10:6379 \
192.168.60.36:6379 \
192.168.60.37:6379 \
--cluster-replicas 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值