03.Redis单实例部署之基于RDB持久化
Posted chenliangc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03.Redis单实例部署之基于RDB持久化相关的知识,希望对你有一定的参考价值。
一、部署Redis单实例[RDB持久化]
## 操作系统环境说明
[root@node31 ~]# cat /etc/redhat-release;uname -r;uname -m; CentOS Linux release 7.5.1804 (Core) 3.10.0-862.el7.x86_64 x86_64 [root@node31 ~]# firewall-cmd --state ## 查看firewall墙的状态 not running [root@node31 ~]# free -h ## 查看当前系统可用的内容 total used free shared buff/cache available Mem: 1.8G 113M 1.3G 17M 384M 1.5G Swap: 2.0G 0B 2.0G [root@node31 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 47G 1.6G 46G 4% / devtmpfs 899M 0 899M 0% /dev tmpfs 911M 0 911M 0% /dev/shm tmpfs 911M 18M 894M 2% /run tmpfs 911M 0 911M 0% /sys/fs/cgroup /dev/sdb1 100G 54M 100G 1% /data ## 一会把软件安装在该目录挂载的磁盘下 /dev/sda1 1014M 142M 873M 14% /boot tmpfs 183M 0 183M 0% /run/user/1000 [root@node31 ~]# ifconfig ens33|awk -F " " ‘NR==2{print $2}‘ ## 外网IP地址 10.0.0.31 [root@node31 ~]# ifconfig ens34|awk -F " " ‘NR==2{print $2}‘ ## 内网IP地址 172.16.1.31
## 软件及实例部署规划
/data/apps # 该目录下安装Redis软件,安装后就是/data/apps/redis /data/redis/6379 # 该目录下部署Redis 6379实例 /data/redis/6379/conf # 存放redis 6379实例的配置文件 /data/redis/6379/data # 存放redis 6379实例的持久化数据 /data/redis/6379/logs # 存放redis 6379实例的日志文件 /data/redis/6379/run # 存放redis 6379实例的pid和socket文件
## 准备的配置文件内容
相关参数的含义可以参考博文:https://www.cnblogs.com/chenliangc/p/12324731.html
## Basic parameters bind 172.16.1.31 protected-mode yes port 6379 maxmemory 1GB requirepass chenliang daemonize yes databases 16 syslog-enabled no loglevel notice logfile /data/redis/6379/logs/redis.log pidfile /data/redis/6379/run/redis.pid unixsocket /data/redis/6379/run/redis.sock ## Client maxclients 10000 timeout 300 tcp-backlog 511 tcp-keepalive 60 ## RDB Persistence save 900 1 # 900秒内有1个key被修改,就进行rdb持久化 save 300 10 # 300秒内有10个key被修改,就进行rdb持久化 save 60 10000 # 60秒内有10000个key被修改,就进行rdb持久化 dir /data/redis/6379/data/ # 设置持久化数据文件的保存位置 dbfilename dump.rdb # 设置rdb持久化的数据文件名称,默认也是dump.rdb rdbcompression yes # 对于rdb持久化的数据文件是否进行压缩,默认也是yes rdbchecksum yes # 是否检查rdb持久化数据文件,默认也是yes stop-writes-on-bgsave-error no # rdb持久化出现错误时,redis主进程继续响应客户端的写操作
## Redis软件的安装
## 创建redis用户(需要设置密码,需要远程登录,需要有家目录,不要让其用户和密码过期) [root@node31 ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow [root@node31 ~]# useradd redis [root@node31 ~]# echo "redis"|passwd --stdin redis Changing password for user redis. passwd: all authentication tokens updated successfully. [root@node31 ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow ## 安装相关的依赖包 [root@node31 ~]# yum -y install gcc gcc-c++ make [root@node31 ~]# rpm -qa install gcc gcc-c++ make gcc-4.8.5-39.el7.x86_64 gcc-c++-4.8.5-39.el7.x86_64 make-3.82-24.el7.x86_64 ## 创建相关的目录 [root@node31 ~]# mkdir /data/apps [root@node31 ~]# ls -ld /data/apps/ drwxr-xr-x 2 root root 6 Feb 19 09:01 /data/apps/ ## 上传软件包,进行安装 [root@node31 ~]# mkdir tools [root@node31 ~]# cd tools [root@node31 tools]# rz [root@node31 tools]# ll redis-4.0.14.tar.gz -rw-r--r-- 1 root root 1740967 Oct 26 14:54 redis-4.0.14.tar.gz [root@node31 tools]# tar xf redis-4.0.14.tar.gz -C /data/apps [root@node31 tools]# ls -ld /data/apps/redis-4.0.14/ drwxrwxr-x 6 root root 309 3月 19 2019 /data/apps/redis-4.0.14/ [root@node31 tools]# cd /data/apps/redis-4.0.14 [root@node31 redis-4.0.14]# make ## 做软链接并更改属主/组 [root@node31 redis-4.0.14]# cd [root@node31 ~]# ln -sv /data/apps/redis-4.0.14/ /data/apps/redis ‘/data/apps/redis’ -> ‘/data/apps/redis-4.0.14/’ [root@node31 ~]# chown -R redis:redis /data/apps/redis/ [root@node31 ~]# ls -ld /data/apps/redis/ drwxr-xr-x 3 redis redis 17 Feb 19 09:06 /data/apps/redis/ ## 配置环境变量 [root@node31 ~]# ls -ld /data/apps/redis/src/ drwxrwxr-x 3 redis redis 8192 2月 19 15:43 /data/apps/redis/src/ [root@node31 ~]# echo "PATH=/data/apps/redis/src:$PATH" >>/etc/bashrc [root@node31 ~]# source /etc/bashrc [root@node31 ~]# which redis-cli /data/apps/redis/bin/redis-cli
## 部署一个Redis 6379实例
## 创建redis 6379实例的相关目录 [root@node31 ~]# mkdir /data/redis/6379/{conf,data,logs,run} -p [root@node31 ~]# tree /data/redis/ /data/redis/ `-- 6379 |-- conf |-- data |-- logs `-- run 5 directories, 0 files ## 为redis 6379实例准备配置文件 cat >>/data/redis/6379/conf/redis.conf<<EOF ## Basic parameters bind 172.16.1.31 protected-mode yes port 6379 maxmemory 1GB requirepass chenliang daemonize yes databases 16 syslog-enabled no loglevel notice logfile /data/redis/6379/logs/redis.log pidfile /data/redis/6379/run/redis.pid unixsocket /data/redis/6379/run/redis.sock ## Client maxclients 10000 timeout 300 tcp-backlog 511 tcp-keepalive 60 ## RDB Persistence save 900 1 save 300 10 save 60 10000 dir /data/redis/6379/data/ dbfilename dump.rdb rdbcompression yes rdbchecksum yes stop-writes-on-bgsave-error no EOF ## 查看配置文件 [root@node31 ~]# ll /data/redis/6379/conf/redis.conf -rw-r--r-- 1 root root 499 Feb 19 09:14 /data/redis/6379/conf/redis.conf ## 准备redis 6379实例的配置文件 ## https://www.cnblogs.com/chenliangc/p/11746400.html 博文件中脚本内容复制 ## 在/data/redis/6379目录下,创建一个redisd文件,把复制的内容粘贴并保存 ## chmod 700 /data/redis/6379/redisd 更改权限为700 ## 更改/data/redis/6379目录及目录下所有文件的属主/组为redis [root@node31 ~]# chown -R redis:redis /data/redis/6379 [root@node31 ~]# ls -ld /data/redis/6379/ drwxr-xr-x 6 redis redis 67 Feb 19 09:18 /data/redis/6379/ ## 启动redis 6379实例 [root@node31 ~]# /data/redis/6379/redisd start Start redis[6379] service [ OK ] [root@node31 ~]# netstat -lntup|grep redis tcp 0 0 172.16.1.31:6379 0.0.0.0:* LISTEN 19758/redis-server ## 加入开机自启动 [root@node31 ~]# echo -ne " # Boot start redis service[6379]. USER:chenliang TIME:$(date +%F) /data/redis/6379/redisd start " >>/etc/rc.local [root@node31 ~]# tail -2 /etc/rc.local # Boot start redis service[6379]. USER:chenliang TIME:2020-02-19 /data/redis/6379/redisd start ## redis相关命令的简单介绍 redis-sentinel # 用来启动redis sentinel服务,sentinel是一个单独的服务 redis-server # 用来启动redis服务 redis-cli # 用来连接redis服务和sentinel服务 redis-check-rdb # 检测RDB持久化生成的文件 redis-check-aof # 检测AOF持久化生成的文件 redis-benchmark # 性能测试工具,测试Redis在当前系统下的读写性能 redis-trib.rb # 用来管理Redis-cluster集群的一个命令 ## 通过redis-cli命令连接redis 6379实例 ## 通过ip+端口的方式连接redis 6379 [root@node31 ~]# redis-cli -h 172.16.1.31 -p 6379 -a chenliang 172.16.1.31:6379> 172.16.1.31:6379> ## 通过socket文件连接redis6379 [root@node31 ~]# redis-cli -s /data/redis/6379/run/redis.sock -a chenliang redis /data/redis/6379/run/redis.sock> redis /data/redis/6379/run/redis.sock> ## 连接的相关参数说明 -h 指定可连接到redis 6379实例的IP地址 -p redis 6379实例的监听的端口 -a 指定密码,前期在配置文件中配置的密码就是chenliang -s 指定redis 6379实例的socket文件,前提是配置文件中得配置哈;
## redis相关命令的简单介绍
redis-sentinel # 用来启动redis sentinel服务,sentinel是一个单独的服务 redis-server # 用来启动redis服务 redis-cli # 用来连接redis服务和sentinel服务 redis-check-rdb # 检测RDB持久化生成的文件 redis-check-aof # 检测AOF持久化生成的文件 redis-benchmark # 性能测试工具,测试Redis在当前系统下的读写性能 redis-trib.rb # 用来管理Redis-cluster集群的一个命令
## 通过redis-cli命令连接redis 6379实例
## 通过ip+端口的方式连接redis 6379 [root@node31 ~]# redis-cli -h 172.16.1.31 -p 6379 -a chenliang 172.16.1.31:6379> 172.16.1.31:6379> ## 通过socket文件连接redis6379 [root@node31 ~]# redis-cli -s /data/redis/6379/run/redis.sock -a chenliang redis /data/redis/6379/run/redis.sock> redis /data/redis/6379/run/redis.sock> ## 连接的相关参数说明 -h 指定可连接到redis 6379实例的IP地址 -p redis 6379实例的监听的端口 -a 指定密码,前期在配置文件中配置的密码就是chenliang -s 指定redis 6379实例的socket文件,前提是配置文件中得配置哈;
## 看一看redis是什么角色
redis服务(这里就是redis 6379实例)一启动,它默认的角色是Master。
172.16.1.31:6379> info replication # Replication role:master # 角色:master connected_slaves:0 # 连接slave个数:0 master_replid:414c8302c9996957b1f70921c72e7d2e1dde3a33 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 redis /data/redis/6379/run/redis.sock>
二、RDB持久化相关知识点总结
01:RDB持久化是Redis默认的持久化,也就是默认是开启的;若想关闭,设置save ""即可。 02:RDB持久化是在设置的时间间隔内生成数据集的快照,快照在磁盘上的体现是一个文件, 这个文件始终只有一个,不管你的数据集有多大,名称默认为dump.rdb,不能直接查看 其内容和进行二次的编辑。 03:RDB持久化生成的数据文件(dump.rdb)大小比实际数据大小在小,因为它是压缩了的。 04:Redis在进行RDB持久化时是使用bgsave命令for出一个后台子进程来完成持久化的工 作;这样的好处是不会影响Redis仅有的一个主进程继续响应客户端的操作; 05:RDB持久化时是后台的子进程来工作,若在持久化数据过程中,出现了错误(例如磁盘满 了或损坏了),Redis的主进程是否还接受客户端的操作呢?这个其实是redis服务的一 个参数来让其决定,该参数是stop-writes-on-bgsave-error,默认是yes,也就是 redis主进程不响应客户端的写操作;若是no,则表示继续响应客户端的读写操作; 06:如果数据量比较大的时候,又频繁的进行RDB持久化,此时可能会阻塞服务器对客户端 的请求,因为RDB的持久化实际是打快照,打快照就得占用服务器的物理内存; 07:RDB持久化在进行持久化的过程中是先生成一个dump.rdb.temp的临时文件,当数据持 久化工作完成后,替换掉之前的dump.rdb文件,这样的好处是当服务或服务器在数据 持久化进行时发生宕机,不会影响之前持久化的数据,保证了之前持久化数据的完整性。 08:当在大数据集的时候,RDB持久化的数据在加载或恢复时要比AOF持久化的要快; 09:RDB持久化不能做到实时或秒级的数据持久,因此对数据有实时持久化的需求下,RDB持 久化就不太适合了;
以上是关于03.Redis单实例部署之基于RDB持久化的主要内容,如果未能解决你的问题,请参考以下文章