redis之主從複製

1、redis主從同步

原理:
1. 從服務器向主服務器發送 SYNC 命令。
2. 接到 SYNC 命令的主服務器會調用BGSAVE 命令,建立一個 RDB 文件,並使用緩衝區記錄接下來執行的全部寫命令。
3. 當主服務器執行完 BGSAVE 命令時,它會向從服務器發送 RDB 文件,而從服務器則會接收並載入這個文件。
4. 主服務器將緩衝區儲存的全部寫命令發送給從服務器執行。redis


-------------
一、在開啓主從複製的時候,使用的是RDB方式的,同步主從數據的
二、同步開始以後,經過主庫命令傳播的方式,主動的複製方式實現
三、2.8之後實現PSYNC的機制,實現斷線重連數據庫

一、環境準備

主庫:6380的redis(master)
從庫1:6381的redis(slave)
從庫2:6382的redis(slave)

主庫redis.conf配置

port 6380     # 端口
daemonize yes   # 在後臺運行
pidfile /data/6380/redis.pid   # 進程id
loglevel notice
logfile "/data/6380/redis.log"   # 日誌文件,需本身建立
dbfilename dump.rdb      # 持久化存儲
dir /data/6380                
protected-mode no

從庫1redis.conf配置

port 6381      
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
protected-mode no
slaveof   192.168.61.129  6380   # 指定主庫的ip和端口

從庫2redis.conf配置

port 6382
daemonize yes
pidfile /data/6382/redis.pid
loglevel notice
logfile "/data/6382/redis.log"
dbfilename dump.rdb
dir /data/6382
protected-mode no
slaveof   192.168.61.129  6380

注意:服務器

若是主庫中設置了密碼,那麼咱們在從庫的配置文件中就須要添加主庫的密碼spa

masterauth root   # 指定主庫的密碼

二、啓動redis服務端

redis-server /data/6380/redis.conf 
redis-server /data/6381/redis.conf 
redis-server /data/6382/redis.conf 

三、登陸數據庫查看主從關係

主庫【6380】:

[root@szx /data/6380 21:46:33]#redis-cli -p 6380 -h 192.168.61.129
192.168.61.129:6380> info  replication
# Replication
role:master
connected_slaves:2    # 有兩個從庫鏈接
slave0:ip=192.168.61.129,port=6381,state=online,offset=2100,lag=0
slave1:ip=192.168.61.129,port=6382,state=online,offset=2100,lag=0
master_replid:a70b4cc777e7f27efef1d2463f4d78d556a0162b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2100
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2100

從庫1【6381】:

[root@szx /data/6381 21:50:27]#redis-cli -p 6381 -h 192.168.61.129
192.168.61.129:6381> info  replication
# Replication
role:slave    # 從庫
master_host:192.168.61.129  # 主庫ip
master_port:6380      # 主庫端口
master_link_status:up    # 鏈接主庫正常
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:2226
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:a70b4cc777e7f27efef1d2463f4d78d556a0162b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2226
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2226

從庫2【6382】:

[root@szx /data/6382 21:50:27]#redis-cli -p 6382 -h 192.168.61.129
127.0.0.1:6382> info replication
# Replication
role:slave
master_host:192.168.61.129
master_port:6380
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:2366
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:a70b4cc777e7f27efef1d2463f4d78d556a0162b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2366
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:2324

四、查看主從複製效果

主庫寫入數據

192.168.61.129:6380> SET name "alex"
OK
192.168.61.129:6380> mset name "wusir" age 88 
OK

從庫1查看key

192.168.61.129:6381> get name 
"alex"
192.168.61.129:6381> mget name age 
1) "wusir"
2) "88"

從庫2查看key

127.0.0.1:6382> get name 
"alex"
127.0.0.1:6382> mget name age 
1) "wusir"
2) "88"

2、主從複製故障恢復

從庫掛了無所謂
主庫掛了得當即恢復主庫,或者將從庫切換爲主庫,繼續工做

    -.實驗步驟
    1.分別啓動 6380  6381 6382 三個數據庫實例,創建好主從關係
    
    2.殺死6380主庫,此時6381 6382 羣龍無首
    
    3.選擇讓6381爲新的主庫,就要去除6381的從的身份
    redis-cli -p 6381 slaveof  no one 
    #查看此時6381的身份
    redis-cli -p 6381 info replication

    4.此時將6382的主人改成6381
    redis-cli -p 6382 slaveof 192.168.61.129 6381

這種故障恢復只是臨時生效,重啓服務器後就不生效了日誌

相關文章
相關標籤/搜索