Redis---主從複製

来源:https://www.cnblogs.com/sre-chan/archive/2023/04/18/17327581.html
-Advertisement-
Play Games

一、redis主從複製 主從複製:是存儲數據的服務結構 主伺服器:接受客戶端連接的伺服器 從伺服器:自動與主伺服器保持數據一致的伺服器 配置主從複製 1、環境準備 主伺服器 主機名:master IP地址:192.168.11.101/24 從伺服器 主機名:node01 IP地址:192.168. ...


一、redis主從複製

主從複製:是存儲數據的服務結構
主伺服器:接受客戶端連接的伺服器
從伺服器:自動與主伺服器保持數據一致的伺服器

配置主從複製

1、環境準備

主伺服器    主機名:master     IP地址:192.168.11.101/24
從伺服器    主機名:node01     IP地址:192.168.11.102/24
 客戶端     主機名:node02     IP地址:192.168.11.103/24

主從伺服器都要安裝redis服務,分別修改redis監聽的地址為192.168.11.101,192.168.11.102

2、192.168.11.101主伺服器,修改監聽的IP地址

root@Master:~# ss -lntup | grep 6379
tcp   LISTEN 0      128        127.0.0.1:6379      0.0.0.0:*    users:(("redis-server",pid=1147,fd=6))
root@Master:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
root@Master:~# ss -lntup | grep 6379
root@Master:~# vim /etc/redis/6379.conf
bind 192.168.11.101

3、修改完配置文件重啟服務

root@Master:~# /etc/init.d/redis_6379 start 
Starting Redis server...

4、登錄資料庫

root@Master:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG

5、查看當期伺服器主從信息

192.168.11.101:6379> INFO replication
# Replication
role:master # 主節點
connected_slaves:0
master_replid:88c2e017cb0ea8cbd01a4f3874b314f8de1775b2
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
192.168.11.101:6379> 

6、node01從伺服器

修改監聽的IP地址

# 先停伺服器
root@node01:~# /etc/init.d/redis_6379 stop 
Stopping ...
Redis stopped

# 修改配置文件
root@node01:~# vim /etc/redis/6379.conf
# 修改客戶端連接redis服務的IP地址
bind 192.168.11.102

7、重啟服務檢查埠監聽

root@node01:~# /etc/init.d/redis_6379 start 
Starting Redis server...
root@node01:~# ss -lntup |grep 6379
tcp   LISTEN 0      128    192.168.11.102:6379      0.0.0.0:*    users:(("redis-server",pid=7978,fd=6))

8、連接主機檢查主從信息

PS:在這還沒添加從伺服器信息,所以看到是master是正常的!!!

root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:f151ec960f14af322c6b07946a074a30a4c2c731
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

9、添加slave節點,將本機設置為node01的從伺服器,node01埠號為6379

192.168.11.102:6379> SLAVEOF 192.168.11.101 6379
OK
192.168.11.102:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:down

錯誤信息:

解決方法:

關閉防火牆和selinux

root@Master:~# systemctl is-active firewalld.service
active
root@Master:~# systemctl stop firewalld.service
root@Master:~# systemctl disable firewalld.service
root@Master:~# setenforce 0

關閉連接 重啟服務

# 第一次做忘了這條關閉連接命令 苦
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# 
root@node01:~# /etc/init.d/redis_6379 restart 
/var/run/redis_6379.pid does not exist, process is not running
Starting Redis server...

10、以上是臨時配置,修改配置文件,將本機永久配置為node01的從伺服器

root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim  /etc/redis/6379.conf
slaveof 192.168.11.101  6379		#修改,指定主伺服器的IP地址和埠號

11、重啟服務

root@node01:~# /etc/init.d/redis_6379 start
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> info replication		#查看slave伺服器的主從信息
# Replication
role:slave                  #從伺服器
master_host:192.168.11.101    #主伺服器IP地址
master_port:6379            #主伺服器埠號
master_link_status:up       #和主伺服器的連接狀態:up

12、驗證查看主伺服器主從配置信息

192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1330,lag=0
master_replid:ecc43c0169695c02204b624365e75859defc0aec
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1330
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1330

13、測試主從同步,插入數據

# 添加數據
192.168.11.101:6379> set school qinghua
OK

# 查看數據
192.168.11.101:6379> GET school
"qinghua"

192.168.11.102:6379> KEYS *
1) "school"
192.168.11.102:6379> GET school
"qinghua"

14、反客為主:將從庫恢復為主庫,在node01上操作

root@node01:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG
192.168.11.101:6379> SLAVEOF no one
OK
192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1853,lag=0
192.168.11.101:6379> exit

二、redis主從複製

主伺服器    主機名:master      IP地址:192.168.11.101/24
從伺服器    主機名:node01      IP地址:192.168.11.102/24
從伺服器    主機名:node02      IP地址:192.168.11.103/24

1、三台都要安裝redis服務,分別修改redis監聽的地址為

192.168.11.101 192.168.11.102 192.168.11.103

2、由於之前master和node01做實驗已經修改過,所以這次直接修改node02即可

# 停止服務
root@node02:~# /etc/init.d/redis_6379 stop 
Stopping ...
Redis stopped

# 修改配置文件
root@node02:~# vim /etc/redis/6379.conf
bind 192.168.11.103

3、重啟服務並監聽埠

root@node02:~# /etc/init.d/redis_6379 start 
Starting Redis server...
root@node02:~# ss -lntup |grep redis
tcp   LISTEN 0      128    192.168.11.103:6379      0.0.0.0:*    users:(("redis-server",pid=9860,fd=6))

4、master設置連接密碼

root@Master:~# redis-cli -h 192.168.11.101 -p 6379 shutdown
501 requirepass plj123
root@Master:~# /etc/init.d/redis_6379 start
root@Master:~# redis-cli -h 192.168.11.101 -p 6379 -a plj123
192.168.4.51:6379> info  replication
# Replication
role:master
192.168.11.101:6379> set a 1
192.168.11.101:6379> set b 1
192.168.11.101:6379> set c 1

5、node01|2主機設置帶驗證的從庫(從庫配置一樣,截取數據倆邊混著搞得,看對應的主機信息即可)

192.168.11.103:6379>
192.168.11.103:6379> SLAVEOF 192.168.11.101 6379

6、關掉連接,添加密碼

root@node01:~#  redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim /etc/redis/6379.conf 
289 masterauth plj123

7、重啟服務

root@node01:~# /etc/init.d/redis_6379 start
192.168.11.102:6379> info replication		
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up

8、查看數據是否同步

192.168.11.103:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up


192.168.11.103:6379> KEYS *
1) "school" # 數據已經同步

9、測試當其中的一臺從伺服器停止,另外一臺還能繼續同步數據,

模擬node01宕機

root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdow

10、master存數據

192.168.11.101:6379> set AAA CCC
OK
192.168.11.101:6379> KEYS *
1) "school"
2) "AAA"

11、node02查看

192.168.11.103:6379> KEYS *
1) "AAA"
2) "school"

12、node01機器恢復

root@node01:~# /etc/init.d/redis_6379 restart
root@node01:~# ss -lntup |grep redis
tcp   LISTEN 0      128    192.168.11.102:6379      0.0.0.0:*    users:(("redis-server",pid=15384,fd=6))

13、測試數據是否同步

#宕機期間的數據自動同步
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> KEYS *
1) "AAA"
2) "school"
作者:ChAn 出處:http://www.cnblogs.com/sre-chan/

-------------------------------------------

個性簽名:今天做了別人不想做的事,明天你就做得到別人做不到的事,嘗試你都不敢,你拿什麼贏!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!


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

-Advertisement-
Play Games
更多相關文章
  • 大家好,我是陶朱公Boy。(一個認真生活總想超越自己的程式員) 一線互聯網Java技術專家,有超過8年+後端開發、架構經驗。公眾號:「陶朱公Boy」歡迎大家關註! 星球簡介 一個幫你學編程、做項目、找工作少走彎路的交流圈,進步從此開始! 加入後你可以: 1.獲取陶朱公原創編程學習路線、原創編程知識庫 ...
  • 1. 示例 首先,定義一個介面: public interface Staff { void work(); } 然後,新增一個類並實現上面的介面: public class Coder implements Staff { @Override public void work() { System ...
  • 隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前幾篇文章... ...
  • 寫在前面 本文將會介紹WPF如何實現前後端數據綁定和在進行數據綁定時常用的方法和類以及對於DataGrid、ListView這樣的控制項重寫數據模板後控制項如何進行數據綁定。 本文主要針對於數據綁定的基礎實現進行介紹,通過此博文你將會有能力編寫一個MVVM設計模式的C#、WPF項目。如果您是C#及WPF ...
  • .NET 實現JWT登錄認證 在ASP.NET Core應用程式中,使用JWT進行身份驗證和授權已成為一種流行的方式。JWT是一種安全的方式,用於在客戶端和伺服器之間傳輸用戶信息。 添加NuGet包 首先,我們需要添加一些NuGet包來支持JWT身份驗證。在您的ASP.NET Core項目中,打開S ...
  • 0.linux的目錄結構 1.用戶和用戶組的信息存儲 1.1. 用戶的基本信息文件/etc/passwd 1.1.1. 用戶名 1.1.2. 密碼 1.1.3. UID 1.1.4. GID 1.1.5. 註釋性描述 1.1.6. 宿主目錄 1.1.7. 預設shell 1.2. 用戶的密碼信息文件 ...
  • 1、線上伺服器導出requirement.txt pip freeze > requirement.txt 該文件生成完畢後,需要做些修改,去掉不需要的庫,否則下載的時候會出錯。 2、下載whl文件 -> packages pip download -r requirement.txt -d pac ...
  • 1. SQL和資料庫都在極力提升數據在表現層的抽象度,以及對用戶隱藏物理層的概念 2. 關係模型是為擺脫地址而生的 2.1. “地址”不僅包括指針操作的地址,還包括數組下標等 3. 一個優雅的數據結構勝過一百行雜耍般的代碼 3.1. 精巧的數據結構搭配笨拙的代碼,遠遠好過笨拙的數據結構搭配精巧的代碼 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...