溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

redis搭建和數(shù)據(jù)落盤的方法是什么

發(fā)布時間:2021-11-11 15:37:01 來源:億速云 閱讀:177 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

本篇內(nèi)容介紹了“redis搭建和數(shù)據(jù)落盤的方法是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、 redis的編譯安裝

1、依賴的系統(tǒng)包

yum install -y wget gcc make tcl

2、下載包地址

1、各個版本redis的下載地址
http://download.redis.io/releases/
2、本文安裝最新版本4.0.9
wget http://download.redis.io/releases/redis-4.0.9.tar.gz

3、編譯安裝

1、解壓:tar xf redis-4.0.9.tar.gz && cd redis-4.0.9
2、編譯:make
3、編譯測試:make test
4、安裝:make PREFIX=/usr/local/redis install
5、拷貝配置文件到配置文件夾:mkdir  /usr/local/redis/etc && cp  redis-4.0.9/redis.conf  /usr/local/redis/etc/

二、 redis的配置參數(shù)

必要的參數(shù)設(shè)置

將“daemonize”屬性設(shè)置為“yes”,表示我們會以后臺進(jìn)程形式啟動Redis服務(wù);
將“port”屬性設(shè)置為指定的端口,這里默認(rèn)為“6379”;
將“l(fā)ogfile”屬性設(shè)置為指定的日志路徑;
將“dir”設(shè)置為指定的工作目錄
將“requirepass”設(shè)定為本機(jī)連接的密碼
其余的屬性可以保持默認(rèn)。

其他參數(shù)設(shè)置

bind:指定redis只接收來自該IP的請求,如果不設(shè)置,那么將處理所有請求,在生產(chǎn)環(huán)節(jié)中最好設(shè)置該項(xiàng)
protected-mode:保護(hù)模式,默認(rèn)是開啟狀態(tài),只允許本地客戶端連接, 可以設(shè)置密碼或添加bind來連接
port:指定 redis 運(yùn)行的端口,默認(rèn)是 6379
tcp-backlog:TCP監(jiān)聽的最大容納數(shù)量,在高并發(fā)的環(huán)境下,你需要把這個值調(diào)高以避免客戶端連接緩慢的問題。Linux 內(nèi)核會把這個值縮小成 /proc/sys/net/core/somaxconn對應(yīng)的值,要提升并發(fā)量需要修改這兩個值才能達(dá)到目的;默認(rèn)是511
timeout:指定在一個 client 空閑多少秒之后關(guān)閉連接(0表示永不關(guān)閉)
tcp-keepalive:單位是秒,表示將周期性的使用SO_KEEPALIVE檢測客戶端是否還處于健康狀態(tài),避免服務(wù)器一直阻塞,官方給出的建議值是300s,如果設(shè)置為0,則不會周期性的檢測
daemonize:默認(rèn)情況下 redis 不是作為守護(hù)進(jìn)程運(yùn)行的,如果你想讓它在后臺運(yùn)行,你就把它改成 yes。當(dāng)redis作為守護(hù)進(jìn)程運(yùn)行的時候,它會寫一個 pid 到 /var/run/redis.pid 文件里面
supervised:可以通過upstart和systemd管理Redis守護(hù)進(jìn)程,默認(rèn)為no,沒有啟動互動
    supervised no - 沒有監(jiān)督互動
    supervised upstart - 通過將Redis置于SIGSTOP模式來啟動信號
    supervised systemd - signal systemd將READY = 1寫入$ NOTIFY_SOCKET
    supervised auto - 檢測upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET環(huán)境變量
pidfile:配置PID文件路徑,當(dāng)redis作為守護(hù)進(jìn)程運(yùn)行的時候,它會把 pid 默認(rèn)寫到 /var/redis/run/redis_6379.pid 文件里面
loglevel:定義日志級別,可以是下面的這些值:
    debug(記錄大量日志信息,適用于開發(fā)、測試階段)
    verbose(較多日志信息)
    notice(適量日志信息,使用于生產(chǎn)環(huán)境)
    warning(僅有部分重要、關(guān)鍵信息才會被記錄)
logfile:日志文件的位置
syslog-enabled:要想把日志記錄到系統(tǒng)日志,就把它改成 yes,也可以可選擇性的更新其他的syslog 參數(shù)以達(dá)到你的要求
syslog-ident:設(shè)置系統(tǒng)日志的ID
syslog-facility:指定系統(tǒng)日志設(shè)置,必須是 USER 或者是 LOCAL0-LOCAL7 之間的值
databases:設(shè)置數(shù)據(jù)庫的數(shù)目。默認(rèn)的數(shù)據(jù)庫是DB 0 ,可以在每個連接上使用select  <dbid> 命令選擇一個不同的數(shù)據(jù)庫,dbid是一個介于0到databases - 1 之間的數(shù)值
always-show-logo:redis啟動時是否顯示login
save <間隔時間(秒)> <寫入次數(shù)>:根據(jù)給定的時間間隔和寫入次數(shù)將數(shù)據(jù)保存到磁盤
    save 900 1:900 秒內(nèi)如果至少有 1 個 key 的值變化,則保存
    save 300 10:300 秒內(nèi)如果至少有 10 個 key 的值變化,則保存
    save 60 10000:60 秒內(nèi)如果至少有 10000 個 key 的值變化,則保存
stop-writes-on-bgsave-error:如果用戶開啟了RDB快照功能,那么在redis持久化數(shù)據(jù)到磁盤時如果出現(xiàn)失敗,默認(rèn)情況下,redis會停止接受所有的寫請求
rdbcompression:對于存儲到磁盤中的快照,可以設(shè)置是否進(jìn)行壓縮存儲,如果是的話,redis會采用LZF算法進(jìn)行壓縮
rdbchecksum:在存儲快照后,我們還可以讓redis使用CRC64算法來進(jìn)行數(shù)據(jù)校驗(yàn),但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關(guān)閉此功能
dbfilename:設(shè)置快照的文件名
dir:設(shè)置快照文件的存放路徑,這個配置項(xiàng)一定是個目錄,而不能是文件名
requirepass:本機(jī)連接的密碼
slaveof <masterip> <masterport>:主從復(fù)制,使用 slaveof 來讓一個 redis 實(shí)例成為另一個reids 實(shí)例的副本,默認(rèn)關(guān)閉
masterauth <master-password>:如果 master 需要密碼認(rèn)證,就在這里設(shè)置,默認(rèn)不設(shè)置
slave-serve-stale-data:當(dāng)一個 slave 與 master 失去聯(lián)系,或者復(fù)制正在進(jìn)行的時候,slave 可能會有兩種表現(xiàn)
     1) 如果為 yes ,slave 仍然會應(yīng)答客戶端請求,但返回的數(shù)據(jù)可能是過時,或者數(shù)據(jù)可能是空的在第一次同步的時候
     2) 如果為 no ,在你執(zhí)行除了 info he salveof 之外的其他命令時,slave 都將返回一個 "SYNC with master in progress" 的錯誤
slave-read-only:你可以配置一個 slave 實(shí)體是否接受寫入操作
appendonly: 默認(rèn)redis使用的是rdb方式持久化,這種方式在許多應(yīng)用中已經(jīng)足夠用了。但是redis如果中途宕機(jī),會導(dǎo)致可能有幾分鐘的數(shù)據(jù)丟失,根據(jù)save來策略進(jìn)行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的數(shù)據(jù)在接收后都寫入appendonly.aof文件,每次啟動時Redis都會先把這個文件的數(shù)據(jù)讀入內(nèi)存里,先忽略RDB文件
appendfilename:aof文件名
appendfsync:aof持久化策略的配置
    appendfsync always,表示每次寫入都執(zhí)行fsync,以保證數(shù)據(jù)同步到磁盤
    appendfsync everysec,表示每秒執(zhí)行一次fsync,可能會導(dǎo)致丟失這1s數(shù)據(jù)
    appendfsync no,表示不執(zhí)行fsync,由操作系統(tǒng)保證數(shù)據(jù)同步到磁盤,速度最快
no-appendfsync-on-rewrite:指定是否在后臺aof文件rewrite期間調(diào)用fsync,默認(rèn)為no,表示要調(diào)用fsync(無論后臺是否有子進(jìn)程在刷盤);Redis在后臺寫RDB文件或重寫afo文件期間會存在大量磁盤IO,此時,在某些linux系統(tǒng)中,調(diào)用fsync可能會阻塞
auto-aof-rewrite-percentage:指定redis重寫aof文件的條件,默認(rèn)為100,表示與上次rewrite的aof文件大小相比,當(dāng)前aof文件增長量超過上次afo文件大小的100%時,就會觸發(fā)background rewrite。若配置為0,則會禁用自動rewrite
auto-aof-rewrite-min-size:指定觸發(fā)rewrite的aof文件大小。若aof文件小于該值,即使當(dāng)前文件的增量比例達(dá)到auto-aof-rewrite-percentage的配置值,也不會觸發(fā)自動rewrite。即這兩個配置項(xiàng)同時滿足時,才會觸發(fā)rewrite
aof-rewrite-incremental-fsync:aof rewrite過程中,是否采取增量文件同步策略,默認(rèn)為“yes”。 rewrite過程中,每32M數(shù)據(jù)進(jìn)行一次文件同步,這樣可以減少aof大文件寫入對磁盤的操作次數(shù)
slowlog-log-slower-than:slog log是用來記錄redis運(yùn)行中執(zhí)行比較慢的命令耗時

三、 redis的單實(shí)例啟動

啟動

1、cd  /usr/local/redis
2、./bin/redis-server ./etc/redis.conf

客戶端命令行進(jìn)入

1、cd  /usr/local/redis
2、./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456
    127.0.0.1:6379> set name 'beijing'
    OK
    127.0.0.1:6379> get name
    "beijing"

關(guān)閉

1、cd  /usr/local/redis
2、./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown

四、 redis的主從配置啟動

1、master,配置文件修改

port 6379
logfile "/data/redis/data6379/redis.log"
pidfile /var/run/redis_6379.pid
dir /data/redis/data6379
requirepass 123456

主redis一般配置為不使用RDB和AOF持久化到硬盤
#save 900 1
#save 300 10
#save 60 10000
appendonly no

2、slave,配置文件修改

port 6380
logfile "/data/redis/data6380/redis.log"
pidfile /var/run/redis_6380.pid
dir /data/redis/data6380
requirepass 123456
slaveof 127.0.0.1 6379
masterauth 123456
slave-read-only yes

從redis可以配置為RDB和AOF持久化到硬盤
save 900 1
save 300 10
save 60 10000
appendonly yes

3、啟動master和slave

1、cd  /usr/local/redis
2、./bin/redis-server ./etc/redis6379.conf
3、./bin/redis-server ./etc/redis6380.conf

4、驗(yàn)證主從寫入數(shù)據(jù)同步

master
    [root@dbtest1 redis]# ./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456
    127.0.0.1:6379> get name
    (nil)
    127.0.0.1:6379> set name "beijing"
    OK
    127.0.0.1:6379> get name
    "beijing"

slave
    [root@dbtest1 redis]# ./bin/redis-cli -h 127.0.0.1 -p 6380 -a 123456
    127.0.0.1:6380> get name
    "beijing"

五、 數(shù)據(jù)落盤RDB和AOF的區(qū)別

RDB的回寫方式

同步回寫即SAVE命令,主進(jìn)程直接向磁盤回寫數(shù)據(jù)。在數(shù)據(jù)大的情況下會導(dǎo)致系統(tǒng)假死很長時間,所以一般不是推薦的
異步回寫即BGSAVE命令,主進(jìn)程fork后,復(fù)制自身并通過這個新的進(jìn)程回寫磁盤,回寫結(jié)束后新進(jìn)程自行關(guān)閉。由于這樣做不需要主進(jìn)程阻塞,系統(tǒng)不會假死

RDB的特點(diǎn)

* RDB就是Snapshot快照存儲,是默認(rèn)的持久化方式
* 可理解為半持久化模式,即按照一定的策略周期性的將數(shù)據(jù)保存到磁盤,save <間隔時間(秒)> <寫入次數(shù)>:根據(jù)給定的時間間隔和寫入次數(shù)將數(shù)據(jù)保存到磁盤
* 對應(yīng)產(chǎn)生的數(shù)據(jù)文件為dump.rdb,通過配置文件中的save參數(shù)來定義快照的周期
* Redis的RDB文件不會壞掉,因?yàn)槠鋵懖僮魇窃谝粋€新進(jìn)程中進(jìn)行的
* 當(dāng)生成一個新的RDB文件時,Redis生成的子進(jìn)程會先將數(shù)據(jù)寫到一個臨時文件中,然后通過原子性rename系統(tǒng)調(diào)用將臨時文件重命名為RDB文件,這樣在任何時候出現(xiàn)故障,Redis的RDB文件都總是可用的

AOF的特點(diǎn)

* AOF(Append-Only File)比RDB方式有更好的持久化性
* 由于在使用AOF持久化方式時,Redis會將每一個收到的寫命令都通過Write函數(shù)追加到文件中,類似于MySQL的binlog
* 當(dāng)Redis重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容
* 對應(yīng)的設(shè)置參數(shù)為:
    * appendonly yes,啟用AOF持久化方式
    * appendfilename appendonly.aof,AOF文件的名稱,默認(rèn)為appendonly.aof
    * appendfsync always,每次收到寫命令就立即強(qiáng)制寫入磁盤,是最有保證的完全的持久化,但速度也是最慢的,一般不推薦使用
    * appendfsync everysec,每秒鐘強(qiáng)制寫入磁盤一次,在性能和持久化方面做了很好的折中,是受推薦的方式
    * appendfsync no,完全依賴OS的寫入,一般為30秒左右一次,性能最好但是持久化最沒有保證,不被推薦
* AOF的完全持久化方式同時也帶來了另一個問題,持久化文件會變得越來越大,為了壓縮AOF的持久化文件,Redis提供了bgrewriteaof命令,收到此命令后Redis將使用與快照類似的方式將內(nèi)存中的數(shù)據(jù)以命令的方式保存到臨時文件中,最后替換原來的文件,以此來實(shí)現(xiàn)控制AOF文件的增長

按照以下優(yōu)先級進(jìn)行數(shù)據(jù)的恢復(fù)

1、如果只配置AOF,重啟時加載AOF文件恢復(fù)數(shù)據(jù)
2、如果同時配置了RDB和AOF,啟動時只加載AOF文件恢復(fù)數(shù)據(jù)
3、如果只配置RDB,啟動是將加載RDB文件恢復(fù)數(shù)據(jù)
(需要注意的為:使用AOF備份數(shù)據(jù)進(jìn)行恢復(fù)數(shù)據(jù)時需要主庫開啟appendonly yes,才會恢復(fù)數(shù)據(jù);使用RDB備份數(shù)據(jù)進(jìn)行恢復(fù)數(shù)據(jù)時,不需要主庫開啟對應(yīng)參數(shù))

六、主庫宕機(jī)后的處理

1、主庫出現(xiàn)宕機(jī)

此處模擬主庫宕機(jī)
1、cd  /usr/local/redis
2、./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown

2、將slave上的同步狀態(tài)取消,避免主庫在未完成數(shù)據(jù)恢復(fù)前就重啟,進(jìn)而直接覆蓋掉從庫上的數(shù)據(jù),導(dǎo)致所有的數(shù)據(jù)丟失

127.0.0.1:6380> slaveof no one

3、拷貝從機(jī)數(shù)據(jù)到主機(jī)上

1、拷貝AOF數(shù)據(jù)用于恢復(fù)
cp data6380/appendonly.aof data6379/appendonly.aof
主庫./etc/redis6379.conf開啟appendonly yes

2、拷貝RDB數(shù)據(jù)用于恢復(fù)
127.0.0.1:6380> BGSAVE
cp data6380/dump.rdb data6379/dump.rdb

4、主庫重新啟動

1、cd  /usr/local/redis
2、./bin/redis-server ./etc/redis6379.conf

5、重新進(jìn)行主從同步的配置,這個時候就不用再指定密碼了,有原始記錄

127.0.0.1:6380> slaveof 127.0.0.1 6379

“redis搭建和數(shù)據(jù)落盤的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI