Redis的性能,哨兵模式,集群,

Redis的性能管理;

redis的數據保存在內存中

redis-cli info memory

redis內存使用info memory命令參數解析

used_memory:236026888? ? ?由 Redis 分配器分配的內存總量,包含了redis進程內部的開銷和數據占用的內存,以字節(byte)為單位

used_memory_rss:274280448? ? ?redis向操作系統申請的內存大小

used_memory_peak:458320936? ?redis的內存消耗峰值(以字節為單位)

內存碎片率

used_memory_rss/used_memory系統已經分配給了redis,但是redis未能夠有效利用的內存

如何查看內存碎片率:

redis-cli info memory | grep ratio

allocator frag ratio:1.19

分配碎片的比例,redis 主進程調度時產生的內存,比例越小,值越高,內存的浪費越多

allocator rss ratio:7.15

分配器占用物理內存的比例,告訴你主進程調度執行時占用了多少物理內存

rss overhead ratio:0.31

rss是向系統申請的內存空間,Redis占用物理空間額外的開銷比例,比例越低好,redis實際占用的物理內存和向系統申請的內存月接近,額外的開銷越低

mem_fragmentation ratio:3.33

內存碎片的比例,越低越好,內存的使用率越高

如何自動清理碎片:

vim /etc/redis/6379.conf

.....

activedefrag yes?

#最后一行添加

如何手動清理碎片:

redis-cli memory purge

設置redis的內存最大閾值:

一但到達閾值,會自動清理碎片,開啟key的回收機制

vim /etc/redis/6379.conf

........

#568行添加

maxmemory 1gb

key的回收策略

vim /etc/redis/6379.conf

.......

#598行添加如下(一般保留最后一個策略,根據需求添加):

maxmemory-policy volatile-lru:使用redis內資的lru算法,把已經設置了過期時間的鍵值對對中淘汰數據,移除最少使用的鍵值對。對已經設置了過期時間的鍵值對

maxmemory-policy?volatile-ttl:已經設置了時間的鍵值對,從當中挑選一個即將過期的鍵值對,針對有設置過期時間的鍵值對

maxmemory-policy-volatile-random:從已經設置了過期時間的鍵值對當中,挑選數據隨機淘汰鍵值對。對設置時間的鍵值對進行隨機移除

mllkey-lru:lru算法當中,對所有的鍵值對進行淘汰,移除最少使用的鍵值對,針對所有的鍵值對

allkeys-random:從所有鍵值對中任意選擇鍵值對進行淘汰

maxmemory-policy noeciction:禁止鍵值對回收,(不刪除任何鍵值對,直到Redis內存塞滿了)

在工作中一定要 給redis占用內存設置閾值

面試:

redis占用 內存的效率問題如何解決

1 日常巡檢中。對redis 占用內存情況做監控

2? 設置redis占用系統內存的閾值,避免占用系統全部內存

3? 內存碎片清理,手動.自動清理

4? 配置合適的Key的回收機制

Redis的報錯問題:

1 雪崩:

緩存雪崩,大量的應用請求無法在redis緩沖中處理,會把所有的請求發送到后臺數據庫,數據庫的壓力會大,數據庫本身并發能力差,一旦高并發,數據庫會崩潰

redis集群大面積故障,Redis緩存中,大量數據同時過期,大量的請求無法得到處理。Redis實例宕機

1.1解決方案:

事前:高可用架構,防止整個緩存故障, ,主從復制,和哨兵模式,Redis集群。

事中:在國內用的比較多的方式,hystrix,熔斷,限流三個手段來降低雪崩發生之后的損失,數據庫不死即可,慢可以,但是不能沒有響應

事后,Redis備份。快速緩存預熱

2? redis的緩存擊穿(重要)

主要是熱點數據緩存過期,或者刪除,多個請求并發訪問熱點數據,請求轉發到數據庫,導致數據庫的性能下降,經常請求的緩存數據,最好設置為永不過期

3 Redis的緩存穿透

緩存中沒有數據,數據庫也沒有對應的數據,但是有用戶一直發起這個請求,而且請求的數據是很大,一般是被黑客利用

Redis的主從復制

主從復制的作用:

是redis實現高可用的基礎,哨兵模式和集群都是在主從復制的基礎之上實現高可用,主從復制實現數據的多機備份,以及讀寫分離(主服務器負責寫,從服務器只讀)

缺陷:故障無法自動恢復,需要人工干預,寫操作的負載均衡

主從復制的工作原理

主節點從節點組成,數據復制是單向,只能從主節點到從節點

1 主節點:主節點收到請求之后,他不管slave是第一次連接還是重新連接,主節點都會啟動一個后臺進程,執行bgsave主節點會把所有修改數據記錄的命令加載到緩存和數據文件之中,

主從復制推薦使用AOF

建立連接:slave向主發送一個syn command,請求和主節點建立連接

數據文件創建完畢之后,master把數據文件傳送到salve,slave 會把這個數據文件,先保存到硬盤,然后在加載到內存

實驗架構:

192.168.233.7 主

192.168.233.8 從

192.168.233.9 從

依賴環境 Redis 先準備好

主:

從1 和從2

查看日志是否建好

驗證是否主從

同時登錄redis ,主寫入? 從節點無法寫

哨兵模式

先有主從,再有哨兵,再主從復制的基礎之上,實現主節點故障的自動切換,

哨兵模式的原理:

哨兵是一個分布式系統,用于在主從結構之間,對每臺redis的服務器進行監控,主節點出現故障時,從節點通過投票的方式選擇一個新的master 哨兵模式也需要至少三個節點,

哨兵模式的結構:

哨兵節點:監控節點,不存儲數據

數據節點:主從節點,都是數據節點

主節點的選舉過程:

1 已經下線的從節點,不會被選為主節點

2? 選擇配置文件當中,從節點優先級最高的replica-priority 100

3? 選擇一個復制數據最完整的從節點

哨兵節點通過raft算法(選舉算法),每個節點共同投票選舉出一個新的master,然后新的master實現主節點轉移和故障恢復通知

每個哨兵節點每隔一秒,通過ping命令方式,檢測主從之間的心跳線,主節點在一定時間內沒有回復或者恢復了錯誤的信息,這個時候哨兵就會主觀的判斷主節點下線了,超過半數的節點哨兵認為主節點下線了,這個時候才會認為主節點是客觀下線

主:

sentinel monitor mymaster 192.168.233.7 6379 2?

#指向表示至少需要2臺服務器認為主已經下線,才會進行主從切換。

從1和從2:

啟動配置文件 先啟動再啟動從,挨個執行一遍

查看狀態信息

日志查看從節點的信息

Redis 集群:

Redis3.0引入的分布式存儲方案

工作模式:

集群有多個node節點組成,Redis數據分布在這些節點上,在集群之中,分為主節點和從節點

集群模式中 主從一一對應,數據寫的讀取和主從模式一樣,主負責寫,從模式只能寫,集群模式自帶哨兵模式,可以自動實現故障切換,但是故障切換中,整個集群不能使用,切換完畢之后集群會立刻恢復

集群模式是按照數據分片劃分:

1 數據分片:是集群的核心功能,每個主都要提供讀寫的功能,但是數據一一對應寫入對應的從節點,在集群模式中,可以容忍數據的不完整

2 高可用 :集群的主要目的

數據分片的實現過程:

redis集群引入了 哈希槽的概念

redis集群當中16384個哈希槽位(0-16384)

根據集群當中主節點從節點,分配哈希槽位,每個主從節點只負責一部分的

哈希槽位是連續的哈希槽位,如果出現不連續的哈希值,或者哈希槽位沒有被分配,集群將會報錯

主宕機之后,主節點原來負責的哈爺槽位將會不可用,需要從節點代替主節點繼續負責原有的哈希操作。保證集群正常工作,故障切換的過程中,會提示集群不可用。切換完成,集群恢復繼續工作。

每次讀寫都涉及到哈希槽位,Keyt通過crc16驗證之后,對16384取余數,余數值決定數據放入哪個哈希槽位,通過這個值去找到對應的槽位所在的節點,然后直接跳轉到這個節點

集群的流程:

1 ?集群自帶主從和哨兵模式,

2 ?每個主從是互相隔的可以容忍數據的不完整,目的:高可用

3 ?哈希槽位為決定每個節點的讀寫槽位,在創建Key時,系統已經分配好了指定槽位

4 如果是出現MOVED不是報錯,是提醒客戶端取分配好的槽位節點,獲取數據

實驗

實驗需求:需要6臺裝有redis的虛擬機

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 六臺redis服務器都配置
vim /etc/redis/6379.conf
*****************************************************************************************
?
1、默認監聽所有網卡-----70行
bind 0.0.0.0
?
2、關閉保護模式-----89行
protect-mode no
?
3、開啟守護進程,以獨立進程啟動-----137行
daemonize yes
?
4、開啟AOF持久化-----700行
appendonly yes
?
5、開啟集群功能-----833行
cluster-enabled yes
?
6、集群名稱文件設置-----841行
cluster-config-file nodes-6003.conf
?
7、集群超時時間設置-----847行(15000毫秒)
cluster-node-timeout 15000
?
*****************************************************************************************

?
創建集群:redis-cli -h 所在服務器ip --cluster create ip地址:6379 --cluster-replicas 1
?
此時在192.168.10.80主機創建
redis-cli -h 192.168.10.80 --cluster create 192.168.10.80:6379 ?192.168.10.150:6379 179 192.168.10.152:6379 192.168.10.153:6379 192.168.10.154:6379 --cluster-replicas 1
?
[root@localhost ~]# redis-cli -h 192.168.10.80 --cluster create 192.168.10.80:6379 ?192.168.79 192.168.10.152:6379 192.168.10.153:6379 192.168.10.154:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.10.153:6379 to 192.168.10.80:6379
Adding replica 192.168.10.154:6379 to 192.168.10.150:6379
Adding replica 192.168.10.152:6379 to 192.168.10.151:6379
M: f9a09e3ededa9767aafc6aca98fcaad8e28272b6 192.168.10.80:6379
? ?slots:[0-5460] (5461 slots) master
M: 508caf1dfeab313b2df0173dc015b62591b012fb 192.168.10.150:6379
? ?slots:[5461-10922] (5462 slots) master
M: 68d8e79f5b4478dcd8143ef024607f17d02820c6 192.168.10.151:6379
? ?slots:[10923-16383] (5461 slots) master
S: 6c1dc5ae608ca1c20f80f4762933ee07aa4a77c5 192.168.10.152:6379
? ?replicates 68d8e79f5b4478dcd8143ef024607f17d02820c6
S: d82924c43dd5c907fda4abf35ffe33ad2b295abf 192.168.10.153:6379
? ?replicates f9a09e3ededa9767aafc6aca98fcaad8e28272b6
S: 8ae774dce41372b08e38904ef81adba51413d072 192.168.10.154:6379
? ?replicates 508caf1dfeab313b2df0173dc015b62591b012fb
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 192.168.10.80:6379)
M: f9a09e3ededa9767aafc6aca98fcaad8e28272b6 192.168.10.80:6379
? ?slots:[0-5460] (5461 slots) master
? ?1 additional replica(s)
S: 8ae774dce41372b08e38904ef81adba51413d072 192.168.10.154:6379
? ?slots: (0 slots) slave
? ?replicates 508caf1dfeab313b2df0173dc015b62591b012fb
S: 6c1dc5ae608ca1c20f80f4762933ee07aa4a77c5 192.168.10.152:6379
? ?slots: (0 slots) slave
? ?replicates 68d8e79f5b4478dcd8143ef024607f17d02820c6
M: 68d8e79f5b4478dcd8143ef024607f17d02820c6 192.168.10.151:6379
? ?slots:[10923-16383] (5461 slots) master
? ?1 additional replica(s)
S: d82924c43dd5c907fda4abf35ffe33ad2b295abf 192.168.10.153:6379
? ?slots: (0 slots) slave
? ?replicates f9a09e3ededa9767aafc6aca98fcaad8e28272b6
M: 508caf1dfeab313b2df0173dc015b62591b012fb 192.168.10.150:6379
? ?slots:[5461-10922] (5462 slots) master
? ?1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost ~]#?

查看hash槽位CLUSTER nodes

驗證從節點不能讀

此處error不是報錯,表明客戶端嘗試讀取鍵值對test1,但是實際槽位在4768,因此集群要求客戶端移動到4768槽位所在的主機節點獲取數據

(2)驗證從節點能不能寫。不能

(3)驗證分配hash槽位后,不在相應的hash槽位上的主節點能不能寫。不能,只能到指定節點上操作

模擬故障

任意一臺主服務器故障

主20.0.0.34——redis3故障,從20.0.0.44——redis4成為新主

?monitor 查看哨兵的ping命令

監控redis實時工作日志,檢測主從節點之間的心跳線

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166641.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166641.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css里面的@import

import 說明 用于從其他樣式表導入樣式規則。可以是絕對或相對路徑,也可以是一個在線的url地址。import 規則必須在 CSS 文檔的頭部,但可以在 charset 規則后面。import 規則不是一個嵌套語句,import不能在條件組的規則中使用。import 規則…

虛擬化原理

目錄 什么是虛擬化廣義虛擬化狹義虛擬化 虛擬化指令集敏感指令集虛擬化指令集的工作模式監視器對敏感指令的處理過程: 虛擬化類型全虛擬化類虛擬化硬件輔助虛擬化 虛擬化架構裸金屬架構宿主機模式架構 什么是虛擬化 虛擬化就是通過模仿下層原有的功能模塊創造接口來…

【開源】基于JAVA的衣物搭配系統

項目編號: S 016 ,文末獲取源碼。 \color{red}{項目編號:S016,文末獲取源碼。} 項目編號:S016,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、研究內容2.1 衣物檔案模塊2.2 衣物搭配模塊2.3 衣…

linux進程調度(二)-進程創建

文章目錄 2.進程創建和終止2.1 進程創建的4種方法2.2 進程創建過程分析2.2.1 copy_process函數分析2.2.1.1 dup_task_struct函數分析2.2.1.2 sched_fork函數分析2.2.1.3 copy_mm函數分析2.2.1.4 copy_thread函數分析 2.2.2 wake_up_new_task函數分析 2.進程創建和終止 在 Linu…

常用數據存儲格式介紹:Excel、CSV、JSON、XML

在現代數字時代,數據經過提煉后可以推動創新、簡化運營并支持決策流程。然而,在提取數據之后,并將其加載到數據庫或數據倉庫之前,需要將數據轉化為可用的數據存儲格式。本文將介紹開發者常用的4種數據存儲格式,包括 Ex…

布局下一個時代,UTONMOS夯實元宇宙發展基礎

從 PC 互聯網到移動互聯網,再到元宇宙,互聯網的發展在一直不斷演變和升級著。元宇宙的時代紅利將帶來從底層基礎設施向外延展到用戶體驗的全面升級。 人們以各自不同視角理解元宇宙。但我們認為,目前學術界和產業界對元宇宙雖然沒有統一規范的…

JavaScript 閉包技巧

什么是閉包? MDN:“閉包是捆綁在一起(封閉)的函數及其周圍狀態(詞法環境)的引用的組合。換句話說,閉包使您可以從內部函數訪問外部函數的作用域。在 JavaScript 中,每次創建函數時都…

css引入的三種方式

css引入的三種方式 一、內聯樣式二、外部樣式表三、 內部樣式表總結trouble 一、內聯樣式 內聯樣式也被稱為行內樣式。它是將 CSS 樣式直接應用于 HTML 元素的 style 屬性中的一種方式 <p style"color: blue; font-size: 16px;">這是一個帶有內聯樣式的段落。&…

Modbus RTU轉Profinet網關連接PLC與變頻器通訊在機床上應用案例

背景&#xff1a;以前在機床加工車間里&#xff0c;工人們忙碌地操作著各種機床設備。為了使整個生產過程更加高效、流暢&#xff0c;進行智能化改造。 方案&#xff1a;在機床上&#xff0c;PLC通過Modbus RTU轉Profinet網關連接變頻器進行通訊&#xff1a;PLC作為整個生產線…

實現簡單的操作服務器和客戶端(下)

一、說明 描述:本教程介紹如何使用 simple_action_client 庫創建斐波那契操作客戶端。此示例程序創建一個操作客戶端并將目標發送到操作服務器。 內容 代碼代碼解釋編譯運行操作客戶端連接服務器和客戶端二、代碼 首先,在您喜歡的編輯器中創建actionlib_tutorials/src/fib…

【封裝UI組件庫系列】封裝Icon圖標組件

封裝UI組件庫系列第三篇封裝Icon圖標組件 &#x1f31f;前言 &#x1f31f;封裝Icon 1.創建Icon組件 2.引用svg圖標庫 第一步 第二步 第三步 3.二次封裝 4.封裝自定義屬性 &#x1f31f;總結 &#x1f31f;前言 在前端開發中&#xff0c;大家可能已經用過各種各樣的UI組…

VUE項目部署過程中遇到的錯誤:POST http://124.60.11.183:9090/test/login 405 (Not Allowed)

我當初報了這個405錯誤&#xff0c;再網上查了半天&#xff0c;他們都說什么是nginx部署不支持post訪問靜態資源。 但后面我發現我是因為另一個原因才導致的無法訪問。 我再vue中有使用devServer:{ proxy:{} }進行路由轉發。 但是&#xff01;&#xff01; 在這個配置只…

接口測試學習路線

接口測試分為兩種&#xff1a; 測試外部接口&#xff1a;系統和外部系統之間的接口 如&#xff1a;電商網站&#xff1a;支付寶支付 測試內部接口&#xff1a;系統內部的模塊之間的聯調&#xff0c;或者子系統之間的數據交互 測試重點&#xff1a;測試接口參數傳遞的正確性&…

node與 pnpm、node-sass 等工具的版本兼容關系

1. node & pnpm 2. node & node-sass 3. node-sass & sass-loader sass-loader依賴于node-sass&#xff0c;以下是部分版本號對應

Zookeeper 集群中是怎樣選舉leader的

zookeeper集群中服務器被劃分為以下四種狀態&#xff1a; LOOKING&#xff1a;尋找Leader狀態。處于該狀態的服務器會認為集群中沒有Leader&#xff0c;需要進行Leader選舉&#xff1b;FOLLOWING&#xff1a;跟隨著狀態&#xff0c;說明當前服務器角色為Follower&#xff1b;LE…

Jmeter基礎和概念

JMeter 介紹&#xff1a; 一個非常優秀的開源的性能測試工具。 優點&#xff1a;你用著用著就會發現它的重多優點&#xff0c;當然不足點也會呈現出來。 從性能工具的原理劃分&#xff1a; Jmeter工具和其他性能工具在原理上完全一致&#xff0c;工具包含4個部分&#xff1a; …

綠色能源守護者:光伏運維無人機

隨著我國太陽能光伏產業被納入戰略性新興產業&#xff0c;光伏發電成為實現“雙碳”目標的關鍵之一。在政策支持下&#xff0c;光伏產業維持高速發展&#xff0c;為迎接“碳達峰、碳中和”大勢注入了強大動力。在這一背景下&#xff0c;復亞智能與安徽一家光伏企業合作&#xf…

LeetCode78. Subsets

文章目錄 一、題目二、題解 一、題目 Given an integer array nums of unique elements, return all possible subsets (the power set). The solution set must not contain duplicate subsets. Return the solution in any order. Example 1: Input: nums [1,2,3] Outpu…

size和shape的區別與聯系

對于Numpy數據類型 shape和size都是屬于Numpy的屬性 arr.shape 將返回一個包含兩個元素的元組&#xff0c;例如 (m, n)&#xff0c;其中 m 表示數組的行數&#xff0c;n 表示數組的列數。arr.size 將返回數組中元素的總數。 舉例: 輸入&#xff1a; import numpy as np# 創…

JavaScript之DOM操作

第一章 API介紹 ?API是一種事先定義好的函數&#xff0c;用來提供應用程序與開發人員基于某軟件或硬件得以訪問的一組例程&#xff0c;而又無需訪問源碼&#xff0c;或理解內部工作機制的細節。 ?Web API接口&#xff1a;瀏覽器提供的一系列操作瀏覽器功能和頁面元素的API(BO…