Linux学习
在Docker中运行一个Ubuntu桌面并安装Chrome浏览器
Docker云桌面(docker-headless)
Docker 部署Jupyter Notebook
知了 - 开源音乐服务器
NoVNC安装部署
Redis
怎样连接到Redis
MooseFS的简介、部署及应用
Moose部署日记
Moose-Fast部署
Moosefs快速启动
MooseSSD部署
新Moosefs部署详情:
Fedora36 Linux 手动设置IP
umount 提示 target is busy
Mysql慢日志
PVE相关
PVE迁移失败故障案例:ssh秘钥问题
qemu-img 转换镜像格式
glusterfs部署日记
Ceph部署记录
PVE下的新Ceph
查看网卡速率
Iscsi 部署安装
OTRS-znuny部署记录
CubeFs部署日记
CasaOS安装记录
VMware ESXi部署
PVE硬盘直通的几种方式
ZFS内存高占用ARC
ZFS zpool学习文档
PVE节点退出集群
Linux操作问题,疑难杂症记录
乱码不显示中文
如何清除磁盘上残留的分区信息:
iperf3 网络性能测试工具
电视直播配置
本文档使用 MrDoc 发布
-
+
首页
Redis
# 产品描述 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 # 版本说明 ![](/media/202303/2023-03-20_163630_6854020.5207162648894803.png) 选型落实 类型 确定版本 强制使用大版本 3.2 推荐使用小版本 3.2.8 # 安装部署 软件安装 使用redis-trib.rb搭建redis集群,首先需要安装ruby依赖的工具 1. ruby安装 ``` cd /home/{user}/redis tar zxvf ruby-2.2.2.tar.gz cd ruby-2.2.2 ./configure --prefix=/home/{user}/ruby make && make install export PATH=/home/{user}/ruby/bin:$PATH ``` 2. rubygems安装 ``` cd home/{user}/redis/ tar -zxvf rubygems-2.4.6.tgz cd rubygems-2.4.6 ruby setup.rb ``` ![](/media/202303/2023-03-20_164111_7638300.9879200151554105.png) 如果出现上述错误,则安装yaml ``` cd /home/{user} tar zxvf yaml-0.1.4.tar.gz cd yaml-0.1.4 ./configure --prefix=/home/{user}/yaml make && make install ``` 重新安装ruby ``` cd /home/{user}/redis/ruby-2.2.2 make clean ./configure --prefix=/home/{user}/ruby --enable-shared --disable-install-doc --with-opt-dir=/home/{user}/yaml make && make install export PATH=/home/{user}/ruby/bin:$PATH cd /home/{user}/redis/rubygems-2.4.6 ruby setup.rb ``` 3. redis-3.2.1.gem安装 ``` cd /home/{user}/redis gem install -l redis-3.2.1.gem ``` ![](/media/202303/2023-03-20_164142_3394810.260951483426048.png) 如上所示错误,需要安装openssl,下载地址为http://distfiles.macports.org/openssl/ 使用root用户安装: ``` [root@localhost ~]# tar zxvf openssl-1.0.1f.tar.gz [root@localhost ~]# cd openssl-1.0.1f [root@localhost openssl-1.0.1f]# ./config [root@localhost openssl-1.0.1f]# make && make install ``` 上述gem install操作还报错,no such file to load -- zlib 首先检查主机是否安装zlib以及zlib-dev,若已安装还是报错。 可按照以下步骤解决: 进入ruby源码文件夹 安装ruby自身提供的zlib包 ``` [zyzx@localhost redis]$ cd ruby-2.2.2 [zyzx@localhost ruby-2.2.2]$ cd ext/zlib/ [zyzx@localhost zlib]$ ruby extconf.rb ``` ![](/media/202303/2023-03-20_164218_1373000.3482271304455461.png) ``` [zyzx@localhost zlib]$ make ``` ![](/media/202303/2023-03-20_164229_2577159.752062465984146e-05.png) ``` [zyzx@localhost zlib]$ make install ``` 重新安装redis-3.2.1.gem ``` [zyzx@localhost zlib]$ cd ../../../ [zyzx@localhost redis]$ gem install -l redis-3.2.1.gem ``` ![](/media/202303/2023-03-20_164241_4223660.40624121059396723.png) 4. redis编译安装 所有主机都需要安装redis Redis编译: ``` cd /home/{user}/redis tar zxvf redis-3.2.8.tar.gz cd redis-3.2.8 make ``` 新建bin 目录,将redis编译后的文件拷贝至该目录。 新建config data log目录分别用来存储redis配置文件、数据持久化文件、日志文件,需要在配置文件中指定。 ``` cd /home/{user}/redis mkdir bin config data log cp /home/{user}/redis/redis-3.2.8/src/* /home/{user}/redis/bin/ ``` 软件配置 ``` vim ~/redis/config/redis-xx.conf 配置端口时注意:集群总线端口总是比命令端口高10000 daemonize yes pidfile /home/yangsw/redis/log/redis-27100.pid port 27100 bind 192.168.100.110 cluster-enabled yes cluster-config-file nodes-27100.conf dir /home/yangsw/redis/data cluster-node-timeout 2000 cluster-require-full-coverage no aof-rewrite-incremental-fsync yes tcp-backlog 511 timeout 300 tcp-keepalive 5 loglevel verbose logfile "/home/yangsw/redis/log/redis-27100.log" databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error no rdbcompression yes rdbchecksum yes dbfilename dump-27100.rdb dir /home/yangsw/redis/data slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 appendonly yes appendfilename "appendonly-27100.aof" dir /home/yangsw/redis/data appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 maxclients 15000 ``` ## Redis集群配置 ``` 设置master节点: ./bin/redis-trib.rb create ip1:port1 ip2:port2 … … ``` ![](/media/202303/2023-03-20_164400_4317010.037737607300704856.png) 为master节点添加slave: ``` ./bin/redis-trib.rb add-node --slave --master-id mastered slaveip:port masterip:port ``` ![](/media/202303/2023-03-20_164430_3931970.12187135733134569.png) 如果集群添加错误,将redis停止服务,清空data目录,重新添加。 或者登录进入从节点,使用如下命令修改该从节点的主节点。 ![](/media/202303/2023-03-20_164438_2096460.08858491707158633.png) # 日常运维 日常维护操作 1. 启动redis ``` cd ~/redis/bin ./redis-server ../config/redis-27100.conf ``` 2. 停止reids ``` ./redis-cli -h ip -p port shutdown ``` redis启动通过redis-server加载指定配置文件启动,所以redis只需编译一次,将工具拷贝到bin目录下,若同一台主机需要启动多个redis实例,只需增加几个配置文件,启动时指定加载不同配置文件来启动多个实例。 3. Redis集群手动配置 设置master节点 ``` ./bin/redis-trib.rb create ip1:port1 ip2:port2 … … ``` ![](/media/202303/2023-03-20_164652_4762500.7692076813509148.png) 为master节点添加slave: ``` ./bin/redis-trib.rb add-node --slave --master-id mastered slaveip:port masterip:port ``` ![](/media/202303/2023-03-20_164717_3935350.34833258701860836.png) 如果集群添加错误,将redis停止服务,清空data目录,重新添加。 或者登录进入从节点,使用如下命令修改该从节点的主节点。 ![](/media/202303/2023-03-20_164729_9600350.3052110561014084.png) 添加主节点 ``` ./redis-trib.rb add-node ip:port ``` 新添加的主从节点,需要向主节点分配一定的槽。分配槽点 ./redis-trib.rb reshard ip:port 根据提示输入想分配的槽点的个数即可,接下来会提示是根据所有的槽作为源点进行分配还是从特点的node进行槽的重新分配。 删除节点 ``` /redis-trib.rb del-node ip:port id ``` ps:这时候需要首先将该节点的存在的数据,也就是槽点进行删除才能够进行移除节点操作 4. 查看集群状态 ``` ./redis-trib.rb check ip:port ``` 5. 登陆redis ``` cd ~/redis/bin ./redis-cli -c -h 192.168.***.*** -p 27100 ``` -c 指定集群模式 -h 指定主机ip -p 指定redis端口 ![](/media/202303/2023-03-20_164817_4765270.8215590908222532.png) 登陆之后常用命令: Info:可以查看节点状态,以下为部分信息。 ![](/media/202303/2023-03-20_164823_9316780.882611132478731.png) INFO commandstats: 通过这个工具可以查看所有命令统计的快照,比如命令执行了多少次,执行命令所耗费的毫秒数(每个命令的总时间和平均时间) CLUSTER NODES:查看集群中各节点状态信息 ![](/media/202303/2023-03-20_164902_1315830.4427453021653931.png) slowlog get: 查看执行慢的命令,假如只需要查看最后10个慢命令,输入slowlog get 10即可。 ![](/media/202303/2023-03-20_164909_9789450.8030308995695863.png) 图中字段分别意思是: 1=日志的唯一标识符 2=被记录命令的执行时间点,以 UNIX 时间戳格式表示 3=查询执行时间,以微秒为单位。例子中命令使用54毫秒。 4= 执行的命令,以数组的形式排列。 ## 集群扩缩容 在主机192.168.100.77上演示 1. 扩容集群 扩容集群分为如下步骤: (1)准备新节点 (2)加入集群 (3)迁移槽和数据 (1)准备新节点 新增两个redis节点,redis-6385和redis-6386 ![](/media/202303/2023-03-20_164936_0204350.04774554364017214.png) 启动新节点 ![](/media/202303/2023-03-20_164943_3185930.4305365722363669.png) 新增加的节点作为孤儿节点运行,并没有与其他节点通信 ![](/media/202303/2023-03-20_164949_9982770.8303418872639794.png) (2)加入集群 使用cluster meet命令将新节点加入集群 ![](/media/202303/2023-03-20_164957_5684000.5360243025791767.png) 新节点刚开始都是主节点,但是由于没有负责的槽,所以不能接收任何读写操作,对于新增节点,后续操作一般有两种选择: 为他迁移槽和数据实现扩容 作为其他主节点的从节点负责故障转移。 redis-trib.rb也实现了为现有集群添加新节点的命令 redis-trib.rb add-node 192.168.100.77:6385 192.168.100.77:6379 redis-trib.rb add-node 192.168.100.77:6386 192.168.100.77:6379 (3)迁移槽和数据 加入集群后需要为新节点迁移槽和相关数据,槽在迁移过程中集群可以正常提供读写服务。 槽迁移计划 槽是redis集群管理数据的基本单元,在扩容节点时应首先制定槽的迁移计划,确定原有节点的那些槽可以迁移到新节点。迁移计划需要确保每个节点负责相似数量的槽,从而保证个节点数据的均匀性。新加入节点后,集群每个主节点负责的槽数将由5460变为4096 迁移数据 数据迁移过程是逐个槽开始进行的,实际操作肯定会涉及大量槽并且每个槽对应大量的键值对,因此redis-trib提供了槽重新分片的功能。 需要安装ruby依赖工具 ``` ./redis-trib.tb 192.168.100.77:6379 ``` ![](/media/202303/2023-03-20_165011_2659290.2231345354689619.png) 确认需要迁移的槽数量,本文为4096 ![](/media/202303/2023-03-20_165023_0448630.3174188939821345.png) 输入接收迁移槽的目标节点ID,本文输入6385的节点ID,目标节点只能有一个。 ![](/media/202303/2023-03-20_165028_6659750.31046106999927325.png) 分别输入源节点的ID,本文输入6379,6380,6381的节点ID,最后用done表示结束。 ![](/media/202303/2023-03-20_165038_3467270.07773460603653082.png) Enter后数据迁移之前会打印出所有的槽从源节点到目标节点的计划,确认无误后输入yes执行迁移工作。 ![](/media/202303/2023-03-20_165043_4058830.26764234060163783.png) redis-trib工具会打印出每个槽迁移的进度,如下所示: ![](/media/202303/2023-03-20_165048_1552430.3983382754747128.png) 执行cluster nodes命令检查节点和槽映射的关系 ![](/media/202303/2023-03-20_165053_9185650.7309998623163982.png) 可以看到6385负责的槽位为10923-12287,执行redis-trib.rb rebalance检测节点之间槽的均衡性 ![](/media/202303/2023-03-20_165059_0579660.5241326436220899.png) 可以看到槽差异在2%以内,因此集群节点数据相对均匀,无需调整。 (4)添加从节点 ![](/media/202303/2023-03-20_165105_2212540.117969768540098.png) ![](/media/202303/2023-03-20_165111_0330880.8427238432609249.png) 2. 收缩集群 (1)槽迁移 收缩集群意味着缩小规模,需要从现有集群中安全下线部分节点。 流程说明: 确认下线节点是否有负责的槽,如果有,需要把槽迁移到其他节点,保证节点下线后整个集群槽节点映射的完整性。 当下线节点不在负责槽或本身是从节点时,可以通知其他节点忘记下线节点,当所有节点忘记下线节点后该节点可以正常关闭。 例:下线6381和6384节点 6381节点负责槽位12288-16383,下线之前需要迁移槽位,源节点需要把自身负责的槽位均匀的迁移到其他主节点上,直接使用redis-trib.tb reshard命令完成槽迁移,每次迁移只能有一个目标节点。 ![](/media/202303/2023-03-20_165127_8253400.9855185330804914.png) ``` ./redis-trib.rb reshard 192.168.100.77:6381 ``` ![](/media/202303/2023-03-20_165137_4588170.12899949135685118.png) 输入迁移目的节点6379的ID ![](/media/202303/2023-03-20_165141_8220900.3847045638643022.png) 输入迁移源节点6381的ID,输入done确认 ![](/media/202303/2023-03-20_165146_6747900.010503594384357218.png) 确认无误后输入yes开始迁移 ![](/media/202303/2023-03-20_165151_9573180.38482629832861104.png) cluster nodes可以看到6379接管了1365个槽12288-13652 ![](/media/202303/2023-03-20_165158_3548430.7938348152622853.png) 把槽迁移到6380,重复上述过程 ![](/media/202303/2023-03-20_165202_7611370.8043737355574345.png) 把槽迁移到6385,重复上述过程 ![](/media/202303/2023-03-20_165207_4491390.4100740582448186.png) 可以看到,6381不在负责槽 ![](/media/202303/2023-03-20_165212_9282220.791616974872812.png) (2)忘记节点 使用redis-trib.rb + del-node + 集群ip:port + 下线节点ID 命令忘记节点 对6381和6384节点进行下线操作 ![](/media/202303/2023-03-20_165219_3239470.7334702498899532.png) 192.168.100.77:6379> cluster nodes查看节点已下线 ![](/media/202303/2023-03-20_165222_9001530.3941957233186052.png) ## 高危风险操作 生产上禁止Key *操作。 flushall操作需要项目册评估影响范围,负责人进行审核。 RDB和aof文件根据项目需要进行配置。 Key删除与垃圾键清理需要负责人审核确认影响范围后进行删除。 # 例行巡检 ## 巡检内容 1. 服务器相关巡检项 内存使用率巡检 剩余内存空间充足,低于系统内存量的90% cpu使用率巡检 cpu使用率正常,无高负载情况,低于系统cpu总量的90% 磁盘空间使用率巡检 磁盘剩余空间充足,磁盘空间剩余空间不低于磁盘空间总量的20% 磁盘IO性能巡检 磁盘IO性能正常,读写速率正常。 系统文件打开数 确保系统文件打开数小于ulimit设置的值 2. redis实例巡检项 配置文件校验 是否与最新的配置文件参数设置相同。 redis错误日志检查 是否存在异常错误日志,错误日志获取以及分析是否影响业务。 redis慢查询检查 巡检周期内是否存在慢查询,分析慢查询是否影响redis性能。 redis连接数检查 redis连接数情况 redis内存使用情况 redis内存使用情况 redis持久化文件是否正常 redis持久化是否正常进行,rdb和aof文件大小。 redis主从切换 巡检周期内,redis是否发生主从切换。 ## 巡检周期 定时巡检 按照业务系统运维重要度进行区分为:按周巡检、按月巡检、按季度巡检,当具备自动化平台时,将巡检周期提升为按周巡检。 不定时巡检 出现重要节假日例如春节、国庆等,需在节前进行一次全体巡检,无关业务运维重要度。 特殊情况巡检 主要指当发现redis共性故障或bug时、应用系统有程序更新、业务变更、重大升级等情况下,进行针对性或全面的巡检。 ## 巡检方法 1. 服务器相关巡检 内存使用率 通过free –g命令查看系统内存使用及剩余情况 cpu使用率 通过操作系统top命令进行查看cpu总体使用情况以及单核cpu使用情况 磁盘空间使用率 通过df –h命令,查看磁盘空间使情况,一般为为/home目录 磁盘IO性能 内存,cpu,磁盘io性能可以通过BOMC运营监控—拓扑视图—业务监控视图进行图表查看,如当前系统部分主机缺失,可联系BOMC管理员进行处理。 系统文件打开数 使用lsof |wc -l 查看所有进程文件打开数 使用cat /proc/sys/fs/file-max当前系统文件句柄的最大数目 2. redis实例相关巡检 配置文件校验 根据最新的配置文件参数设置,进行比对查看,主要比对最新修改或核心参数设置,可使用diff相关命令进行配置文件对比 redis错误日志检查 查看redis日志和错误日志文件,查看报错或异常信息 redis慢查询 登录redis集群使用slowget相关命令查看系统慢查询指令。 redis连接数 登录redis集群使用info命令查看Clients的数值。 redis内存使用情况 登录redis集群使用info命令查看Memory信息。 redis主从切换 使用cluster nodes命令查看集群各节点的信息,上次巡检的redis各节点角色状态是否发生改变 redis命中率 info命令查看集群信息,例如 keyspace_hits:14414110 keyspace_misses:3228654 命中率计算如下: keyspace_hits_values/( keyspace_hits_values+ keyspace_misses_values) 14414110/(14414110+3228654) redis集群状态 cluster status命令查看集群状态是否正常 ## 巡检报告 ![](/media/202303/2023-03-20_165422_8517400.32337435644444246.png) 存在问题紧急程度分类: 不 紧 急:表示发现的问题不会对应用系统造成影响,可以继续观察。 一般紧急:表示存在的问题有可能对应用系统造成影响,但可以继续观察。 紧 急:表示发现的问题比较严重,已影响部分应用系统,避免对其他应用造成影响,需要尽快解决。 非常紧急:表示发现的问题非常严重,已经对应用系统造成影响,甚至无法使用,需要立即解决。 ### 主机信息描述: ![](/media/202303/2023-03-20_165451_7147240.43302097505026016.png) ### 检查项目: ![](/media/202303/2023-03-20_165518_1500100.11053515934183056.png) ![](/media/202303/2023-03-20_165550_0446740.6580726418930021.png)
dz
2023年3月20日 16:56
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码