日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis主从实战

發布時間:2023/12/10 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis主从实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?為了提升redis高可用性,除了備份redis?dump數據之外,還需要創建redis主從架構,可以利用從將數據庫持久化,(我們所說的數據持久化將是將數據保存到寫磁盤上,保證不會因為斷電等因素丟失數據)

? ? ? Redis需要經常將內存中的數據同步到磁盤來保證持久化,redis支持兩種持久化方式:一種是snapshotting(快照)是默認的方式,另一種是Append-only-file(縮寫寫就是aof的方式)

? ? ? Redis主從復制,也就是說當用戶在往master端主redis寫入?數據的時候,會通過redis?sync機制將數據發送到redis?slave,slave也會執行相同操作確保數據一致性,且實現redis主從復制非常簡單,同時redis?slave上還可以開啟二級slave,三級slave從庫;實現一主多從的架構 ,與mysql主從非常類似;

[半持久化RDB]

半持久化RDB模式也是Redis備份默認的方式,是通過快照(snapshotting)完成的,當符合在redis.conf配置中設置的條件時,redis會自動將內存中的數據進行快照并存儲在硬盤上,完成數據備份;

? Redis進行RDB快照的條件?由用戶在配置文件中自定義,由兩個參數構成;時間和改動的鍵的個數,當在指定的時間內被更改的鍵的個數大于指定的數值時就會進行快照。在配置文件中預制了三個條件

save? ? 900? 1? ? #900秒內有至少1個鍵被更改則進行快照

save? ? 300? ?10? ? #300秒內有至少10個鍵被更改?則進行快照

save? ? 60? ? ? 10000? ? #60秒內至少10000個鍵被更改則進行快照

Ps:默認可以存在多個條件,多個條件之間是或者的關系,也就是說滿足其中?一個條件就會進行快照,如果想要禁止自動快照,只需要將save參數刪除即可,redis快照默認會被存在?redis數據目錄中,默認文件名為dump.rdb,可以通過該配置dir和dbfilename兩個參數分指定存儲路徑和文件名。也可以在redis命令行中執行config get dir查看redis數據保存路徑;

Redis RDB 實現快照的過程:redis使用fork函數復制一份當前進程的副本,這個當前進程也就是父進程,副本也是指子進程,父進程繼續接受并處理客戶端發來的命令,而子進程開始將內存中的數據寫入硬盤中的臨時文件,當子進程寫入完所有數據之后會用該臨時文件替換舊的RDB文件,至此一次快照完成

【半持久化AOF模式】

? 如果數據很重要如果無法承受任何損失,可以考慮使用AOF方式進行持久化,默認是沒有開啟AOF(append noly?file)的方式的持久化模式

? ? 在啟動時redis會逐個執行AOF文件中的命令來將硬盤中的數據載入到內存中,載入的速度與RDB相比會慢一下,開啟AOF持久化后執行一條會更改redis中的數據命令,redis就會將該命令寫入硬盤中的AOF文件,AOF文件保存位置和RDB位置相同,都是通過dir參數設置的,默認文件名是appendonly.aof,可以通過appendfilename參數修改名稱

? Redis允許同時開啟AOF和RDB,既保證了數據安全性又使得備份操作簡單,此時重啟redis后,redis會使用AOF文件來恢復數據,因為AOF方式的持久化可能丟失的數據更少,在redis.conf中通過appendonly參數開啟redis AOF模式

1 appendonly yes #開啟AOF持久化功能 2 appendfilename appendonly.aof #AOF持久化保存文件名稱 3 auto-aof-rewrite-percentage 100 #當AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF文件大小為依據; 4 auto-aof-rewrite-min-size 64mb #允許重寫的最小AOF文件大小配置寫入AOF文件后,要求系統刷新硬盤緩存機制 5 appendfsync always #每次執行寫入都會執行同步,最安全也最慢; 6 #appendfsync everysec #每秒自行同步操作 7 #appendfsync no #不主動進行同步操作,而是完全交給操作系統來做,每30秒一次,最快也最不安全

?

【部署】

# wget http://download.redis.io/releases/redis-4.0.5.tar.gz

# tar zxvf redis-4.0.5.tar.gz -C /usr/src/

# cd /usr/src/redis-4.0.5/
# make

# cd src/
# make install PREFIX=/usr/local/redis

# cp redis.conf? /usr/local/redis/

mkdir /usr/local/redis/etc -p
mkdir /usr/local/redis/var -p

cp redis.conf /usr/local/redis/etc

# export PATH=/usr/local/redis/bin:$PATH
# nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &

# vim /usr/local/redis/etc/redis.conf? ? ? #Redis-master的redis.conf配置文件

1 daemonize yes 2 pidfile /var/run/redis.pid 3 port 6379 4 tcp-backlog 511 5 timeout 0 6 tcp-keepalive 0 7 loglevel notice 8 logfile /usr/local/redis/var/redis.log 9 databases 16 10 save 900 1 11 save 300 10 12 save 60 10000 13 stop-writes-on-bgsave-error yes 14 rdbcompression yes 15 rdbchecksum yes 16 dbfilename redis.rdb 17 dir /data/redis/ 18 slave-serve-stale-data yes 19 slave-read-only yes 20 repl-disable-tcp-nodelay no 21 slave-priority 100 22 appendonly no 23 appendfilename "appendonly.aof" 24 appendfsync everysec 25 no-appendfsync-on-rewrite no 26 auto-aof-rewrite-percentage 100 27 auto-aof-rewrite-min-size 64mb 28 lua-time-limit 5000 29 slowlog-log-slower-than 10000 30 slowlog-max-len 128 31 latency-monitor-threshold 0 32 notify-keyspace-events "" 33 hash-max-ziplist-entries 512 34 hash-max-ziplist-value 64 35 list-max-ziplist-entries 512 36 list-max-ziplist-value 64 37 set-max-intset-entries 512 38 zset-max-ziplist-entries 128 39 zset-max-ziplist-value 64 40 hll-sparse-max-bytes 3000 41 activerehashing yes 42 client-output-buffer-limit normal 0 0 0 43 client-output-buffer-limit slave 256mb 64mb 60 44 client-output-buffer-limit pubsub 32mb 8mb 60 45 hz 10 46 aof-rewrite-incremental-fsync yes 47 bind 0.0.0.0

redis-slave從配置文件

1 daemonize yes 2 pidfile /var/run/redis.pid 3 port 6379 4 slaveof 192.168.17.129 6379 5 tcp-backlog 511 6 timeout 0 7 tcp-keepalive 0 8 loglevel notice 9 logfile /usr/local/redis/var/redis.log 10 databases 16 11 save 900 1 12 save 300 10 13 save 60 10000 14 stop-writes-on-bgsave-error yes 15 rdbcompression yes 16 rdbchecksum yes 17 dbfilename redis.rdb 18 dir /data/redis/ 19 slave-serve-stale-data yes 20 slave-read-only yes 21 repl-disable-tcp-nodelay no 22 slave-priority 100 23 appendonly no 24 appendfilename "appendonly.aof" 25 appendfsync everysec 26 no-appendfsync-on-rewrite no 27 auto-aof-rewrite-percentage 100 28 auto-aof-rewrite-min-size 64mb 29 lua-time-limit 5000 30 slowlog-log-slower-than 10000 31 slowlog-max-len 128 32 latency-monitor-threshold 0 33 notify-keyspace-events "" 34 hash-max-ziplist-entries 512 35 hash-max-ziplist-value 64 36 list-max-ziplist-entries 512 37 list-max-ziplist-value 64 38 set-max-intset-entries 512 39 zset-max-ziplist-entries 128 40 zset-max-ziplist-value 64 41 hll-sparse-max-bytes 3000 42 activerehashing yes 43 client-output-buffer-limit normal 0 0 0 44 client-output-buffer-limit slave 256mb 64mb 60 45 client-output-buffer-limit pubsub 32mb 8mb 60 46 hz 10 47 aof-rewrite-incremental-fsync yes

?

【問題拓展】

redis-slave端redis主從無法同步 ,連接被拒絕,這種情況在排除防火墻,selinux之外,那就是redis-master中的配置文件bind參數

原因:如果redis主服務器綁定了127.0.0.1,那么跨服務器IP的訪問就會失敗,從服務器用IP和端口訪問主的時候,主服務器發現本機6379端口綁在了127.0.0.1上,也就是只能本機才能訪問,外部請求會被過濾,這是linux的網絡安全策略管理的

在redis-master端的redis.conf配置文件中

bind 127.0.0.1

改成

bind? 0.0.0.0

可能會有人會想過直接將其注釋,這種做法是錯誤的,注釋掉之后,redis-slave端日志仍然報錯

恢復正常之后,將redis啟動并進入命令終端驗證即可

【Redis啟動腳本】

vim? /etc/init.d/redis?

# redis Startup script for Redis Server # chkconfig: - 80 12 # description: Redis is an open source, advanced key-value store. # processname: redis-server #This is the redis startup script written by Xiaoyu on 05.27, 2018. # config: /usr/local/redis/etc/redis.conf # pidfile: /var/run/redis.pid source /etc/init.d/functions BIN="/usr/local/redis/bin" CONFIG="/usr/local/redis/etc/redis.conf" PIDFILE="/var/run/redis.pid" ### Read configuration [ -r "$SYSCONFIG" ] && source "$SYSCONFIG" RETVAL=0 prog="redis-server" desc="Redis Server" start() { if [ -e $PIDFILE ];then echo "$desc already running...." exit 1 fi echo -n $"Starting $desc: " daemon $BIN/$prog $CONFIG RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog return $RETVAL } stop() { echo -n $"Stop $desc: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE return $RETVAL } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; condrestart) [ -e /var/lock/subsys/$prog ] && restart RETVAL=$? ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" RETVAL=1 esac exit $RETVAL

轉載于:https://www.cnblogs.com/bixiaoyu/p/9094874.html

總結

以上是生活随笔為你收集整理的Redis主从实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。