日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Redis學(xué)習(xí)四(運(yùn)維指南).

 路人甲Java 2022-05-05 發(fā)布于北京

一、上線規(guī)劃

一般 redis 的參數(shù)配置都在 redis.conf 中,在上線前根據(jù)實(shí)際環(huán)境配置好合適參數(shù),能有效提高 redis 的可用性。

  • redis 的運(yùn)行機(jī)器 CPU 不求核數(shù)多,但求主頻高,Cache大,因?yàn)?redis 主處理模式是單進(jìn)程的。

  • 留意 redis 日志文件的配置,對應(yīng) logfile 參數(shù)。redis.log 為 redis 主日志,sentinel.log 為 sentinel 監(jiān)控日志。

  • 關(guān)閉 THP,這個(gè)默認(rèn)的 Linux 內(nèi)存頁面大小分配策略會導(dǎo)致 RDB 時(shí)出現(xiàn)巨大的 latency 和巨大的內(nèi)存占用。關(guān)閉方法為:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • 一定要設(shè)置最大內(nèi)存 maxmemory 參數(shù),否則物理內(nèi)存用爆了就會大量使用 Swap,寫 RDB 文件時(shí)的速度很慢。設(shè)置的參數(shù)參考:機(jī)器內(nèi)存 * 45% / 1.2。(1.2 為內(nèi)存碎片)

  • maxmemory-policy 策略,則當(dāng) redis 內(nèi)存數(shù)據(jù)達(dá)到 maxmemory 時(shí),會根據(jù) maxmemory-policy 配置來淘汰內(nèi)存數(shù)據(jù),以避免OOM。

    • noeviction:不執(zhí)行任何淘汰策略,當(dāng)達(dá)到內(nèi)存限制的時(shí)候客戶端執(zhí)行命令會報(bào)錯(cuò),把redis當(dāng)做DB時(shí),推薦使用。
    • allkeys-lru:從所有數(shù)據(jù)范圍內(nèi)查找到最近最少使用的數(shù)據(jù)進(jìn)行淘汰,直到有足夠的內(nèi)存來存放新數(shù)據(jù)。
    • volatile-lru:默認(rèn),從所有的最近最少訪問數(shù)據(jù)范圍內(nèi)查找設(shè)置到過期時(shí)間的數(shù)據(jù)進(jìn)行淘汰,如果查找不到數(shù)據(jù),則回退到 noeviction。
    • allkeys-random:從所有數(shù)據(jù)范圍內(nèi)隨機(jī)選擇key進(jìn)行刪除。
    • volatile-random:從設(shè)置了過期時(shí)間的數(shù)據(jù)范圍內(nèi)隨機(jī)選擇key進(jìn)行刪除。
    • volatile-ttl:從設(shè)置了過期時(shí)間的數(shù)據(jù)范圍內(nèi)優(yōu)先選擇設(shè)置了TTL的key進(jìn)行刪除。
  • 持久化配置。在配置上有三種選擇:不持久化,RDB,RDB + AOF(默認(rèn))。另外,如果為主從復(fù)制關(guān)系,建議主服務(wù)器關(guān)閉持久化。

# RDB 持久化配置
save 900 1              #在900秒(15分鐘)之后,如果至少有 1 個(gè)key發(fā)生變化,則 dump 內(nèi)存快照。
save 300 10            #在300秒(5分鐘)之后,如果至少有 10 個(gè)key發(fā)生變化,則 dump 內(nèi)存快照。
save 60 10000        #在60秒(1分鐘)之后,如果至少有 10000 個(gè)key發(fā)生變化,則 dump 內(nèi)存快照。
# AOF 持久化配置
appendfsync always     #每次有數(shù)據(jù)修改發(fā)生時(shí)都會寫入AOF文件。
appendfsync everysec  #每秒鐘同步一次,該策略為AOF的缺省策略。
appendfsync no          #從不同步。高效但是數(shù)據(jù)不會被持久化。
  • redis 使用的是單進(jìn)程(除持久化時(shí)),所以在配置時(shí),一個(gè)實(shí)例只會用到一個(gè)CPU。那么如何指定 redis 使用的 CPU 呢?
#顯示進(jìn)程運(yùn)行的CPU (15361 為 redis-server 的進(jìn)程號)。顯示結(jié)果的 f 實(shí)際上是二進(jìn)制4個(gè)低位均為 1 的 bitmask,每一個(gè) 1 對應(yīng)于 1 個(gè)CPU,表示該進(jìn)程在 4 個(gè)CPU上運(yùn)行
[root@localhost redis] taskset -p 15361
pid 15361's current affinity mask: f     
#指定進(jìn)程運(yùn)行在某個(gè)特定的CPU上。該命令的 3 表示 CPU 將只會運(yùn)行在第 4 個(gè)CPU上(從0開始計(jì)數(shù))
[root@localhost redis] taskset -pc 3 15361
pid 15361's current affinity list: 0-3
pid 15361's new affinity list: 3

二、常見運(yùn)維操作

服務(wù)功能運(yùn)維

  • 啟動 redis:redis-server redis.conf
  • 啟動 redis-sentinel:redis-sentinel sentinel.conf
  • 停止 redis,注意 kill -9 關(guān)閉可能會丟失數(shù)據(jù):redis-cli shutdown
  • 驗(yàn)證密碼(或在連接的時(shí)候指定密碼):auth password(/usr/bin/redis-cli -a 123456)
  • 查看配置:config get *
  • 修改配置:
# 臨時(shí)配置
127.0.0.1:6379> config set requirepass 123456
OK
# 永久配置,將目前服務(wù)器的參數(shù)配置寫入 redis.conf
127.0.0.1:6379> config rewrite
OK
# 永久配置也可通過直接修改 redis.conf 的方式
  • 選擇數(shù)據(jù)庫(默認(rèn)連接的數(shù)據(jù)庫是0,默認(rèn)數(shù)據(jù)庫數(shù)量是16個(gè)):select db-index

  • 將 key 從當(dāng)前數(shù)據(jù)庫移動到指定數(shù)據(jù)庫:move key db-index

  • 清空當(dāng)前數(shù)據(jù)庫,生產(chǎn)上禁止使用:flushdb

  • 清空所有數(shù)據(jù)庫,生產(chǎn)上禁止使用:flushall

  • RDB 持久化命令:

    • BGSAVE:后臺子進(jìn)程進(jìn)行RDB持久化
    • SAVE:主進(jìn)程進(jìn)行RDB,生產(chǎn)環(huán)境千萬別用,服務(wù)器將無法響應(yīng)任何操作
    • LASTSAVE: 返回上一次成功SAVE的Unix時(shí)間
  • AOF 持久化命令:BGREWRITEAOF

  • 設(shè)定 crontab 定時(shí)備份持久化數(shù)據(jù):cp /var/lib/redis/dump.rdb /somewhere/safe/dump.$(date +%Y%m%d%H%M).rdb

  • 執(zhí)行 lua 腳本:redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3

  • 發(fā)送原始的 redis protocl 格式數(shù)據(jù)到服務(wù)器端執(zhí)行: echo -en '*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | redis-cli -a 123456 --pipe

服務(wù)性能運(yùn)維

  • 查看連接的客戶端:client list
  • 探測服務(wù)是否可用(返回 pong 說明正常):ping
  • 探測服務(wù)延遲,千兆網(wǎng)卡一般延遲在 0.16ms 左右:
[root@localhost redis]# redis-cli --latency
min: 0, max: 5, avg: 0.24 (1874 samples)
  • 查看統(tǒng)計(jì)信息:info

    • total_connections_received:redis 連接數(shù)
    • latest_fork_usec:上次導(dǎo)出 rdb 快照,持久化花費(fèi)時(shí)長(微秒), 用來檢查是否有人使用了 SAVE 命令
    • used_memory: 由 redis 分配器分配的內(nèi)存總量,以字節(jié)(byte) 為單位
    • used_memory_rss:返回 redis 已分配的內(nèi)存總量(俗稱常駐集大小),包含了 used_memory 和內(nèi)存碎片
    • mem_fragmentation_ratio:used_memory_rss / used_memory 的值,1.N為佳,如果此值過大,說明 redis 的內(nèi)存的碎片化嚴(yán)重,可以導(dǎo)出再導(dǎo)入一次(重啟)
  • 統(tǒng)計(jì)命令執(zhí)行所耗費(fèi)的毫秒數(shù)(每個(gè)命令的總時(shí)間和平均時(shí)間):INFO commandstats

  • 統(tǒng)計(jì) redis 數(shù)據(jù)存儲中比較大的key(用 scan 的方式對 redis 中的 key 進(jìn)行采樣,尋找較大的 keys):redis-cli --bigkeys

  • 獲取慢查詢:

# 得到慢查詢列表,默認(rèn)保留 128 條(slowlog-max-len 參數(shù))
127.0.0.1:6379> slowlog get 10
1) 1) (integer) 1 # 查詢ID
   2) (integer) 1572146706 # 發(fā)生時(shí)間
   3) (integer) 12239 # 運(yùn)行時(shí)長,該時(shí)間不包含網(wǎng)絡(luò)延遲(微秒)
   4) 1) "save" # 原命令
2) 1) (integer) 0
   2) (integer) 1569327858
   3) (integer) 391725
   4) 1) "GET"
      2) "YUNGU_REDIS_ADMIN_ACCESS_TOKEN_5E6A833C21A87983459A985753AE5425"
# 清空慢查詢
127.0.0.1:6379> slowlog reset
OK

三、測試方法

  • 模擬oom,redis 直接退出:redis-cli debug oom
  • 模擬宕機(jī):redis-cli debug segfault
  • 模擬 redis 線程掛起:redis-cli -p 6379 debug sleep 30
  • 快速產(chǎn)生測試數(shù)據(jù):debug populate
127.0.0.1:6379> dbsize
(integer) 1410
127.0.0.1:6379> debug populate 100
OK
127.0.0.1:6379> dbsize
(integer) 1510
  • 模擬 RDB 加載情形(save 當(dāng)前的 rdb 文件,并清空當(dāng)前數(shù)據(jù)庫,重新加載 rdb):debug reload
  • 模擬 AOF 加載情形(清空當(dāng)前數(shù)據(jù)庫,重新從aof文件里加載數(shù)據(jù)庫):debug loadaof

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多