鄂州网站建设server2008 iis 网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:20
当前位置: 首页 > news >正文
鄂州网站建设,server2008 iis 网站,wordpress新文章类型,荆州松滋网站建设一、漏洞描述 Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值#xff08;Key-Value#xff09;存储数据库#xff0c;并提供多种语言的API。 Redis 7.0.0 到 7.0.10版本、6.2.0 到 6.2.11版本、6.0.0 到 …一、漏洞描述 Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值Key-Value存储数据库并提供多种语言的API。 Redis 7.0.0 到 7.0.10版本、6.2.0 到 6.2.11版本、6.0.0 到 6.0.18版本存在安全漏洞该漏洞源于对用户提供的输入的验证不充分攻击者利用该漏洞可以使用 HINCRBYFLOAT命令创建一个无效的哈希字段这将使 Redis 在访问时崩溃导致合法用户不能够访问正常服务 影响版本 7 Redis 7.0.11 6.2 Redis 6.2.12 Redis 6.0.19 现场版本6.2.7需要升级到6.2.13 漏洞链接: https://access.redhat.com/security/cve/cve-2023-28856 官方补丁https://github.com/redis/redis/https://github.com/redis/redis/pull/11149 https://github.com/redis/redis/commit/c924ac3fdf8fe544891dc66c88018e259ee4be87 修复建议厂商已发布了漏洞修复程序请使用此产品的用户尽快更新至安全版本https://redis.io/官网安装文档 二、处理过程 2.1、升级前准备 #版本检查 redis-server -v #介质下载 wget https://download.redis.io/releases/redis-6.2.13.tar.gz #或 wget https://download.redis.io/redis-stable.tar.gz #或补丁修复 #src/t_hash.c unsigned int vlen;if (getLongDoubleFromObjectOrReply(c,c-argv[3],incr,NULL) ! C_OK) return;#增加以下4行if (isnan(incr) || isinf(incr)) {addReplyError(c,value is NaN or Infinity);return;}#到这里if ((o hashTypeLookupWriteOrCreate(c,c-argv[1])) NULL) return;if (hashTypeGetValue(o,c-argv[2]-ptr,vstr,vlen,ll) C_OK) {if (vstr) { #tests/unit/type/hash.tclassert {[r hincrbyfloat myhash float -0.1] eq {1.9}}}}#增加如下4行test {HINCRBYFLOAT does not allow NaN or Infinity} {assert_error value is NaN or Infinity {r hincrbyfloat hfoo field inf}assert_equal 0 [r exists hfoo]}备份使用redis自带工具备份和导出 Redis 数据参考如下 SAVE 阻塞所有客户端直到 RDB 文件创建完毕。SAVE 命令将数据集持久化到硬盘上阻塞 Redis 服务器进程直到快照文件创建完毕。如果正在使用 AOF 持久化SAVE 命令将被忽略。 BGSAVE 在后台异步保存 RDB 快照。Redis 会 fork 出一个新的子进程进行快照的生成工作当前进程继续处理新的命令请求不会被阻塞。在自动触发RDB持久时Redis会选择bgsave而不是save来进行持久化在主从复制场景下如果从节点执行全量复制操作则主节点会执行bgsave命令并将rdb文件发送给从节点执行shutdown命令时自动执行rdb持久化redis被kill则不会触发备份机制。 #rdb和aof开启验证 #rdb开启配置 save 900 1 save 300 10 save 60 10000 dbfilename dump.rdb dir ./ rdbcompression yes #Redis采用LZF压缩方式默认启用#AOF开启 appendonly yes appendfilename appendonly.aof aof-load-truncated yes #是否忽略最后一条可能存在问题的指令#或执行 grep -Ev ^#|^$ redis.conf|grep -Ei aof|rdb //输出如下可知现场同时开启了rdb和aof rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no appendfilename appendonly.aof auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes # RDB-AOF 混合持久化模式开启了 aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yesll ./data/ //输出如下 total 44536028 -rw-r–r– 1 root root 34872627978 Jun 28 09:32 appendonly.aof -rw-r–r– 1 root root 10732234315 Jun 28 09:48 dump.rdb -rw-r–r– 1 root root 129 Dec 23 2022 nodes-7379.conf#备份rdb和aof文件 redis config get dir //确认数据文件目录 redis-cli –rdb dump.rdb #方式1 redis-cli save #方式2 redis-cli bgsave #方式3 redis-cli save /data1/redis-6.2.7/dump_date %Y%m%d.rdb #方式4 cp -pr ./data/ ./data_20230808#现场为了方便整体redis打包备份 cd /data1/ tar -czf redis627.tar.gz /data1/redis-6.2.7#备份redis二进制文件 #二进制文件检查 ll /usr/local/bin/redis* //输出如下 -rwxr-xr-x 1 root root 4830144 Dec 23 2022 /usr/local/bin/redis-benchmark lrwxrwxrwx 1 root root 12 Dec 23 2022 /usr/local/bin/redis-check-aof - redis-server lrwxrwxrwx 1 root root 12 Dec 23 2022 /usr/local/bin/redis-check-rdb - redis-server -rwxr-xr-x 1 root root 5004264 Dec 23 2022 /usr/local/bin/redis-cli lrwxrwxrwx 1 root root 12 Dec 23 2022 /usr/local/bin/redis-sentinel - redis-server -rwxr-xr-x 1 root root 9536000 Dec 23 2022 /usr/local/bin/redis-server -rwxr-xr-x 1 root root 3600 Dec 23 2022 /usr/local/bin/redis-trib.rb mv redis-server redis-server_6.2.7 mkdir -p /data1/redis_backup mv /usr/local/bin/redis* /data1/redis_backup2.2、编译安装 #关停redis redis-cli shutdown #新的redis目录 cd /data1 tar -xzvf redis-6.2.13.tar.gz cd redis-6.2.13 make cp src/redis-benchmark /usr/local/bin/ cp src/redis-check-aof /usr/local/bin/ #注意软连接 cp src/redis-check-dump /usr/local/bin/ cp src/redis-cli /usr/local/bin/ cp src/redis-sentinel /usr/local/bin/ #注意软连接 cp src/redis-server /usr/local/bin/ cp src/redis-check-rdb /usr/local/bin/ #注意软连接 cp src/redis-trib.rb /usr/local/bin/ //二进制替换旧不用执行如下安装命令了 make install chmod 755 /usr/local/bin/redis#二进制文件替换#重启服务 mv /data1/redis-6.2.7/ /data1/redis-6.2.13/ /usr/local/redis-server /data1/redis-6.2.13/redis.conf 注启动新版本的 Redis 服务后需要将原来的 Redis 数据导入到新版本的 Redis 中。可以使用 Redis 的数据同步命令将原来的数据同步到新的 Redis 中。Redis 数据同步命令常用的有两个 slaveof将 Redis 服务设置为主从模式将原来的 Redis 服务设置为主服务器新版本的 Redis 服务设置为从服务器。 sync将从服务器上的数据库与主服务器进行同步。 示例命令 redis-cli -h oldredis_ip -p oldredis_port slaveof newredis_ip 6380 redis-cli sync //新版本中执行同步命令 redis-benchmark -h newredis_ip -p 6380 -n 10000 -c 5 //同步完成后测试确保数据完整性和服务可用性 2.3、验证 #连接 redis 客户端 ./redis-cli -p 6379 -h ip #查看版本命令 ip:portinfo server //输出版本 #或 ./redis-cli -p 6379 -h ip info #或 redis-cli –version redis-server–version2.4、平滑升级 某些场景因Redis无法停止服务为避免造成数据丢失需要采用平滑升级办法用新版替代redis完成升级。整体步骤如下 1下载编译安装启动一个6.2.13版的redis。 2配置文件修改作为slave进行配置。 3启动slave并做好数据测试。 4将原来程序的redis读写迁移到新的slave上。 5 升级原来的版本到2.6.14 迁移切换步骤切换场景描述升级前生产主机 , redis6.2.7 , 单redis实例a升级中生产主机 , redis 6.2.7 ,redis master实例a生产主机, redis6.2.13 ,redis slave实例b升级后生产主机 , redis6.2.13, redis slave实例a生产主机 , redis 6.2.13, redis master实例b #第一部分确认当前持久化方式端口数据量 //参考上文本次涉及数据达亿级#第二部分在同主机上创建修复版本 Redis实例 mkdir -p /data1/redis-6.2.13/{bin,data,logs,etc} //安装 wget https://download.redis.io/releases/redis-6.2.13.tar.gz tar -xzvf redis-6.2.13.tar.gz cd redis-6.2.13 make //这里不安装只生成二进制文件 cp src/redis-benchmark /usr/local/bin/ cp src/redis-check-aof /usr/local/bin/ #注意软连接 cp src/redis-check-dump /usr/local/bin/ cp src/redis-cli /usr/local/bin/ cp src/redis-sentinel /usr/local/bin/ #注意软连接 cp src/redis-server /usr/local/bin/ cp src/redis-check-rdb /usr/local/bin/ #注意软连接 cp src/redis-trib.rb /usr/local/bin/#验证ls ./bin/ total 46932 drwxr-x— 2 root root 4096 Aug 9 01:09 . drwxr-xr-x 7 root root 4096 Aug 9 01:06 .. -rwxr-x— 1 root root 4830432 Aug 9 01:05 redis-benchmark -rwxr-xr-x 1 root root 9547992 Aug 9 01:05 redis-check-aof -rwxr-xr-x 1 root root 9547992 Aug 9 01:05 redis-check-rdb -rwxr-x— 1 root root 5004544 Aug 9 01:05 redis-cli -rwxr-xr-x 1 root root 9547992 Aug 9 01:05 redis-sentinel -rwxr-x— 1 root root 9547992 Aug 9 01:05 redis-server -rwxrwxr-x 1 root root 3600 Jul 10 19:37 redis-trib.rb#配置文件 less /data1/redis/etc/redis.conf内容如下 daemonize yes pidfile /data1/redis/redis.pid port 6379 bind 192.168.1.229 timeout 300 loglevel warning logfile /data1/redis/logs/redis.log databases 16 save 900 1 save 300 10 save 60 10000 rdbcompression yes dbfilename /data1/redis/data/redis.rdb dir /data1/redis/data/ replicaof 172.18.1.151 7379 //注意这2行之前为slaveof masterip port指定同步的master replica-serve-stale-data yes //之前为slave-serve-stale-data maxmemory 128mb appendonly no appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb slowlog-log-slower-than 10000 slowlog-max-len 1024 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 activerehashing yes masterauth 123456#启动 slave同步数据 /data1/redis/bin/redis-server /data1/redis/etc/redis.conf //现场竟然启动了集群模式 cluster-enabled yes ** FATAL CONFIG FILE ERROR (Redis 6.2.13) *** Reading the configuration file, at line 480replicaof 172.18.1.151 7379 replicaof directive not allowed in cluster mode#本地客户端登录查看 ./bin/redis-cli -h 172.18.1.146 -p 7379 172.18.1.146:7379 info
Server
redis_version:6.2.13 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:b3aa13c3700e5b79 redis_mode:standalone os:Linux 3.10.0-862.el7.x86_64 x86_64 arch_bits:64 monotonic_clock:POSIX clock_gettime multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:4.8.5 process_id:11745 process_supervised:no run_id:13031ec1eec8b67db06ebfa2c1fbcc64a4335714 tcp_port:7379 server_time_usec:1691517037070105 uptime_in_seconds:167 uptime_in_days:0 hz:10 configured_hz:10 lru_clock:13795436 executable:/data1/redis/bin/redis-server config_file:/data1/redis/etc/redis.conf io_threads_active:0# Clients connected_clients:1 cluster_connections:0 maxclients:10000 client_recent_max_input_buffer:24 client_recent_max_output_buffer:0 blocked_clients:0 tracking_clients:0 clients_in_timeout_table:0# Memory used_memory:875952 used_memory_human:855.42K used_memory_rss:9945088 used_memory_rss_human:9.48M used_memory_peak:875952 used_memory_peak_human:855.42K used_memory_peak_perc:100.20% used_memory_overhead:832632 used_memory_startup:812120 used_memory_dataset:43320 used_memory_dataset_perc:67.87% allocator_allocated:904984 allocator_active:1187840 allocator_resident:4681728 total_system_memory:67386519552 total_system_memory_human:62.76G used_memory_lua:30720 used_memory_lua_human:30.00K used_memory_scripts:0 used_memory_scripts_human:0B number_of_cached_scripts:0 maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction allocator_frag_ratio:1.31 allocator_frag_bytes:282856 allocator_rss_ratio:3.94 allocator_rss_bytes:3493888 rss_overhead_ratio:2.12 rss_overhead_bytes:5263360 mem_fragmentation_ratio:11.94 mem_fragmentation_bytes:9111896 mem_not_counted_for_evict:4 mem_replication_backlog:0 mem_clients_slaves:0 mem_clients_normal:20504 mem_aof_buffer:8 mem_allocator:jemalloc-5.1.0 active_defrag_running:0 lazyfree_pending_objects:0 lazyfreed_objects:0# Persistence loading:0 current_cow_size:0 current_cow_size_age:0 current_fork_perc:0.00 current_save_keys_processed:0 current_save_keys_total:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1691516870 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:-1 rdb_current_bgsave_time_sec:-1 rdb_last_cow_size:0 aof_enabled:1 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok aof_last_cow_size:0 module_fork_in_progress:0 module_fork_last_cow_size:0 aof_current_size:0 aof_base_size:0 aof_pending_rewrite:0 aof_buffer_length:0 aof_rewrite_buffer_length:0 aof_pending_bio_fsync:0 aof_delayed_fsync:0# Stats total_connections_received:2 total_commands_processed:1 instantaneous_ops_per_sec:0 total_net_input_bytes:81 total_net_output_bytes:73 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.00 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 expired_stale_perc:0.00 expired_time_cap_reached_count:0 expire_cycle_cpu_milliseconds:0 evicted_keys:0 keyspace_hits:0 keyspace_misses:0 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:0 total_forks:0 migrate_cached_sockets:0 slave_expires_tracked_keys:0 active_defrag_hits:0 active_defrag_misses:0 active_defrag_key_hits:0 active_defrag_key_misses:0 tracking_total_keys:0 tracking_total_items:0 tracking_total_prefixes:0 unexpected_error_replies:0 total_error_replies:2 dump_payload_sanitizations:0 total_reads_processed:5 total_writes_processed:3 io_threaded_reads_processed:0 io_threaded_writes_processed:0# Replication role:slave master_host:172.18.1.151 master_port:7379 master_link_status:down //这里异常应该是生产环境启动了集群模式且配置了密码认证 master_last_io_seconds_ago:-1 //这里正常为正数 master_sync_in_progress:0 slave_read_repl_offset:1 slave_repl_offset:1 master_link_down_since_seconds:-1 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:34181e63a9534606ff4f2db893db1880bacc97b0 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# CPU used_cpu_sys:7.382855 used_cpu_user:2.753302 used_cpu_sys_children:0.000000 used_cpu_user_children:0.000000 used_cpu_sys_main_thread:7.026060 used_cpu_user_main_thread:2.675756# Modules# Errorstats errorstat_NOAUTH:count2# Cluster cluster_enabled:0# Keyspace#等待一会儿再执行这时就会看到状态up 172.18.1.146:7379 info replication
Replication
role:slave
master_host:172.18.1.151
master_port:7379
master_link_status:up //这时已经up了
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_read_repl_offset:2800
slave_repl_offset:2800
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:dfd252edeaaf6d7c983e17abd77d6e9a5217a9ff
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2800
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:519
repl_backlog_histlen:2282#主库上查看
172.18.1.151:7379 info replication
Replication
role:master connected_slaves:1 slave0:ip172.18.1.146,port7379,stateonline,offset3668,lag1 master_failover_state:no-failover master_replid:dfd252edeaaf6d7c983e17abd77d6e9a5217a9ff master_replid2:0000000000000000000000000000000000000000 master_repl_offset:3668 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:3668redis-cli -h 172.18.1.146 -p 7002 -a admin info replication | grep repl_offset #保障主从节点偏移量一致就是同步了#配置slave读写可视情况将业务临时切换到slave上 ./bin/redis-cli -h 172.18.1.146 -p 7379 -a admin config set slave-read-only no //或 172.18.1.146:7379 CONFIG set slave-read-only no OK 172.18.1.146:7379 CONFIG get slave-read-only
slave-read-only
no#主库上升级redis只make wget https://download.redis.io/releases/redis-6.2.13.tar.gz tar -xzvf redis-6.2.13.tar.gz cd redis-6.2.13 make //这里不安装只生成二进制文件#备份AOF文件rdb文件已同步到slave cp -pr ./appendonly.aof ./appendonly.aof.20230809 172.18.1.51:7379 bgsave #落盘 Background saving started (0.71s)#slave关停同步避免主库在未完成版本升级前就重启进而直接覆盖掉从库上的数据导致所有的数据丢失。 172.18.1.146:7379 SLAVEOF NO ONE#生产master执行shutdown 默认采用shutdown save模式 172.18.1.151:7379 shutdown (320.60s)#redis二进制文件替代 mkdir /usr/local/bin/redsi-bak mv /usr/local/bin/redis-* /usr/local/bin/redsi-bak/ cp -pr ./redis-benchmark /usr/local/bin/ cp -pr ./redis-check-aof /usr/local/bin/ cp -pr ./redis-check-rdb /usr/local/bin/ cp -pr ./redis-cli /usr/local/bin/ cp -pr ./redis-sentinel /usr/local/bin/ cp -pr ./redis-server /usr/local/bin/ cp -pr ./redis-trib.rb /usr/local/bin/#重启生产库 /usr/local/bin/redis-server /data1/redis-6.2.7/redis.conf#登录验证 usr/local/bin/redis-cli -h 172.18.1.51 -p 7379 –raw 172.18.1.151:7379 info
Server
redis_version:6.2.13 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:2d6fc318bc558dd0 redis_mode:cluster os:Linux 3.10.0-862.el7.x86_64 x86_64 arch_bits:64 monotonic_clock:POSIX clock_gettime multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:4.8.5 另平滑升级可参考平滑升级;cluster模式参考 当我们重启Redis时如何保证数据的完整性呢redis 在启动时会加载 dump.rdb 文件可删除redis启动就会读取AOF文件只许追加文件但不可以改写文件重新构建数据即redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作启动中我们常会遇到 ‘LOADING Redis is loading the dataset in memory’ 的提示。这是由于 Redis 在加载数据到内存时所发出的提示。AOF 持久化记录服务器执行的所有写操作命令并在服务器启动时通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写rewrite使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下 当 Redis 重启时 它会优先使用 AOF 文件来还原数据集 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。 Redis提供了两个配置参数appendonly和rdbchecksum。前者可以开启AOF持久化机制让Redis在关闭后自动把操作日志转储到硬盘上后者则会在快照数据中添加校验和确保恢复的数据完整性。另外我们还可以使用Redis提供的redis-check-aof和redis-check-dump工具来进行AOF文件和RDB文件的检查和恢复。Redis关闭后有一定的数据丢失可能性但是通过使用Redis的持久化机制可以将数据存储到硬盘中确保Redis关闭后数据不会丢失。此外在Redis重启后也要特别注意数据恢复的问题使用Redis提供的工具进行文件检查和恢复保证数据的完整性。 三、附录 3.1、Redis持久化 Redis将数据存储在内存中,宕机或重启都会使内存数据全部丢失, Redis的持久化机制用来保证数据不会因为故障而丢失。Redis提供两种持久化方式 RDB(内存快照方式)生成rdb文件rdb是某一时间点内存数据的全量备份,文件内容是存储结构非常紧凑的二进制序列化形式主要用于缓存和数据迁移备份场景 优点 全量快照数据与内存基本是一致的。 占用空间相对比较小。 快照是二进制文件生成、恢复都比较快。 缺点 丢失数据的概率相对有点大。注意SHUTDOWN 和 FLUSHALL 清空命令都会触发RDB快照 配置参考 语法save seconds changes #save “” save 900 1 save 300 10 save 60 10000 dbfilename dump.rdb dir ./ rdbcompression yes #Redis采用LZF压缩方式 AOF(日志备份方式) 日志保存的是基于数据的连续增量备份日志文件内容是服务端执行的每一条指令的记录文本。 解发机制 always内存更新一条即往磁盘追加一条。 everysec每1s往磁盘追加一次。 no同步的操作交给操作系统来完成。 优点 直接追加同步开销相对较小可根据需求自由选择安全和性能。 .缺点 日志文件是普通文本文件恢复相对较慢。此外日志文件中会包含很多无用操作。 当 aof-use-rdb-preamble 设置为 yes 时表示开启 RDB-AOF 混合持久化模式在该模式下AOF 重写产生的文件将同时包含 RDB 格式的内容和 AOF 格式的内容该文件的前半段是 RDB 格式的全量数据而后半段是 Redis 命令格式的增量数据 Redis持久化策略选用参考 如果数据不能丢失RDB和AOF混用。—-常用 如果只作为缓存使用可以接受部分数据的丢失可以使用RDB。 如果只使用AOF优先使用everysec的写回策略。 3.2、创建redis自启动服务 vi /etc/systemd/system/redis.service //参考如下 [Unit] DescriptionThe redis-server Process lanager Aftersyslog. target Afternetwork. target [Service] Typeforking ExecStart/usr/1ocal/bin/redis-server /data1/redis-6.2.13/redis.conf ExecStop/usr/1ocal/bin/redis-cli -p%i shutdown Restartalways PrivateTmptrue [Instal1] WantedBymulti-user.target#配置 systemctl enable –now redis{7000, 7001}.service systemctl status redis7000.service systemctl start redis7000.service3.3、Redis升级脚本 #!/bin/bash# 备份 Redis 数据 echo Backup Redis data… redis-cli bgsave cd /data1 redis-cli shutdown mv /data1/redis-6.2.7 /data1/redis-back_date %Y%m%d
下载 Redis 新版本
echo Downloading Redis new version… wget -q https://download.redis.io/releases/redis-6.2.13.tar.gz# 解压 Redis 安装包 echo Extracting Redis package… tar xzf redis-6.2.13.tar.gz cd redis-6.2.13# 编译 Redis echo Compiling Redis… make# 安装 Redis echo Installing Redis… make install# 启动新版本 Redis echo Starting Redis new version… redis-server /path/to/new/redis.conf –port 6380 amp;# 数据同步 echo Synchronizing Redis data… redis-cli -h old_redis_host -p old_redis_port slaveof new_redis_host 6380 redis-cli sync# 测试 Redis echo Testing Redis… redis-benchmark -h new_redis_host -p 6380 -n 10000 -c 53.4、备份脚本 #!/bin/bash###————-版本变更记录——————-
日期 描述 作者
###——————————————–
2023-01-27 Redis备份 麦龙飞###使用方法是sh ./redis-backup.sh 60 15
###参数1如果bgsave命令在60个时间单位内没完成就是会备份失败。一个时间单位是5s ###参数2备份文件最少保留15天if [[ -z \(1 ]]; thenbgsave_time60 elsebgsave_time\)1 fiif [[ -z \(2 ]]; thenbackup_keepday15 elsebackup_keepday\)2 fi#获取当前时间-秒 backup_time\((date %F %T) #获取当前时间-天 backup_day\)(date %Y-%m-%d)#redis安装目录 apps_dir/usr/local #redis数据备份的目录 redis_backup_dir/data/redis-backup #redis端口列表 redis_port[7001, 7002] port_list\((echo \){redis_port} | grep -Eo [0-9]{0,6}) #机器IP地址 ip_address10.1.1.11#备份配置文件 redis_conf_backup() {cp \({redis_home_dir}/conf/*.conf \){redis_backup_dir_today} }#备份数据持久化文件 redis_data_backup() {#持久化数据\({redis_cli_command} bgsave /dev/null 21for ((i1;i\){bgsave_time};i)); do#判断bgsave命令是否已经执行完成bgsave_status\((\){redis_cli_command} info 2 /dev/null | grep -o rdb_bgsave_in_progress:0)if [[ -n \({bgsave_status} ]]; thencp \){redis_home_dir}/data/appendonly.aof \({redis_backup_dir_today}cp \){redis_home_dir}/data/dump.rdb \({redis_backup_dir_today}echo \){backup_time} \({redis_home_dir}实例使用\){i}个时间单位备份成功 \({redis_backup_dir}/redis-backup.logbreakfisleep 5#如果在指定时间单位内bgsave命令没有完成就会备份失败if [[ \){i} -eq \({bgsave_time} ]]; thenecho \){backup_time} \({redis_home_dir}实例在\){i}个时间单位内没有运行完bgsave备份失败 \({redis_backup_dir}/redis-backup.logfidone }#管理备份文件 management_backup() {cd \){redis_backup_dir}/\({backup_day}#压缩当天的备份文件tar zfc \){1}.tar.gz \({1} --remove-files#清理备份文件清理相应的端口文件清理空目录find \){redis_backup_dir}/* -mtime \({backup_keepday} \( \( -type f -iname \){1}* ) -o ( -type d ) ) -delete }#遍历所有端口reids实例 for port in \({port_list}; doredis_home_dir\){apps_dir}/redis-\({port}redis_passwd\)(grep ^\s*requirepass \({redis_home_dir}/conf/redis-\){port}.conf | awk {print \(2})redis_cli_command\){redis_home_dir}/bin/redis-cli -h \({ip_address} -p \){port} -a \({redis_passwd}#判断reids实例是否是master如果是则进行备份node_status\)(\({redis_cli_command} info 2 /dev/null | grep -o role:master)if [[ -n \){node_status} ]]; then#创建备份目录redis_backup_dir_today\({redis_backup_dir}/\){backup_day}/\({port}if [[ ! -d \){redis_backup_dir_today} ]]; thenmkdir -p \({redis_backup_dir_today}fi#备份配置文件redis_conf_backup#备份数据持久化文件redis_data_backup#管理备份文件如果备份持久化文件失败则不清理相应的持久化文件if [[ -f \){redis_backup_dir_today}/dump.rdb ]]; thenmanagement_backup ${port}fifi done3.5、Redis几个重要的指标 【0】慢日志①、通过命令[slowlog get]得到 Redis 执行的 slowlog 集合理想情况下slowlog 集合应该为空即没有任何慢日志。②、若发现有慢命令则应该逐个分析是否正常是否需要优化。 【1】存活情况是最重要的健康指标通过命令 PING 的响应是否为 PONG 来判断。 【2】连接数①、连接的客户端数量[redis-cli info Clients|grep connected_clients] 得到这个值与使用 Redis 服务的连接池配置关系比较大这个值如果很大需要排查问题原因。②、另外还有一个拒绝连接数rejected_connections也需要关注这个值理想状态是 0 。如果大于 0说明创建的连接数大于 maxclients需要排查原因。是 Redis 连接池配合不合理还是连接这个Redis 的服务过多。 【3】阻塞客户端数量blocked_clients 通常是执行了 list 数据类型的 BLPOP 或者 BRPOP 命令引起的可以通过[redis-cli info Clients|grep blocked_clients]得到这个值最应该0。 【4】使用内存峰值①、监控 Redis 内存使用峰值可以通过命令[config set maxmemory]设置允许使用的最大内存。②、为了防止发生 swap 导致 Redis 性能骤减甚至由于使用内存超标导致系统kill建议used_memory_peak占用内存的峰值的值与maxmemory 的值有个安全区间例如1G。 【5】内存碎片率 ①、mem_fragmentation_ratio used_memory_rss/use_memory 当值大于1时表示分配的内存超过实际使用的内存数值越大[利用率不高]碎片率越严重。当这个值小于1时表示发生了 swapSwap分区在系统的物理内存不够用的时候把物理内存中的一部分空间释放出来以供当前运行的程序使用 既可用内存不足。 ②、Redis4.0 有一个主要的特性就是优化内存碎片率问题Memory defragmentation。在redis.conf 配置文件中[ACTIVE DEFRAGMENTATION碎片整理允许 Redis 压缩内存空间从而回收内存。此特性默认是关闭的可以通过命令CONFIG SET activedefrag yes 热启动这个特性]。 ③、当内存使用量use_memory很小的时候这个值参考价值不大。所以建议 used_memory 至少 1G 以上才考虑对内存碎片率进行监控。 【6】缓存命中率①、keyspace_misses/keyspace_hits 这两个指标用来统计缓存的命中率keyspace_misses值未命中次数keyspace_hits 表示命令次数。keyspace_hits/(keyspace_misseskeyspace_hits) 就是缓存命中率。②、如果缓存命中率过低那么要排查对缓存的用法是否有问题。 【7】OPSinstantaneous_pos_per_sec 表示缓存的OPSoperation per second 每秒操作次数 【8】持久化①、rdb_last_bgsave_status/aof_last_bgrewrite_status即最近一次或者最后一次 RDB/AOF 持久化是否有问题这两个值都应该时 “OK”。②、由于 Redis 持久化时会 fork 子进程且 fork 是一个完全阻塞的过程所以可以监控 fork 耗时即latest_fork_usec单位是微妙如果这个值比较大会影响业务甚至出现 timeout 。 【9】失效KEY如果把 Redis 当缓存使用那么建议所有的 key 都设置 expire 属性通过命令 redis-cli info Keyspace 得到每个 db 中 key 的数量和设置了 expire属性的 key 的属性且 expires表示设置了超时时间的key个数 需要等于 keys。
- 上一篇: 鄂州市住房和城乡建设部网站长沙网站建设建
- 下一篇: 鄂州网站建设公司上海外贸公司工资一般多少
相关文章
-
鄂州市住房和城乡建设部网站长沙网站建设建
鄂州市住房和城乡建设部网站长沙网站建设建
- 技术栈
- 2026年03月21日
-
鄂尔多斯网站建设公司网络营销方式的优缺点
鄂尔多斯网站建设公司网络营销方式的优缺点
- 技术栈
- 2026年03月21日
-
饿了么如何做网站推广怎么把wordpress
饿了么如何做网站推广怎么把wordpress
- 技术栈
- 2026年03月21日
-
鄂州网站建设公司上海外贸公司工资一般多少
鄂州网站建设公司上海外贸公司工资一般多少
- 技术栈
- 2026年03月21日
-
鄂州网站制作人才招聘没有自己的境外网站怎么做谷歌推广
鄂州网站制作人才招聘没有自己的境外网站怎么做谷歌推广
- 技术栈
- 2026年03月21日
-
恩施市网站建设阳江房产网春天尚院
恩施市网站建设阳江房产网春天尚院
- 技术栈
- 2026年03月21日






