Linux下的redis的持久化,主從同步及哨兵

来源:https://www.cnblogs.com/qq752059037/archive/2019/01/16/10278296.html
-Advertisement-
Play Games

redis持久化 Redis是一種記憶體型資料庫,一旦伺服器進程退出,資料庫的數據就會丟失, 為瞭解決這個問題,Redis提供了兩種持久化的方案,將記憶體中的數據保存到磁碟中,避免數據的丟失。 RDB持久化 redis提供了 持久化的功能, 在指定的時間間隔內生成數據集的時間點快照(point in t ...


redis持久化

Redis是一種記憶體型資料庫,一旦伺服器進程退出,資料庫的數據就會丟失,
為瞭解決這個問題,Redis提供了兩種持久化的方案,將記憶體中的數據保存到磁碟中,避免數據的丟失。

RDB持久化

redis提供了RDB持久化的功能,
在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)
這個功能可以將redis在記憶體中的的狀態保存到硬碟中,
RDB持久化產生的RDB文件是一個經過壓縮的二進位文件,
這個文件被保存在硬碟中,redis可以通過這個文件還原資料庫當時的狀態。
它可以手動執行。
也可以在redis.conf中配置,定期執行。
優點:速度快,適合做備份,主從複製就是基於RDB持久化功能實現
rdb通過在redis中使用save命令觸發 rdb
rdb配置參數:

port 6379           
daemonize yes         
pidfile /data/6379/redis.pid
loglevel notice     
logfile "/data/6379/redis.log"
dir /data/6379          
protected-mode yes 
dbfilename  dbmp.rdb
save 900 1
save 300 10 
save 60 10000

每過900秒 有1個操作就進行持久化

save 900秒 1個修改類的操作
save 300秒 10個操作
save 60秒 10000個操作

2.觸發rdb持久化,也可以手動save命令即可,生成 dump.rdb持久化文件

3.重啟redis,數據不再丟失

4.rdb數據文件是二進位文件,人為的看不懂

redis持久化之AOF

AOF(append-only log file)
記錄伺服器執行的所有變更操作命令(例如set del等),併在伺服器啟動時,通過重新執行這些命令來還原數據集
AOF 文件中的命令全部以redis協議的格式保存,新命令追加到文件末尾。
優點:最大程式保證數據不丟
缺點:日誌記錄非常大
配置方式
1.在配置文件中,添加aof參數
在redis-6379.conf中添加參數,開啟aof功能

appendonly yes
appendfsync everysec

2.重啟redis資料庫,載入aof功能

3.檢查redis數據目錄/data/6379/是否產生了aof文件

[root@web02 6379]# ls
appendonly.aof  dbmp.rdb  redis.log

4.登錄redis-cli,寫入數據,實時監聽aof文件信息
tail -f appendonly.aof

5.設置新key,檢查aof信息,然後關閉redis,檢查數據是否持久化

redis-cli -a redhat shutdown
redis-server /etc/redis.conf
redis-cli -a redhat

在不重啟redis的情況下,切換rdb數據到aof數據中

1.配置redis支持rdb持久化

2.啟動redis客戶端,通過命令,臨時切換到aof模式

127.0.0.1:6379> CONFIG set appendonly yes
OK
127.0.0.1:6379>  CONFIG SET save ""
OK

3.檢查此時的數據持久化方式是rdb,還是aof,檢查appendonly.aof文件,數據變動
tail -f appendonly.aof

4.此時aof還未永久生效,寫入參數到配置文件
編輯redis-6379.conf 添加如下參數
appendonly yes
appendfsync everysec

主從同步

redis主從同步實現
1.準備三個redis資料庫,redis支持多實例
三個配置文件,僅僅是埠的不同
在三個配置文件中,添加主從同步的參數
redis-6379.conf

port 6379           
daemonize yes         
pidfile /data/6379/redis.pid
loglevel notice     
logfile "/data/6379/redis.log"
dir /data/6379          
protected-mode yes 
dbfilename  dbmp.rdb
save 900 1
save 300 10 
save 60 10000

redis-6380.conf

port 6380           
daemonize yes         
pidfile /data/6380/redis.pid
loglevel notice     
logfile "/data/6380/redis.log"
dir /data/6380          
protected-mode yes 
dbfilename  dbmp.rdb
save 900 1
save 300 10 
save 60 10000
slaveof  127.0.0.1 6379

redis-6381.conf

port 6381           
daemonize yes         
pidfile /data/6381/redis.pid
loglevel notice     
logfile "/data/6381/redis.log"
dir /data/6381          
protected-mode yes 
dbfilename  dbmp.rdb
save 900 1
save 300 10 
save 60 10000
slaveof  127.0.0.1 6379

2.啟動三個資料庫實例,查看主從同步身份

redis-cli -p 6379  info replication 
redis-cli -p 6380  info replication 
redis-cli -p 6381  info replication 

3:確保查看信息如下 並且檢查是否同步

4.如果我主庫掛了怎麼辦??
解決方案:
1.手動切換主從身份,選舉一個新的主庫

1.幹掉6379主庫
2.在6380上關閉自己的slave身份
slaveof no one
3.在6381上給與新的主人身份
salveof 127.0.0.1 6380
4.修改完畢,還得修改配置文件,永久生效

2,用哨兵自動選舉新主人

redis哨兵:

哨兵功能:
  哨兵進行檢測,主從架構是否正常,如果主庫掛掉,哨兵會自動的修改redis.conf,進行添加/刪除 slaveof 指令

redis哨兵安裝配置:

1.準備三個redis實例,一主兩從

詳見上面redis主從配置

2,準備好了三個資料庫實例,啟動三個資料庫實例

redis-server  redis-6379.conf
redis-server  redis-6380.conf
redis-server  redis-6381.conf

3,準備三個哨兵,開始監控主從架構
準備三個配置文件,哨兵文件
redis-26379.conf

port 26379  
dir /var/redis/data/
logfile "26379.log"
sentinel monitor sbmaster  127.0.0.1 6379 2
sentinel down-after-milliseconds qsmaster 30000
sentinel parallel-syncs sbmaster 1
sentinel failover-timeout sbmaster 180000
daemonize yes 

redis-26380.conf

port 26380  
dir /var/redis/data/
logfile "26380.log"
sentinel monitor sbmaster  127.0.0.1 6379 2
sentinel down-after-milliseconds qsmaster 30000
sentinel parallel-syncs sbmaster 1
sentinel failover-timeout sbmaster 180000
daemonize yes

redis-26381.conf

port 26381  
dir /var/redis/data/
logfile "26381.log"
sentinel monitor sbmaster  127.0.0.1 6379 2
sentinel down-after-milliseconds sbmaster 30000
sentinel parallel-syncs sbmaster 1
sentinel failover-timeout sbmaster 180000
daemonize yes 

4,啟動三個哨兵實例

redis-sentinel redis-26380.conf 
redis-sentinel redis-26379.conf 
 redis-sentinel redis-26381.conf 
 

檢查哨兵狀態是否正常
只有發現如下信息,與下麵一致,即為正常
redis-cli -p 26379 info sentinel

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=sbmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
 

5,進行哨兵自動主從切換
1.幹掉6379的redis資料庫
2.查看6380和6381的身份信息,是否自動的進行主從切換(需等待30秒才會切換)
3.手動啟動6379掛掉的資料庫,查看是否會被哨兵,添加進信息的主從集群

註意!!如果發現不成功,需刪掉所有的哨兵配置文件,從新來過
註意!!如果發現不成功,需刪掉所有的哨兵配置文件,從新來過
註意!!如果發現不成功,需刪掉所有的哨兵配置文件,從新來過


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在學習Linux命令中,發現3個有關於文件內容操作的命令grep,sed和awk,在這裡簡單彙總這3個命令主要作用,在實際中找到最合適的情景應用,詳細用法可以參考其他文章。 1、grep命令 主要作用:用於搜索文件中特定字元串,並輸出整行內行 命令格式:grep [選項參數] "搜索內容" 文件(選 ...
  • Homebrew是mac上的軟體包管理工具,類似一些發行版Linux上的yum、apt get等。 安裝Homebrew 1、 安裝Xcode,到appstore搜索。 2、 打開終端,執行以下命令: 軟體安裝目錄 軟體都會安裝到 基本選項 安裝完成後,執行 ,就有提示 ...
  • 前提知識: Linux內核、Linux 進程和文件數據結構、vmcore解析、彙編語言 問題背景: 這個問題出自項目的一個安全模塊,主要功能是確定某進程是否有許可權訪問其正在訪問的文件。 實現功能時,需要在內核里通過掃描該進程打開的文件表,獲取文件的路徑,和安全模塊里配置的可訪問文件的進程白名單進行匹 ...
  • 一、LVS介紹 簡介 LVS是Linux Virtual Server的簡稱,即Linux虛擬伺服器,創始人前阿裡雲首席科學家章文嵩(現已經在滴滴),官方網站:www.linuxvirtualserver.org。從內核版本2.4開始,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直 ...
  • 指針 何為指針?來個官方定義:指針是一個值為記憶體地址的變數(或數據對象)。 一、指針的聲明 註意,指針的值雖然是地址,指針本身也是有自己的地址和大小的。在電腦中,指針的大小為8位元組,在stm32中,為4位元組。 二、指針的賦值與解引用 賦值要符合指針的定義,要向指針賦一個地址 三、指針的操作 取址操 ...
  • 本文由雲+社區發表 摘要:我們常常會有訂閱別人文章的需求,有更新的時候希望能有提醒的功能,RSS就是這樣一個訂閱的方式。很多網站上看到RSS的入口,點進去以後總是顯示一堆的XML代碼,我們來看看怎麼使用這個功能。在本次的學習過後你將學會使用RSS來訂閱別人的網站,而且你還能學會給不能用RSS網站的創 ...
  • 1 需要換新盤的情況 1.1 一塊盤grub損壞修複(可通過另一塊盤進入系統的情況) 更換硬碟的方式,可以熱插拔,也可以伺服器斷電後更換,但如果是熱插拔,可能會導致盤符變更。壞了一塊硬碟的情況下,軟raid1恢復方法(以sdb為新更換的硬碟為例): 1.1.1 拷貝正常的那塊硬碟分區信息到新的硬碟 ...
  • 在ubuntu 16.04 系統上使用Sublime Text 3 編輯文本還是不錯的, 先到官網下載安裝包,鏈接:http://www.sublimetext.com/3 ,下載對應的版本,64位或者32位 將下載包解壓,然後移動解壓後的文件夾到 /opt/ 下麵: 博主是在 Downloads ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...