安裝redis-5.0.4 修改配置文件 創建命令鏈接 設置redis開機自啟動 啟動redis服務 測試連接 安裝過程可能出現的問題 1.CentOS預設沒有安裝gcc,這會導致我們無法make成功 2.make時報如下錯誤: zmalloc.h:50:31: fatal error: jemal ...
----------------------------------------安裝redis-5.0.4----------------------------------------
wget http://download.redis.io/releases/redis-5.0.4.tar.gz tar zxvf redis-5.0.4.tar.gz -C /usr/local/ mv /usr/local/redis-5.0.4 /usr/local/redis cd /usr/local/redis make
修改配置文件
bind 192.168.100.101 #配置監聽地址 protected-mode no #關閉保護模式,允許外網連接資料庫 daemonize yes #開啟以後臺方式運行 logfile "/usr/local/redis/log/redis.log" #日誌文件路徑 dir /usr/local/redis/ #dump快照存放路徑
mkdir /usr/local/redis/log;touch /usr/local/redis/log/redis.log #創建日誌文件
創建命令鏈接
ln -s /usr/local/redis/src/redis-cli /usr/local/bin/redis ln -s /usr/local/redis/src/redis-cli /usr/local/bin/redis-cli ln -s /usr/local/redis/src/redis-server /usr/local/bin/redis-server
設置redis開機自啟動
echo "redis-server /usr/local/redis/redis.conf" >> /etc/rc.local chmod +x /etc/rc.local
啟動redis服務
redis-server /usr/local/redis/redis.conf
測試連接
redis-cli
安裝過程可能出現的問題
1.CentOS預設沒有安裝gcc,這會導致我們無法make成功
yum install gcc-c++ -y #解決辦法:yum安裝開發環境
2.make時報如下錯誤:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
#include <jemalloc/jemalloc.h>
^
compilation terminated.
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/root/redis-5.0.4/src'
make: *** [all] Error 2
原因是jemalloc重載了Linux下的ANSI C的malloc和free函數
make MALLOC=libc #解決辦法:make時添加參數
3.make之後,會出現一句提示
Hint: To run 'make test' is a good idea ;)
但是不測試,通常是可以使用的;若我們運行make test ,會有如下提示
[devnote@devnote src]$ make test
You need tcl 8.5 or newer in order to run the Redis test
make: ***[test] Error_1
yum install tcl -y #解決辦法:yum安裝tcl8.5
----------------------------------------redis持久化方式----------------------------------------
RDB持久化:將Reids在記憶體中的資料庫記錄定時dump到磁碟上,類似於快照功能(半持久化模式)
RDB方式配置:vim /usr/local/redis/redis.conf save 900 1 #開啟RDB快照功能,在900秒內完成一個key值得變動觸發快照功能,如若將所有save配置項都註釋掉,那麼則將關閉RDB快照功能 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes #當RDB快照後臺進程失敗,不影響用戶得寫操作 rdbcompression yes #是否將RDB快照文件壓縮,關閉後會增加性能 rdbchecksum no #關閉RDB快照文件的檢查校驗,增加性能 dbfilename dump.rdb #快照文件的名稱 dir ./ #快照文件的存儲路徑,./為redis的安裝目錄下
AOF持久化:append only file--原理是將Reids的操作日誌以追加的方式寫入文件,近似實時性(全持久化模式)
AOF持久化方式配置:vim /usr/local/redis/redis.conf #save 900 1 #save 300 10 #save 60 10000 appendonly yes #開啟AOF持久化方式 appendfilename "appendonly.aof" #指定持久化的文件 appendfsync everysec #頻率,具體參數見下表 no-appendfsync-on-rewrite no #如若設置為yes,則redis執行的命令會存放到緩衝區,待系統自動同步到硬碟 auto-aof-rewrite-percentage 100 #若當前寫入的AOF文件達到了上次rewrite文件大小的100%,則觸發rewrite操作 auto-aof-rewrite-min-size 64mb #設置AOF持久化重寫文件的最小值,當達到60M並且符合100%的條件時,則觸發rewrite操作
選項 | 同步頻率 |
always | 每一次寫操作都會調用一次fsync,這時數據是最安全的,當然,由於每次都會執行fsync,所以其性能也會受到影響 |
everysec | 預設每隔一秒進行一次fsync調用,將緩衝區中的數據寫到磁碟,但是當這一次的fsync調用時長超過1秒時。Redis會採取延遲fsync的策略,再等一秒鐘。也就是在兩秒後再進行fsync,這一次的fsync就不管會執行多長時間都會進行 |
no | redis不會主動調用fsync去將AOF日誌內容同步到磁碟,所以這一切就完全依賴於操作系統的調試了。對大多數Linux操作系統,是每30秒進行一次fsync,將緩衝區中的數據寫到磁碟上 |
----------------------------------------redis主從複製----------------------------------------
同步類型:
1.全量同步:
redis全量複製一般發生在Replica初始化階段,這時Replica需要將Master上的所有數據都複製一份。具體步驟如下:
1)從伺服器連接主伺服器,發送SYNC命令(從伺服器向主伺服器初次同步時,不會影響主伺服器接收客戶端的請求);
2)主伺服器接收到SYNC命名後,開始執行BGSAVE命令生成RDB文件並使用緩衝區記錄此後執行的所有寫命令;
3)主伺服器BGSAVE執行完後,向所有從伺服器發送快照文件,併在發送期間繼續記錄被執行的寫命令;
4)從伺服器收到快照文件後丟棄所有舊數據,載入收到的快照;
5)主伺服器快照發送完畢後開始向從伺服器發送緩衝區中的寫命令;
6)從伺服器完成對快照的載入,開始接收命令請求,並執行來自主伺服器緩衝區的寫命令;
完成上面幾個步驟後就完成了從伺服器數據初始化的所有操作,從伺服器此時可以接收來自用戶的讀請求
2.增量同步:
redis增量複製是指Replica初始化後開始正常工作時主伺服器發生的寫操作同步到從伺服器的過程。 增量複製的過程主要是主伺服器每執行一個寫命令就會向從伺服器發送相同的寫命令,從伺服器接收並執行收到的寫命令
同步策略:
主從剛剛連接的時候,進行全量同步;全同步結束後,進行增量同步;如果有需要Replica在任何時候都可以發起全量同步;redis策略是,無論如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步
註:如果多個Replica斷線了,需要重啟的時候,因為只要Replica啟動,就會發送sync請求和主機全量同步,當多個同時出現的時候,可能會導致Master IO劇增導致宕機
建議開啟master主伺服器的持久化功能,避免出現master重啟後,數據無法恢復;
主從配置:
Master配置 vim /usr/local/redis/redis.conf min-replicas-to-write 2 #設置replica節點的數量,如果replica節點數量少於此值,那麼master節點將停止客戶端的一切寫請求 min-replicas-max-lag 10 #master與replica之間同步數據的超時時間,若超過此時間,master節點將停止客戶端的一切寫操作
Replica配置 vim /usr/local/redis/redis.conf replicaof 192.168.100.101 6379 #指定master的ip地址以及埠 masterauth 123123 #指定master的連接密碼
驗證主從複製
192.168.100.101:6379> info replication #查看複製信息