chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis集群部署與性能優(yōu)化實(shí)戰(zhàn)

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 2025-07-08 17:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Redis集群部署與性能優(yōu)化實(shí)戰(zhàn)

引言

Redis作為高性能的內(nèi)存數(shù)據(jù)庫(kù),在現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中扮演著關(guān)鍵角色。作為運(yùn)維工程師,掌握Redis的部署、配置和優(yōu)化技能至關(guān)重要。本文將從實(shí)戰(zhàn)角度出發(fā),詳細(xì)介紹Redis集群的搭建、性能優(yōu)化以及監(jiān)控運(yùn)維的核心技術(shù)。

1. Redis單機(jī)部署與基礎(chǔ)配置

1.1 基礎(chǔ)安裝腳本

#!/bin/bash
# Redis安裝腳本
set-e

REDIS_VERSION="7.0.15"
REDIS_PORT="6379"
REDIS_DIR="/opt/redis"

# 創(chuàng)建redis用戶
useradd -r -s /bin/false redis

# 下載編譯Redis
cd/tmp
wget http://download.redis.io/releases/redis-${REDIS_VERSION}.tar.gz
tar xzf redis-${REDIS_VERSION}.tar.gz
cdredis-${REDIS_VERSION}

# 編譯安裝
make && make install PREFIX=${REDIS_DIR}

# 創(chuàng)建配置目錄
mkdir-p${REDIS_DIR}/{conf,data,logs}
chown-R redis:redis${REDIS_DIR}

echo"Redis安裝完成"

1.2 核心配置文件

# /opt/redis/conf/redis.conf
# 基礎(chǔ)網(wǎng)絡(luò)配置
bind 127.0.0.1 192.168.1.100
port 6379
timeout 300
tcp-keepalive 300

# 持久化配置
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /opt/redis/data

# 內(nèi)存管理
maxmemory 2gb
maxmemory-policy allkeys-lru
maxmemory-samples 5

# 安全配置
requirepass your_strong_password
# 重命名危險(xiǎn)命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""

# 日志配置
logfile /opt/redis/logs/redis.log
loglevel notice

單機(jī)Redis適合開發(fā)和測(cè)試環(huán)境,但生產(chǎn)環(huán)境需要考慮高可用和擴(kuò)展性。通過合理的配置,可以有效提升Redis性能和穩(wěn)定性。

2. Redis集群搭建

2.1 集群架構(gòu)設(shè)計(jì)

Redis集群采用無中心架構(gòu),數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn)上。我們將搭建一個(gè)包含6個(gè)節(jié)點(diǎn)的集群:3個(gè)主節(jié)點(diǎn)和3個(gè)從節(jié)點(diǎn)。

#!/bin/bash
# Redis集群初始化腳本
CLUSTER_NODES=(
 "192.168.1.101:7001"
 "192.168.1.102:7002"
 "192.168.1.103:7003"
 "192.168.1.104:7004"
 "192.168.1.105:7005"
 "192.168.1.106:7006"
)

# 創(chuàng)建集群配置
fornodein"${CLUSTER_NODES[@]}";do
  IFS=':'read-r ip port << /opt/redis/cluster/${port}/conf/redis.conf <

2.2 集群?jiǎn)?dòng)與創(chuàng)建

#!/bin/bash
# 啟動(dòng)所有Redis節(jié)點(diǎn)
start_cluster_nodes() {
 forportin7001 7002 7003 7004 7005 7006;do
    redis-server /opt/redis/cluster/${port}/conf/redis.conf --daemonizeyes
   echo"啟動(dòng)節(jié)點(diǎn)${port}"
   sleep2
 done
}

# 創(chuàng)建集群
create_cluster() {
  redis-cli --cluster create 
    192.168.1.101:7001 
    192.168.1.102:7002 
    192.168.1.103:7003 
    192.168.1.104:7004 
    192.168.1.105:7005 
    192.168.1.106:7006 
    --cluster-replicas 1
}

# 檢查集群狀態(tài)
check_cluster() {
  redis-cli -p 7001 cluster nodes
  redis-cli -p 7001 cluster info
}

start_cluster_nodes
create_cluster
check_cluster

集群搭建完成后,數(shù)據(jù)將自動(dòng)分片存儲(chǔ)在不同節(jié)點(diǎn)上,實(shí)現(xiàn)了水平擴(kuò)展和高可用性。

3. 性能優(yōu)化配置

3.1 內(nèi)存優(yōu)化參數(shù)

#!/usr/bin/env python3
# Redis性能測(cè)試腳本
importredis
importtime
importthreading
fromconcurrent.futuresimportThreadPoolExecutor

classRedisPerformanceTest:
 def__init__(self, host='127.0.0.1', port=6379, password=None):
   self.pool = redis.ConnectionPool(
      host=host,
      port=port,
      password=password,
      max_connections=100,
      decode_responses=True
    )
   self.client = redis.Redis(connection_pool=self.pool)
   
 deftest_write_performance(self, count=10000):
   """測(cè)試寫入性能"""
    start_time = time.time()
   
   withself.client.pipeline()aspipe:
     foriinrange(count):
        pipe.set(f"key:{i}",f"value:{i}")
       ifi %1000==0:
          pipe.execute()
          pipe.reset()
      pipe.execute()
     
    end_time = time.time()
    ops_per_second = count / (end_time - start_time)
   print(f"寫入性能:{ops_per_second:.2f}ops/sec")
   
 deftest_read_performance(self, count=10000):
   """測(cè)試讀取性能"""
    start_time = time.time()
   
   withself.client.pipeline()aspipe:
     foriinrange(count):
        pipe.get(f"key:{i}")
       ifi %1000==0:
          pipe.execute()
          pipe.reset()
      pipe.execute()
     
    end_time = time.time()
    ops_per_second = count / (end_time - start_time)
   print(f"讀取性能:{ops_per_second:.2f}ops/sec")

# 運(yùn)行性能測(cè)試
if__name__ =="__main__":
  test = RedisPerformanceTest()
  test.test_write_performance()
  test.test_read_performance()

3.2 系統(tǒng)級(jí)別優(yōu)化

#!/bin/bash
# 系統(tǒng)級(jí)別Redis優(yōu)化腳本

# 內(nèi)存優(yōu)化
echo"vm.overcommit_memory=1">> /etc/sysctl.conf
echo"net.core.somaxconn=65535">> /etc/sysctl.conf
echo"vm.swappiness=1">> /etc/sysctl.conf

# 禁用透明大頁(yè)
echonever > /sys/kernel/mm/transparent_hugepage/enabled
echo"echo never > /sys/kernel/mm/transparent_hugepage/enabled">> /etc/rc.local

# 調(diào)整文件描述符限制
cat>> /etc/security/limits.conf <

性能優(yōu)化需要從多個(gè)維度考慮:內(nèi)存管理、網(wǎng)絡(luò)配置、持久化策略等。通過合理配置,可以顯著提升Redis的處理能力。

4. 監(jiān)控與故障排除

4.1 監(jiān)控腳本

#!/usr/bin/env python3
# Redis監(jiān)控腳本
importredis
importjson
importtime
importpsutil
fromdatetimeimportdatetime

classRedisMonitor:
 def__init__(self, host='127.0.0.1', port=6379):
   self.client = redis.Redis(host=host, port=port, decode_responses=True)
   
 defget_redis_info(self):
   """獲取Redis信息"""
    info =self.client.info()
   return{
     'memory_usage': info['used_memory_human'],
     'memory_usage_rss': info['used_memory_rss_human'],
     'connected_clients': info['connected_clients'],
     'total_commands_processed': info['total_commands_processed'],
     'instantaneous_ops_per_sec': info['instantaneous_ops_per_sec'],
     'keyspace_hits': info['keyspace_hits'],
     'keyspace_misses': info['keyspace_misses'],
     'expired_keys': info['expired_keys']
    }
 
 defcheck_slow_queries(self):
   """檢查慢查詢"""
    slow_queries =self.client.slowlog_get(10)
   return[{
     'id': query['id'],
     'timestamp': query['start_time'],
     'duration': query['duration'],
     'command':' '.join(query['command'])
    }forqueryinslow_queries]
 
 defmonitor_loop(self, interval=60):
   """監(jiān)控循環(huán)"""
   whileTrue:
     try:
        redis_info =self.get_redis_info()
        slow_queries =self.check_slow_queries()
       
        monitor_data = {
         'timestamp': datetime.now().isoformat(),
         'redis_info': redis_info,
         'slow_queries': slow_queries,
         'system_memory': psutil.virtual_memory()._asdict()
        }
       
       # 輸出監(jiān)控?cái)?shù)據(jù)
       print(json.dumps(monitor_data, indent=2))
       
       # 檢查告警條件
       ifredis_info['connected_clients'] >1000:
         print("ALERT: 連接數(shù)過高")
       
       iflen(slow_queries) >5:
         print("ALERT: 慢查詢過多")
         
     exceptExceptionase:
       print(f"監(jiān)控異常:{e}")
       
      time.sleep(interval)

# 啟動(dòng)監(jiān)控
if__name__ =="__main__":
  monitor = RedisMonitor()
  monitor.monitor_loop()

4.2 故障自動(dòng)恢復(fù)

#!/bin/bash
# Redis故障自動(dòng)恢復(fù)腳本
REDIS_PORT=6379
REDIS_PASSWORD="your_password"
LOG_FILE="/var/log/redis_recovery.log"

check_redis_health() {
  redis-cli -p$REDIS_PORT-a$REDIS_PASSWORDping >/dev/null 2>&1
 return$?
}

recover_redis() {
 echo"$(date): 檢測(cè)到Redis故障,開始恢復(fù)">>$LOG_FILE
 
 # 檢查Redis進(jìn)程
 if! pgrep redis-server > /dev/null;then
   echo"$(date): 重啟Redis服務(wù)">>$LOG_FILE
    systemctl restart redis
   sleep10
 fi
 
 # 檢查內(nèi)存使用
  memory_usage=$(redis-cli -p$REDIS_PORT-a$REDIS_PASSWORDinfo memory | grep used_memory_rss: |cut-d: -f2)
 if["$memory_usage"-gt 8589934592 ];then# 8GB
   echo"$(date): 內(nèi)存使用過高,執(zhí)行內(nèi)存清理">>$LOG_FILE
    redis-cli -p$REDIS_PORT-a$REDIS_PASSWORDflushdb
 fi
 
 # 發(fā)送告警
 echo"Redis故障恢復(fù)完成"| mail -s"Redis Alert"admin@company.com
}

# 主監(jiān)控循環(huán)
whiletrue;do
 if! check_redis_health;then
    recover_redis
 fi
 sleep30
done

5. 高可用配置

5.1 哨兵模式配置

# 哨兵配置文件 /opt/redis/sentinel.conf
port 26379
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster your_password

# 啟動(dòng)哨兵
redis-sentinel /opt/redis/sentinel.conf --daemonizeyes
# 哨兵客戶端連接
fromredis.sentinelimportSentinel

sentinel = Sentinel([
  ('192.168.1.100',26379),
  ('192.168.1.101',26379),
  ('192.168.1.102',26379)
])

# 獲取主服務(wù)器連接
master = sentinel.master_for('mymaster', socket_timeout=0.1)
# 獲取從服務(wù)器連接
slave = sentinel.slave_for('mymaster', socket_timeout=0.1)

# 測(cè)試連接
master.set('test_key','test_value')
result = slave.get('test_key')
print(f"從服務(wù)器讀取結(jié)果:{result}")

總結(jié)

Redis集群部署與性能優(yōu)化是一個(gè)系統(tǒng)工程,需要從硬件資源、系統(tǒng)配置、Redis參數(shù)等多個(gè)層面進(jìn)行綜合考慮。通過本文介紹的實(shí)戰(zhàn)技術(shù),運(yùn)維工程師可以構(gòu)建穩(wěn)定、高效的Redis集群環(huán)境。關(guān)鍵要點(diǎn)包括:合理的集群架構(gòu)設(shè)計(jì)、科學(xué)的性能優(yōu)化配置、完善的監(jiān)控告警體系,以及可靠的故障恢復(fù)機(jī)制。在實(shí)際生產(chǎn)環(huán)境中,還需要結(jié)合具體業(yè)務(wù)場(chǎng)景進(jìn)行調(diào)優(yōu),持續(xù)監(jiān)控和改進(jìn)系統(tǒng)性能。

這篇文章涵蓋了Redis運(yùn)維的核心技術(shù)點(diǎn),代碼示例豐富且實(shí)用,希望對(duì)您的運(yùn)維工作有所幫助。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 集群
    +關(guān)注

    關(guān)注

    0

    文章

    129

    瀏覽量

    17554
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3979

    瀏覽量

    67429
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    390

    瀏覽量

    11866

原文標(biāo)題:Redis集群部署與性能優(yōu)化實(shí)戰(zhàn)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Hadoop的集群環(huán)境部署說明

    或者是相同,指令多、步驟繁瑣。有的時(shí)候覺得不免覺得很奇怪,這些發(fā)行商為什么不對(duì)hadoop的集群環(huán)境部署做一下優(yōu)化呢?幸運(yùn)的是總算是讓我找到了一個(gè)hadoop發(fā)行版集群環(huán)境搭建簡(jiǎn)單易用
    發(fā)表于 10-12 15:51

    redis集群環(huán)境安裝及配置

    redis集群主從配置
    發(fā)表于 03-08 09:59

    redis集群的兩種備份方式

    redis集群 主從同步 備份
    發(fā)表于 04-17 13:30

    3分鐘搭建Redis Cluster集群

    Redis Cluster集群快速搭建
    發(fā)表于 06-12 14:58

    redis集群的如何部署

    redis集群部署(偽分布式)
    發(fā)表于 05-29 17:13

    Redis集群相關(guān)問題的解決

    Redis 集群相關(guān)問題
    發(fā)表于 06-11 10:09

    Docker部署Redis服務(wù)器集群的方法

    Docker部署Redis服務(wù)器集群
    發(fā)表于 06-13 09:12

    如何構(gòu)建一個(gè)穩(wěn)定、高性能Redis集群

    這篇文章我想和你聊一聊 Redis 的架構(gòu)演化之路。 現(xiàn)如今 Redis 變得越來越流行,幾乎在很多項(xiàng)目中都要被用到,不知道你在使用 Redis 時(shí),有沒有思考過,Redis 到底是如
    的頭像 發(fā)表于 03-03 15:05 ?1914次閱讀
    如何構(gòu)建一個(gè)穩(wěn)定、高<b class='flag-5'>性能</b>的<b class='flag-5'>Redis</b><b class='flag-5'>集群</b>?

    Redis的主從、哨兵、Redis Cluster集群

    ? 前言 今天跟小伙伴們一起學(xué)習(xí)Redis的主從、哨兵、Redis Cluster集群。 Redis主從 Redis哨兵
    的頭像 發(fā)表于 06-12 14:58 ?1259次閱讀
    <b class='flag-5'>Redis</b>的主從、哨兵、<b class='flag-5'>Redis</b> Cluster<b class='flag-5'>集群</b>

    redis集群狀態(tài)查看命令

    Redis集群是一種高可用性的分布式架構(gòu),可以通過多個(gè)節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)的復(fù)制和負(fù)載均衡。為了維護(hù)集群的穩(wěn)定性和可靠性,管理員需要監(jiān)控和查看集群的狀態(tài)。下面是詳細(xì)介紹
    的頭像 發(fā)表于 12-04 10:44 ?2554次閱讀

    redis集群性能測(cè)試工具有哪些

    Redis是一種高性能的內(nèi)存鍵值存儲(chǔ)系統(tǒng),它被廣泛應(yīng)用于各種互聯(lián)網(wǎng)應(yīng)用和大規(guī)模的數(shù)據(jù)存儲(chǔ)中。為了評(píng)估Redis在不同場(chǎng)景下的性能,我們需要使用一些
    的頭像 發(fā)表于 12-04 11:36 ?1342次閱讀

    redis查看集群狀態(tài)命令

    Redis 是一個(gè)開源的、內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),提供了一系列命令來管理和操作數(shù)據(jù)。在 Redis 中,集群是一個(gè)由多個(gè) Redis 實(shí)例組成的分布式系統(tǒng),用于提高數(shù)據(jù)的可用性和
    的頭像 發(fā)表于 12-04 11:39 ?2347次閱讀

    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis 集群

    前言 Redis 是在開發(fā)過程中經(jīng)常用到的緩存中間件,為了考慮在生產(chǎn)環(huán)境中穩(wěn)定性和高可用,Redis通常采用集群模式的部署方式。 在制定Redis
    的頭像 發(fā)表于 07-03 15:30 ?1362次閱讀
    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)<b class='flag-5'>部署</b>高可用 <b class='flag-5'>Redis</b> <b class='flag-5'>集群</b>

    Redis實(shí)戰(zhàn)筆記

    在目前的技術(shù)選型中,Redis 儼然已經(jīng)成為了系統(tǒng)高性能緩存方案的事實(shí)標(biāo)準(zhǔn),因此現(xiàn)在?Redis 也成為了后端開發(fā)的基本技能樹之一。 ? 基于上述情況,今天給大家分享一份?杰哥?親筆撰寫的內(nèi)部
    的頭像 發(fā)表于 02-09 09:12 ?534次閱讀
    <b class='flag-5'>Redis</b><b class='flag-5'>實(shí)戰(zhàn)</b>筆記

    Redis集群部署配置詳解

    Redis集群是一種分布式Redis解決方案,通過數(shù)據(jù)分片和主從復(fù)制實(shí)現(xiàn)高可用性和橫向擴(kuò)展。集群將整個(gè)數(shù)據(jù)集分割成16384個(gè)哈希槽(hash slots),每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分槽位。
    的頭像 發(fā)表于 07-17 11:04 ?473次閱讀