Redis 部署及介紹
1、安裝單機版redis
[[email protected] ~]# mkdir -p /data/application #建立工作目錄
[[email protected] ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz #下載redis
[[email protected] ~]# tar xzf redis-4.0.9.tar.gz -C /data/application/ #指定解壓到建立的資料夾裡
[[email protected] ~]# cd /data/application/
[[email protected]
[[email protected] application]# cd redis/
[[email protected] redis]# yum install -y gcc gcc-c++ #安裝編譯工具 要先安裝編譯工具在安裝
[[email protected] redis]# make #安裝
注:如果報錯請將剛才解壓的安裝包刪除掉,再次重新解壓並進行make安裝即可。
[[email protected] redis]# cp redis.conf redis.conf.bak
bind 192.168.246.202 #只監聽內網IP 就是允許誰訪問 如允許所有人訪問就0.0.0.0
daemonize yes #開啟後臺模式將on改為yes
slave-read-only no #這個是隻讀的許可權把yes修改為no。
timeout 300 #連線超時時間
port 6379 #埠號
dir /data/application/redis/data #本地資料庫存放持久化資料的目錄該目錄—待會要手動建立
pidfile /var/run/redis_6379.pid #定義pid檔案
建立存放資料的目錄
[[email protected] redis]# mkdir /data/application/redis/data
配置redis為systemctl啟動
[[email protected] redis]# cd /usr/lib/systemd/system
[[email protected] system]# vim redis.service
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf --daemonize no
ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
引數詳解:
• [Unit] 表示這是基礎資訊
• Description 是描述
• After 是在那個服務後面啟動,一般是網路服務啟動後啟動
• [Service] 表示這裡是服務資訊
• ExecStart 是啟動服務的命令
• ExecStop 是停止服務的指令
• [Install] 表示這是是安裝相關資訊
• WantedBy 是以哪種方式啟動:multi-user.target表明當系統以多使用者方式(預設的執行級別)啟動時,這個服務需要被自動執行。
啟動服務:
[[email protected] system]# systemctl daemon-reload
[[email protected] system]# systemctl start redis.service
登陸redis
[[email protected] system]# cd /data/application/redis/src/
[[email protected] src]# ./redis-cli -h 192.168.246.202 -p 6379
192.168.246.202:6379> ping #測試redis是否可以用
PONG
192.168.246.202:6379> set name newrain #設定key–name,並設定值
OK
192.168.246.202:6379> get name #獲取到key
“newrain”
192.168.246.202:6379>
單機版redis已經部署完成。將ip和埠發給開發就可以了。
redis持久化 – 兩種方式
一、redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)。
RDB(Redis DataBase):是在不同的時間點,將redis儲存的資料生成快照並存儲到磁碟等介質上;
特點:
1.週期性
2.不影響資料寫入 #RDB會啟動子程序,備份所有資料。當前程序,繼續提供資料的讀寫。當備份完成,才替換老的備份檔案。
3.高效 #一次性還原所有資料
4.完整性較差 #故障點到上一次備份,之間的資料無法恢復。
AOF(Append Only File)則是換了一個角度來實現持久化,那就是將redis執行過的所有寫指令記錄下來,在下次redis重新啟動時,只要把這些寫指令從前到後再重複執行一遍,就可以實現資料恢復了。
特點:
1.實時性
2.完整性較好
3.體積大 #記錄資料的指令,刪除資料的指令都會被記錄下來。
二、RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啟的話,則會優先採用AOF方式來進行資料恢復,這是因為AOF方式的資料恢復完整度更高。
如果你沒有資料持久化的需求,也完全可以關閉RDB和AOF方式,這樣的話,redis將變成一個純記憶體資料庫,就像memcache一樣。
三、如何選擇方式?
快取:不用開啟任何持久方式
雙開:因RDB資料不實時,但同時使用兩者時伺服器只會找AOF檔案,所以RDB留作萬一的手段。
redis持久化 – 如何選擇RDB和AOF
對於我們應該選擇RDB還是AOF,官方的建議是兩個同時使用。這樣可以提供更可靠的持久化方案。
寫入速度快 ------------AOF
寫入速度慢 ------------RDB
持久化配置
1、RDB預設開啟:
[[email protected] src]# cd …
[[email protected] redis]# vim redis.conf
#dbfilename:持久化資料儲存在本地的檔案
dbfilename dump.rdb
#dir:持久化資料儲存在本地的路徑
dir /data/application/redis/data
##snapshot觸發的時機,save
##如下為900秒後,至少有一個變更操作,才會snapshot
##對於此值的設定,需要謹慎,評估系統的變更操作密集程度
##可以通過“save “”來關閉snapshot功能
#save時間,以下分別表示更改了1個key時間隔900s進行持久化儲存;更改了10個key300s進行儲存;更改10000個key60s進行儲存。
save 900 1
save 300 10
save 60 10000
##當snapshot時出現錯誤無法繼續時,是否阻塞客戶端“變更操作”,“錯誤”可能因為磁碟已滿/磁碟故障/OS級別異常等
stop-writes-on-bgsave-error yes
##是否啟用rdb檔案壓縮,預設為“yes”,壓縮往往意味著“額外的cpu消耗”,同時也意味這較小的檔案尺寸以及較短的網路傳輸時間
rdbcompression yes
2、客戶端使用命令進行持久化save儲存:
auth
方式一
[[email protected] src]# ./redis-cli -h 192.168.246.202 -p 6379 #前臺進行儲存
OK
方式二
./redis-cli -h ip -p port bgsave #後臺進行儲存
注意:每次快照持久化都是將記憶體資料完整寫入到磁碟一次,並不是增量的只同步新資料。如果資料量大的話,而且寫操作比較多,必然會引起大量的磁碟io操作,可能會嚴重影響效能。
save方式:持久化前面的所有資料(rdb模式沒開時,後續的資料不會進行備份)
部署三臺機器redis—主從同步
redis-master----192.168.246.202
redis-slave-1-----192.168.246.203
redis-slave-2-----192.168.246.204
1.首先三臺伺服器將redis部署完成。
2.編輯master的redis配置檔案:
[[email protected] ~]# cd /data/application/redis/
[[email protected] redis]# vim redis.conf
2.修改slave1的配置檔案:
[[email protected] ~]# cd /data/application/redis/
[[email protected] redis]# vim redis.conf —修改如下:
3.修改slave2的配置檔案
[[email protected] ~]# cd /data/application/redis/
[[email protected] redis]# vim redis.conf #和slave1一樣
4.重啟三臺redis
5.測試主從
1.在master上面執行
[[email protected] redis]# cd src/
[[email protected] src]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name xuan
OK
127.0.0.1:6379> get name
“xuan”
127.0.0.1:6379>
2.分別在slave-1和slave-2上面執行:
[[email protected] redis]# cd src/
[[email protected] src]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get name
“xuan”
127.0.0.1:6379>
[[email protected] src]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get name
“xuan”
127.0.0.1:6379>
檢視複製狀態
master執行:
127.0.0.1:6379> info replication
#Replication
role:master
connected_slaves:2
slave0:ip=192.168.246.203,port=6379,state=online,offset=490,lag=0
slave1:ip=192.168.246.204,port=6379,state=online,offset=490,lag=1
slave上面執行:
127.0.0.1:6379> info replication
#Replication
role:slave
master_host:192.168.246.202
master_port:6379
master_link_status:up
配置哨兵模式
1.每臺機器上修改redis主配置檔案redis.conf檔案設定:bind 0.0.0.0 —已經操作
2.每臺機器上修改sentinel.conf配置檔案:修改如下配置
[[email protected] src]# cd …
[[email protected] redis]# vim sentinel.conf
sentinel monitor mymaster 10.0.0.137 6379 2 #當叢集中有2個sentinel認為master死了時,才能真正認為該master已經不可用了。 (slave上面寫的是master的ip,master寫自己ip)
sentinel down-after-milliseconds mymaster 3000 #單位毫秒
sentinel failover-timeout mymaster 10000 #若sentinel在該配置值內未能完成failover(故障轉移)操作(即故障時master/slave自動切換),則認為本次failover失敗。
protected-mode no #關閉加密模式–新新增到sentinel配置檔案中
3.每臺機器啟動哨兵服務:
4.將master的哨兵模式退出,再將redis服務stop了,在兩臺slave上面檢視其中一臺是否切換為master:(沒有優先順序,為隨機切換)
去從的裡面檢視
[[email protected] src]# ./redis-cli
192.168.246.202:6379>info replication