共計 6798 個字符,預計需要花費 17 分鐘才能閱讀完成。
本篇內容介紹了“redis 搭建和數據落盤的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、redis 的編譯安裝
1、依賴的系統包
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 的配置參數
必要的參數設置
將“daemonize”屬性設置為“yes”,表示我們會以后臺進程形式啟動 Redis 服務;將“port”屬性設置為指定的端口,這里默認為“6379”;將“logfile”屬性設置為指定的日志路徑;將“dir”設置為指定的工作目錄
將“requirepass”設定為本機連接的密碼
其余的屬性可以保持默認。
其他參數設置
bind:指定 redis 只接收來自該 IP 的請求,如果不設置,那么將處理所有請求,在生產環節中最好設置該項
protected-mode:保護模式,默認是開啟狀態,只允許本地客戶端連接, 可以設置密碼或添加 bind 來連接
port:指定 redis 運行的端口,默認是 6379
tcp-backlog:TCP 監聽的最大容納數量,在高并發的環境下,你需要把這個值調高以避免客戶端連接緩慢的問題。Linux 內核會把這個值縮小成 /proc/sys/net/core/somaxconn 對應的值,要提升并發量需要修改這兩個值才能達到目的;默認是 511
timeout:指定在一個 client 空閑多少秒之后關閉連接(0 表示永不關閉)tcp-keepalive:單位是秒,表示將周期性的使用 SO_KEEPALIVE 檢測客戶端是否還處于健康狀態,避免服務器一直阻塞,官方給出的建議值是 300s,如果設置為 0,則不會周期性的檢測
daemonize:默認情況下 redis 不是作為守護進程運行的,如果你想讓它在后臺運行,你就把它改成 yes。當 redis 作為守護進程運行的時候,它會寫一個 pid 到 /var/run/redis.pid 文件里面
supervised:可以通過 upstart 和 systemd 管理 Redis 守護進程,默認為 no,沒有啟動互動
supervised no - 沒有監督互動
supervised upstart - 通過將 Redis 置于 SIGSTOP 模式來啟動信號
supervised systemd - signal systemd 將 READY = 1 寫入 $ NOTIFY_SOCKET
supervised auto - 檢測 upstart 或 systemd 方法基于 UPSTART_JOB 或 NOTIFY_SOCKET 環境變量
pidfile:配置 PID 文件路徑,當 redis 作為守護進程運行的時候,它會把 pid 默認寫到 /var/redis/run/redis_6379.pid 文件里面
loglevel:定義日志級別,可以是下面的這些值: debug(記錄大量日志信息,適用于開發、測試階段) verbose(較多日志信息) notice(適量日志信息,使用于生產環境) warning(僅有部分重要、關鍵信息才會被記錄)logfile:日志文件的位置
syslog-enabled:要想把日志記錄到系統日志,就把它改成 yes,也可以可選擇性的更新其他的 syslog 參數以達到你的要求
syslog-ident:設置系統日志的 ID
syslog-facility:指定系統日志設置,必須是 USER 或者是 LOCAL0-LOCAL7 之間的值
databases:設置數據庫的數目。默認的數據庫是 DB 0 ,可以在每個連接上使用 select dbid 命令選擇一個不同的數據庫,dbid 是一個介于 0 到 databases - 1 之間的數值
always-show-logo:redis 啟動時是否顯示 login
save 間隔時間(秒) 寫入次數:根據給定的時間間隔和寫入次數將數據保存到磁盤
save 900 1:900 秒內如果至少有 1 個 key 的值變化,則保存
save 300 10:300 秒內如果至少有 10 個 key 的值變化,則保存
save 60 10000:60 秒內如果至少有 10000 個 key 的值變化,則保存
stop-writes-on-bgsave-error:如果用戶開啟了 RDB 快照功能,那么在 redis 持久化數據到磁盤時如果出現失敗,默認情況下,redis 會停止接受所有的寫請求
rdbcompression:對于存儲到磁盤中的快照,可以設置是否進行壓縮存儲,如果是的話,redis 會采用 LZF 算法進行壓縮
rdbchecksum:在存儲快照后,我們還可以讓 redis 使用 CRC64 算法來進行數據校驗,但是這樣做會增加大約 10% 的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能
dbfilename:設置快照的文件名
dir:設置快照文件的存放路徑,這個配置項一定是個目錄,而不能是文件名
requirepass:本機連接的密碼
slaveof masterip masterport:主從復制,使用 slaveof 來讓一個 redis 實例成為另一個 reids 實例的副本,默認關閉
masterauth master-password:如果 master 需要密碼認證,就在這里設置,默認不設置
slave-serve-stale-data:當一個 slave 與 master 失去聯系,或者復制正在進行的時候,slave 可能會有兩種表現
1) 如果為 yes ,slave 仍然會應答客戶端請求,但返回的數據可能是過時,或者數據可能是空的在第一次同步的時候
2) 如果為 no ,在你執行除了 info he salveof 之外的其他命令時,slave 都將返回一個 SYNC with master in progress 的錯誤
slave-read-only:你可以配置一個 slave 實體是否接受寫入操作
appendonly: 默認 redis 使用的是 rdb 方式持久化,這種方式在許多應用中已經足夠用了。但是 redis 如果中途宕機,會導致可能有幾分鐘的數據丟失,根據 save 來策略進行持久化,Append Only File 是另一種持久化方式,可以提供更好的持久化特性。Redis 會把每次寫入的數據在接收后都寫入 appendonly.aof 文件,每次啟動時 Redis 都會先把這個文件的數據讀入內存里,先忽略 RDB 文件
appendfilename:aof 文件名
appendfsync:aof 持久化策略的配置
appendfsync always,表示每次寫入都執行 fsync,以保證數據同步到磁盤
appendfsync everysec,表示每秒執行一次 fsync,可能會導致丟失這 1s 數據
appendfsync no,表示不執行 fsync,由操作系統保證數據同步到磁盤,速度最快
no-appendfsync-on-rewrite:指定是否在后臺 aof 文件 rewrite 期間調用 fsync,默認為 no,表示要調用 fsync(無論后臺是否有子進程在刷盤);Redis 在后臺寫 RDB 文件或重寫 afo 文件期間會存在大量磁盤 IO,此時,在某些 linux 系統中,調用 fsync 可能會阻塞
auto-aof-rewrite-percentage:指定 redis 重寫 aof 文件的條件,默認為 100,表示與上次 rewrite 的 aof 文件大小相比,當前 aof 文件增長量超過上次 afo 文件大小的 100% 時,就會觸發 background rewrite。若配置為 0,則會禁用自動 rewrite
auto-aof-rewrite-min-size:指定觸發 rewrite 的 aof 文件大小。若 aof 文件小于該值,即使當前文件的增量比例達到 auto-aof-rewrite-percentage 的配置值,也不會觸發自動 rewrite。即這兩個配置項同時滿足時,才會觸發 rewrite
aof-rewrite-incremental-fsync:aof rewrite 過程中, 是否采取增量文件同步策略, 默認為“yes”。 rewrite 過程中, 每 32M 數據進行一次文件同步, 這樣可以減少 aof 大文件寫入對磁盤的操作次數
slowlog-log-slower-than:slog log 是用來記錄 redis 運行中執行比較慢的命令耗時
三、redis 的單實例啟動
啟動
1、cd /usr/local/redis
2、./bin/redis-server ./etc/redis.conf
客戶端命令行進入
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
關閉
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、驗證主從寫入數據同步
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
五、數據落盤 RDB 和 AOF 的區別
RDB 的回寫方式
同步回寫即 SAVE 命令,主進程直接向磁盤回寫數據。在數據大的情況下會導致系統假死很長時間,所以一般不是推薦的
異步回寫即 BGSAVE 命令,主進程 fork 后,復制自身并通過這個新的進程回寫磁盤,回寫結束后新進程自行關閉。由于這樣做不需要主進程阻塞,系統不會假死
RDB 的特點
* RDB 就是 Snapshot 快照存儲,是默認的持久化方式
* 可理解為半持久化模式,即按照一定的策略周期性的將數據保存到磁盤,save 間隔時間(秒) 寫入次數:根據給定的時間間隔和寫入次數將數據保存到磁盤
* 對應產生的數據文件為 dump.rdb,通過配置文件中的 save 參數來定義快照的周期
* Redis 的 RDB 文件不會壞掉,因為其寫操作是在一個新進程中進行的
* 當生成一個新的 RDB 文件時,Redis 生成的子進程會先將數據寫到一個臨時文件中,然后通過原子性 rename 系統調用將臨時文件重命名為 RDB 文件,這樣在任何時候出現故障,Redis 的 RDB 文件都總是可用的
AOF 的特點
* AOF(Append-Only File) 比 RDB 方式有更好的持久化性
* 由于在使用 AOF 持久化方式時,Redis 會將每一個收到的寫命令都通過 Write 函數追加到文件中,類似于 MySQL 的 binlog
* 當 Redis 重啟時會通過重新執行文件中保存的寫命令來在內存中重建整個數據庫的內容
* 對應的設置參數為: * appendonly yes,啟用 AOF 持久化方式
* appendfilename appendonly.aof,AOF 文件的名稱,默認為 appendonly.aof
* appendfsync always,每次收到寫命令就立即強制寫入磁盤,是最有保證的完全的持久化,但速度也是最慢的,一般不推薦使用
* appendfsync everysec,每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,是受推薦的方式
* appendfsync no,完全依賴 OS 的寫入,一般為 30 秒左右一次,性能最好但是持久化最沒有保證,不被推薦
* AOF 的完全持久化方式同時也帶來了另一個問題,持久化文件會變得越來越大,為了壓縮 AOF 的持久化文件,Redis 提供了 bgrewriteaof 命令,收到此命令后 Redis 將使用與快照類似的方式將內存中的數據以命令的方式保存到臨時文件中,最后替換原來的文件,以此來實現控制 AOF 文件的增長
按照以下優先級進行數據的恢復
1、如果只配置 AOF,重啟時加載 AOF 文件恢復數據
2、如果同時配置了 RDB 和 AOF,啟動時只加載 AOF 文件恢復數據
3、如果只配置 RDB,啟動是將加載 RDB 文件恢復數據(需要注意的為:使用 AOF 備份數據進行恢復數據時需要主庫開啟 appendonly yes,才會恢復數據;使用 RDB 備份數據進行恢復數據時,不需要主庫開啟對應參數)
六、主庫宕機后的處理
1、主庫出現宕機
此處模擬主庫宕機
1、cd /usr/local/redis
2、./bin/redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
2、將 slave 上的同步狀態取消,避免主庫在未完成數據恢復前就重啟,進而直接覆蓋掉從庫上的數據,導致所有的數據丟失
127.0.0.1:6380 slaveof no one
3、拷貝從機數據到主機上
1、拷貝 AOF 數據用于恢復
cp data6380/appendonly.aof data6379/appendonly.aof
主庫./etc/redis6379.conf 開啟 appendonly yes
2、拷貝 RDB 數據用于恢復
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、重新進行主從同步的配置,這個時候就不用再指定密碼了,有原始記錄
127.0.0.1:6380 slaveof 127.0.0.1 6379
“redis 搭建和數據落盤的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!
正文完