linux之 redis 的rdb 轉 aof 及主從復 redis不重啟,切換RDB備份到AOF備份
RDB
基於快照的持久化
通過save命令,強制持久化
在redis.conf中
dbfilename dbmp.rdb
save 900 1
save 300 10
save 60 10000
AOF
將修改命令,全部收集寫入到一個aof檔案中
appendonly yes
appendfsync everysec #每秒鐘記錄一次變化 RDB資料切換AOF資料的操作
1.準備redis.conf配置檔案,確保開啟rdb功能,配置引數如下 port 6379
daemonize yes
pidfile /data/redis.pid
loglevel notice
logfile "/data/redis.log"
dir /data/
dbfilename dbmp.rdb
save 900 1
save 300 10
save 60 10000
2.啟動redis服務端
redis-server redis.conf
3.插入redis資料,通過save命令,強制寫入持久化rdb檔案(此時還是使用rdb持久化)
set name shahe
set age 11
save
4.通過命令,切換到aof持久化,(注意此步只是臨時生效,必須將AOF的配置,寫入redis.conf)
127.0.0.1:6379> CONFIG set appendonly yes #開啟AOF功能
OK
127.0.0.1:6379> CONFIG SET save "" #關閉RDB功能
OK 5.修改配置檔案,新增aof引數,(此步重啟後,rdb持久化完全切換aof持久化,且資料保持一致) port 6379
daemonize yes
pidfile /data/redis.pid
loglevel notice
logfile "/data/redis.log"
dir /data/
appendonly yes
appendfsync everysec 6.重啟redis服務 ******************************************************************************************************** redis主從複製:
1.環境準備3個redis例項
redis-6380.conf
redis-6381.conf
redis-6382.conf
三個配置檔案的區別,僅僅是埠的不同修改即可
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no 2.啟動三個redis例項
redis-server 6380.conf
redis-server 6381.conf
redis-server 6382.conf 3.此時可以檢視redis身份資訊,通過info引數()此時還未配置主從,因此都是master身份
redis-cli -p 6382 info Replication
redis-cli -p 6381 info Replication
redis-cli -p 6380 info Replication 4.配置從節點的身份(6380為主,6381,6382為從),通過命令指明master節點資訊即可
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380 127.0.0.1:6382> SLAVEOF 127.0.0.1 6380 5.檢視各個各個節點的身份資訊
redis-cli -p 6382 info Replication 從節點
redis-cli -p 6381 info Replication 從節點
redis-cli -p 6380 info Replication ()主節點 #手動切換主從身份
1.將主節點掛掉
kill -9 主節點 6380 2.將6382去掉slave的身份
redis-cli -p 6382 slaveof no one 3.將6381設定新的主人,設定為6382
redis-cli -p 6381 slaveof 127.0.0.1 6382 #通過配置檔案,決定主從身份
1.在配置檔案中,新增一條引數即可(主節點不做配置,從節點指明主人的ip埠資訊即可)
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no
slaveof 127.0.0.1 6381
redis不重啟,切換RDB備份到AOF備份
確保redis版本在2.2以上
[[email protected] /data 22:23:30]#redis-server -v Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=64cb6afcf41664c
本文在redis4.0中,通過config set命令,達到不重啟redis服務,從RDB持久化切換為AOF
實驗環境準備
redis.conf服務端配置檔案
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dbmp.rdb save 900 1 #rdb機制 每900秒 有1個修改記錄 save 300 10 #每300秒 10個修改記錄 save 60 10000 #每60秒內 10000修改記錄
啟動redis服務端
redis-server redis.conf
登入redis-cli插入資料,手動持久化
127.0.0.1:6379> set name chaoge OK 127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> set addr shahe OK 127.0.0.1:6379> save OK
檢查RDB檔案
[[email protected] /data 22:34:16]#ls 6379/ dbmp.rdb redis.log
備份這個rdb檔案,保證資料安全
[[email protected] /data/6379 22:35:38]#cp dbmp.rdb /opt/
執行命令,開啟AOF持久化
127.0.0.1:6379> CONFIG set appendonly yes #開啟AOF功能 OK 127.0.0.1:6379> CONFIG SET save "" #關閉RDB功能 OK
確保資料庫的key數量正確
127.0.0.1:6379> keys * 1) "addr" 2) "age" 3) "name"
確保插入新的key,AOF檔案會記錄
127.0.0.1:6379> set title golang OK
此時RDB已經正確切換AOF,注意還得修改redis.conf新增AOF設定,不然重啟後,通過config set的配置將丟失
redis主從同步
原理:
1. 從伺服器向主伺服器傳送 SYNC 命令。
2. 接到 SYNC 命令的主伺服器會呼叫BGSAVE 命令,建立一個 RDB 檔案,並使用緩衝區記錄接下來執行的所有寫命令。
3. 當主伺服器執行完 BGSAVE 命令時,它會向從伺服器傳送 RDB 檔案,而從伺服器則會接收並載入這個檔案。
4. 主伺服器將緩衝區儲存的所有寫命令傳送給從伺服器執行。
-------------
1、在開啟主從複製的時候,使用的是RDB方式的,同步主從資料的
2、同步開始之後,通過主庫命令傳播的方式,主動的複製方式實現
3、2.8以後實現PSYNC的機制,實現斷線重連
環境準備
6380.conf
1、環境: 準備兩個或兩個以上redis例項 mkdir /data/638{0..2} #建立6380 6381 6382資料夾 配置檔案示例: vim /data/6380/redis.conf port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 protected-mode no
6381.conf
vim /data/6381/redis.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
6382.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
啟動三個redis例項
redis-server /data/6380/redis.conf redis-server /data/6381/redis.conf redis-server /data/6382/redis.conf
主從規劃
主節點:6380 從節點:6381、6382
配置主從同步
6381/6382命令列
redis-cli -p 6381
SLAVEOF 127.0.0.1 6380 #指明主的地址
redis-cli -p 6382
SLAVEOF 127.0.0.1 6380 #指明主的地址
檢查主從狀態
從庫:
127.0.0.1:6382> info replication 127.0.0.1:6381> info replication
主庫:
127.0.0.1:6380> info replication
測試寫入資料,主庫寫入資料,檢查從庫資料
主 127.0.0.1:6380> set name chaoge 從 127.0.0.1:6381>get name
手動進行主從複製故障切換
#關閉主庫6380
redis-cli -p 6380 shutdown
檢查從庫主從資訊,此時master_link_status:down
redis-cli -p 6381 info replication
redis-cli -p 6382 info replication
既然主庫掛了,我想要在6381 6382之間選一個新的主庫
1.關閉6381的從庫身份
redis-cli -p 6381 info replication slaveof no one
2.將6382設為6381的從庫
6382連線到6381: [[email protected] ~]# redis-cli -p 6382 127.0.0.1:6382> SLAVEOF no one 127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
3.檢查6382,6381的主從資訊
確保redis版本在2.2以上
[[email protected] /data 22:23:30]#redis-server -v Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=64cb6afcf41664c
本文在redis4.0中,通過config set命令,達到不重啟redis服務,從RDB持久化切換為AOF
實驗環境準備
redis.conf服務端配置檔案
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dbmp.rdb save 900 1 #rdb機制 每900秒 有1個修改記錄 save 300 10 #每300秒 10個修改記錄 save 60 10000 #每60秒內 10000修改記錄
啟動redis服務端
redis-server redis.conf
登入redis-cli插入資料,手動持久化
127.0.0.1:6379> set name chaoge OK 127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> set addr shahe OK 127.0.0.1:6379> save OK
檢查RDB檔案
[[email protected] /data 22:34:16]#ls 6379/ dbmp.rdb redis.log
備份這個rdb檔案,保證資料安全
[[email protected] /data/6379 22:35:38]#cp dbmp.rdb /opt/
執行命令,開啟AOF持久化
127.0.0.1:6379> CONFIG set appendonly yes #開啟AOF功能 OK 127.0.0.1:6379> CONFIG SET save "" #關閉RDB功能 OK
確保資料庫的key數量正確
127.0.0.1:6379> keys * 1) "addr" 2) "age" 3) "name"
確保插入新的key,AOF檔案會記錄
127.0.0.1:6379> set title golang OK
此時RDB已經正確切換AOF,注意還得修改redis.conf新增AOF設定,不然重啟後,通過config set的配置將丟失
redis主從同步
原理:
1. 從伺服器向主伺服器傳送 SYNC 命令。
2. 接到 SYNC 命令的主伺服器會呼叫BGSAVE 命令,建立一個 RDB 檔案,並使用緩衝區記錄接下來執行的所有寫命令。
3. 當主伺服器執行完 BGSAVE 命令時,它會向從伺服器傳送 RDB 檔案,而從伺服器則會接收並載入這個檔案。
4. 主伺服器將緩衝區儲存的所有寫命令傳送給從伺服器執行。
-------------
1、在開啟主從複製的時候,使用的是RDB方式的,同步主從資料的
2、同步開始之後,通過主庫命令傳播的方式,主動的複製方式實現
3、2.8以後實現PSYNC的機制,實現斷線重連
環境準備
6380.conf
1、環境: 準備兩個或兩個以上redis例項 mkdir /data/638{0..2} #建立6380 6381 6382資料夾 配置檔案示例: vim /data/6380/redis.conf port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 protected-mode no
6381.conf
vim /data/6381/redis.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
6382.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
啟動三個redis例項
redis-server /data/6380/redis.conf redis-server /data/6381/redis.conf redis-server /data/6382/redis.conf
主從規劃
主節點:6380 從節點:6381、6382
配置主從同步
6381/6382命令列
redis-cli -p 6381
SLAVEOF 127.0.0.1 6380 #指明主的地址
redis-cli -p 6382
SLAVEOF 127.0.0.1 6380 #指明主的地址
檢查主從狀態
從庫:
127.0.0.1:6382> info replication 127.0.0.1:6381> info replication
主庫:
127.0.0.1:6380> info replication
測試寫入資料,主庫寫入資料,檢查從庫資料
主 127.0.0.1:6380> set name chaoge 從 127.0.0.1:6381>get name
手動進行主從複製故障切換
#關閉主庫6380
redis-cli -p 6380 shutdown
檢查從庫主從資訊,此時master_link_status:down
redis-cli -p 6381 info replication
redis-cli -p 6382 info replication
既然主庫掛了,我想要在6381 6382之間選一個新的主庫
1.關閉6381的從庫身份
redis-cli -p 6381 info replication slaveof no one
2.將6382設為6381的從庫
6382連線到6381: [[email protected] ~]# redis-cli -p 6382 127.0.0.1:6382> SLAVEOF no one 127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
3.檢查6382,6381的主從資訊