redis 主從備份(手動切換)


redis 默認都是master

redis集群中,必須使用相同版本的redis,最好精確到小版本

  一、開啟redis服務,並使用redis客戶端連接redis服務

1 redis-server 
2 redis-cli 

  二、使用SLAVEOF 將角色轉換為slave,並指向redis 主服務器的IP和對應的端口(redis 中不區分大小寫)

 SLAVEOF 192.168.1.4 6379 

輸入:SLAVEOF ,后面會自動顯示灰色的host 和port表示對方的主機和端口

  三、INFO查看

127.0.0.1:6379> info 
# Replication
role:slave
master_host:192.168.1.4
master_port:6379
master_link_status:down

  1、查看當前的redis中都有哪些key

127.0.0.1:6379> keys *
1) "a"

如果和master建立了連接,就會清空當前redis上的所有數據庫,以master為准

  四、配置連接密碼

127.0.0.1:6379> CONFIG SET masterauth 12345678
OK
CONFIG SET masterauth 后面跟上的12345678就是master redis的密碼

  如果版本不一樣,就會提示錯誤,我這里使用的是redis5.0.12

 slave 模式下是不能寫數據的,只能從master那邊同步過來

   五、永久有效,直接寫到配置中

低版本redis 修改slaveof  <masterip> <masterport>

 高版本redis修改replicaof <masterip> <masterport>

replicaof 192.168.1.4 6379

  2、修改master認證密碼

# masterauth <master-password>

修改為:
 masterauth 123456

注意:在redis 5.0版本中IP地址和對應的端口,密碼,兩邊的<>符號必須去掉,否則會導致連不上對應的端口,密碼無效。

   六、手動提升slave服務器為master服務器

  1、在需要提升的從服務器上執行slaveof no one

127.0.0.1:6379> slaveof no one 

  2、info查看狀態

# Replication
role:master
connected_slaves:0
master_replid:ec04796a5c4f1edf3a76cb6cb63e1fd3410fae85
master_replid2:b77f70eeb9f8b8837e146ad0bb0991eeeedbee0e
master_repl_offset:120

這里就變成了master redis了這個時候之前作為從服務器的redis機器才能開始寫東西

  3、修改配置文件,注釋下面兩行

vim /apps/redis/etc/redis.conf 
replicaof 192.168.1.4 6379
masterauth 123456

避免重啟服務器后,還是做為slave角色去嘗試連接master,版本不一樣這里的replicaof 也可能是slaveof

  七、實現從1服務器同步主1 服務器,從2服務器同步從1服務器,

     主1 服務器IP地址:192.168.1.4

     從1 服務器IP地址:192.168.1.6

     從2 服務器IP地址:192.168.1.7

  1.1、修改從2服務器的redis配置文件,使其同步主1 服務器的數據

vim /apps/redis/etc/redis.conf 
replicaof 192.168.1.4 6379
masterauth 123456

  1.2、手動殺掉進程,重啟redis服務,並指定對應的配置文件

1 kill -9 `ps -ef |grep redis|grep 6379|tr -s " "|cut -d' ' -f2`
2 redis-server /apps/redis/etc/redis.conf 

  1.3、使用info查看信息

127.0.0.1:6379> info 

  顯示如下則表示成功,自動開始同步主服務器上的數據

# Replication
role:slave
master_host:192.168.1.4
master_port:6379
master_link_status:up

  2、修改從2 服務器實現同步從1 服務器數據

vim /apps/redis/etc/redis.conf 
replicaof 192.168.1.6 6379
masterauth 123456

注意:此處從服務器必須設置密碼,否則也會連接不上的

以上就完成了,主服務器同步數據至從服務器,從服務器在同步數據至從服務器

   在有 slave 的”master”查看狀態: 

# Replication 
role:slave  #當前服務器角色,slave表示從服務器,master表示主服務器
master_host:192.168.1.4 #主服務器IP地址
master_port:6379   #主服務器端口
master_link_status:up #當前連接狀態, down表示沒連接成功
master_last_io_seconds_ago:9 #最近一次與master 通信已經過去多少秒。 
master_sync_in_progress:0 #是否正在與master 通信。 ,0表示沒有,1表示正在同步 slave_repl_offset:5334 #當前同步的偏移量。 slave_priority:100 #slave 優先級,master 故障后值越小越優先同步。
slave_read_only:1 #slave 開啟只讀狀態,表示slave服務器不能直接寫數據 connected_slaves:1 #當前有幾個節點連接進來
slave0:ip=192.168.1.6,port=6379,state=online,offset=4223,lag=1 #連接的slave的機器地址,端口,狀態,偏移量

master_replid:b77f70eeb9f8b8837e146ad0bb0991eeeedbee0e #第一個masterID(當前的master ID)
master_replid2:0000000000000000000000000000000000000000 #第二個master ID(如果機器切換過master,之前的master ID值就會被移動到這)
 

 


 

報錯解決辦法:

  1、(error) READONLY You can't write against a read only replica

因為連接的是從節點,從節點只有讀的權限,沒有寫的權限

解決辦法:

進入redis.conf配置文件,修改配置文件的slave-read-only為no, 那么從節點也就可以進行寫的操作了

   2、編譯失敗之后可以試着清理下殘留試試看

make distclean

  3、日志錯誤如下

1117:S 15 Jul 2021 10:09:59.963 * Connecting to MASTER 192.168.1.6:6379
1117:S 15 Jul 2021 10:09:59.963 * MASTER <-> REPLICA sync started
1117:S 15 Jul 2021 10:09:59.963 # Error condition on socket for SYNC: Connection refused

  3.1、解決辦法

排查redis主服務器監聽的端口是否是0.0.0.0

vim /apps/redis/etc/redis.conf 
bind 0.0.0.0

   4、輸入密碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM