1、進入redis界面:redis-cli -h ip/hostname -p port -a password
2、檢視redis版本資訊:進入用戶端界面後,輸入info
3、配置檔案:
(1)bind 0.0.0.0:監聽位址,可以用空格隔開後多個監聽ip
(2)protected-mode yes:保護模式
下圖所示,保護模式打開時候,未設定監聽位址或者未輸入密碼時候會有保護提升
關閉保護模式或者取消bind 0.0.0.0的注釋,都可以正常使用redis
(3)port 6379:預設監聽端口更改處
(4)tcp-backlog 511:三次握手時候server端收到client的ack确認号之後的隊列值
(5)timeout 0:用戶端和redis服務的連接配接逾時時間,預設是0,表示永不逾時;此處用戶端不是redis的client,是使用redis資料的java程式;若設定了時長,逾時後再連接配接java程式會與redis重新三次握手;為防止不回收長連接配接造成資料庫卡,建議設定時長
(6)tcp-keepalived 300:tcp會話保持時間,300s
(7)daemonize yes:是否在背景運作
(8)supervised no:uos與centos7後都是用systemctl進行啟動redis,此處就設定為no即可
(9)pidfile /var/run/redis/redis-server.pid:redis的pid檔案位置更改處,一台伺服器上redis多執行個體請務必标清各pid位置
(10)loglevel notice:log記錄等級
(11)logfile /var/log/redis/redis-server.log:log日志記錄位置,一台伺服器上redis多執行個體請務必标清各log位置
(12)databases 16:設定redis資料庫預設數量
(13)always-show-logo yes:logo顯示
(14)save <seconds> <changes>:表示key在多少秒内,至少發生了多少次變化後,重寫rdb檔案;多個save寫到上下行,表示或的關系
(15)stop-writes-on-bgsave-error yes:快照出錯時是否禁止redis寫入操作,如果設定yes,當redis的伺服器磁盤滿,快照無法寫入時redis會報錯影響正常業務使用,若設定為no不理會該項錯誤,業務正常運作
(16)rdbcompression yes:是否開啟壓縮
(17)rdbchecksum yes:是否開啟校驗
(18)dbfilename dump.rdb:快照名稱
(19)dir /var/lib/redis:快照存放位址
(20)slaveof <masterip> <masterport>:做哪台master的從機
(21)masterauth <master-password>:若主有密碼,尖括号内填寫密碼,即可做redis的主從配置,并不用像關系型資料庫的主從那樣複雜
(22)replica-server-stable-data yes:當從庫同主庫失去連接配接或者複制正在進行時,從機有兩種運作方式:
當此項為yes,從庫會繼續相應用戶端的讀請求,一般都用此項
當此項為no,除去指定的指令之外,任何請求都會傳回一個錯誤”sync with master in progress”
(23)slave-read-only yes:設定從庫隻讀,不允許寫從庫,避免主從資料不一緻
(24)repl-diskless-sync no:是否使用socket方式複制資料
redis主從複制的兩種方式: 第一種:基于硬碟,master建立一個新程序dump rdb,rdb完成之後由父程序傳給slave。 第二種:基于socket,master建立一個新程序直接dump rdb到slave的socket,不經過主程序,也不經過硬碟。 基于硬碟的話,rdb檔案建立後,一旦建立完畢可以同時服務更多的slave,但基于socket的話,新slave連接配接到master之後需要逐個同步資料。在磁盤io較慢、網絡較快時候可以用diskless,設定為yes,否則使用磁盤,此項設定為no
(25)repl-diskless-sync-delay 5:diskless(第24條設定為no)複制的延遲時間,設定0為關閉,機關為秒。在延遲時間内連接配接新的用戶端,會一起通過disk方式同步資料。但是一旦開始複制并且還沒有結束,master節點不會再接收新的slave複制請求,直到下一次同步開始
(26)repl-ping-salve-period 10:slave根據master指定的時間進行周期性的ping檢測,是slave ping master
(27)repl-timeout 60:複制連接配接的逾時時間,需要大于repl-ping-salve-period,否則會經常報逾時
(28)repl-disable-tcp-nodelay no:在socket模式下是否在slave套接字發送sync之後禁用tcp_nodelay,如果選擇yes,redis将使用更少的tcp包和帶寬來向slaves發送資料,但這将使資料傳輸到slave上有延遲;如果選擇no,資料傳輸到slave的延遲将會減少但要使用更多的帶寬
(29)repl-backlog-size 128m:複制緩沖區記憶體大小,隻有在slave連接配接之後才分盤記憶體,結合具體情況設定,此大小獨立于配置設定給redis的記憶體,給redis分的記憶體一般為系統總記憶體的一半
(30)repl-backlog-ttl 3600:多長時間master沒有slave連接配接,就清空backlog緩沖區
(31)replica-priority 100:當master不可用,哨兵會根據slave的優先級選舉一個master,最低優先級的slave當選master;此項若配置為0,将永遠不會被選舉
(32)requirepass 123456:設定密碼
(33)*rename-command config "":重命名指令,針對高危指令重命名,圖例:
此處重命名flushall為b39a51,flushall已失效
(34)maxclients 10000:最大連接配接數
memory management配置
(35)maxmemory <bytes>:最大記憶體配置設定,機關是位元組,0為不限制記憶體,配置設定最好是總記憶體的一半
append only mode:aof模式,模式打開必須打開(36)
(36)appendoly no:是否開啟aof記錄日志,預設redis使用rdb方式持久化,這種方式在許多應用中已經足夠用了,但redis如果中途當機,可能會導緻資料丢失,丢失量取決于dump資料的間隔時間。aof,是一種持久化方式,redis會把每次寫入的資料在接收後都寫入appendonly.aof檔案,每次啟動時都會把這個檔案的資料讀入記憶體裡,忽略了rdb檔案
(37)appendfilename “appendonly.aof”:aof檔案名
(38)appendfsync everysec:aof持久化政策的配置,no表示不執行fsync,由作業系統保證資料同步到磁盤;此項改為always,表示每次寫入都會執行fsync,以保證資料同步到磁盤,會消耗磁盤io;此項改為everysec,表示每秒執行一次fsync,特殊情況下,譬如某個不到1秒的時刻斷電了,rsync沒有來得及寫,便可能會導緻丢失1s的資料,不過通常情況下選該項比較好
fsync:打開aof模式産生的aof檔案,可以看到裡面寫好的1列資訊,将redis資料按照這1列資訊的格式,同步到磁盤的方式叫檔案同步政策
(39)auto-aof-rewrite-percentage 100:aof日志到達多少百分比可以重寫,設定0表示不自動重寫,重寫是為了使aof體積保持最小,同時還可以儲存最完整的資料
(40)auto-aof-rewrite-min-size 64mb:觸發aof日志重寫最小檔案大小
注:(39)和(40)兩條一起看,計算時候是相乘的,(39)是百分比,資料量比較大時候可作為選項
(41)no-appendfsync-on-rewrite no:在aof重寫期間,是否對aof的append新記錄暫緩使用檔案同步政策,主要考慮磁盤io開支和請求阻塞時間。預設為no,表示不暫緩,新的aof記錄仍然會被同步;由于linux預設的fsync政策是30秒,如果是yes,可能丢失30秒資料,但是yes性能較好而且會避免出現阻塞,是以推薦這個
(42)aof-use-rdb-preamble yes:是否加載由于其他原因導緻的末尾異常的aof檔案(主程序被kill/斷電等)
(43)aof-ues-rdb-preamble no:4.0新增功能,新增了rdb-aof混合持久化格式,aof重寫産生的檔案同時包含rdb格式的内容和aof格式的内容,其中rdb格式的内容用于記錄已有的資料,而aof格式的記憶體用于記錄最近發生了變化的資料,這樣redis就同時擁有rdb持久化和aof持久化的優點:既能快速生成重寫檔案,也能夠在出現問題時快速載入資料,還可以記錄下來發生變化的資料,正是因為新增功能,目前推薦no
該模式下master有16384個槽位,由所有的master分攤這些槽位,隻有master才擁有槽的所有權,如果是某個master的slave,這個slave隻負責槽的使用,但是沒有所有權
(44)cluster-enabled yes:開啟叢集模式,預設此行注釋,不開啟
(45)cluster-config-file nodes-6379.conf:叢集配置檔案名稱
(46)cluster-node-timeout 15000:node節點多久沒連接配接上就算逾時,機關毫秒
(47)cluster-replica-validity-factor 10:故障轉移時有些節點與master斷開一段時間資料比較舊,這些節點就不适用于選舉為master,超過這個時間就不會被進行故障轉移,機關秒
(48)cluster-migration-barrier 1:叢集遷移屏障,一個主節點至少擁有多少個正常工作的從節點,也就是說如果某個master節點的slave故障後,會将多餘的從節點配置設定給這個master,作為它的新slave
(49)cluster-require-full-coverage no:在叢集中,如果一個沒有slave的主庫當機了,該庫負責的槽位會丢失,此項選yes為不再對外提供服務;此項選no,可以繼續使用但由于資料有丢失,會出現查詢資料查不到的情況
slow log配置
slow log是redis用來記錄查詢執行時間的日志系統,slow log儲存在記憶體裡面,讀寫速度非常快,是以可以放心使用它,不必擔心因為開啟slow log而損害redis的速度
(50)slowlog-log-slower-than 10000:以微秒為機關的慢日志記錄,為負數會禁用日志,為0會記錄每個指令操作,10000微秒為10毫秒
(51)slowlog-max-len 128:記錄多少條慢日志儲存在隊列,超出後會删除最早的,以此滾動删除
1、rdb模式:基于時間的快照,預設隻保留目前最新的一次快照,特點是執行速度快,缺點是可能會丢失上次快照到目前時間點之間未做快照的資料,通俗而言,該模式下直接将rdb檔案往記憶體中還原。
2、實作過程:redis從主程序fork出一個子程序,使用寫時複制機制,子程序将記憶體的資料儲存為一個臨時檔案(bgsave,對redis主程序不影響),當資料儲存完成之後再将上一次儲存的rdb檔案替換掉,然後關閉子程序。
3、優缺點
優點:
(1)儲存了某個時間點的資料,可以通過腳本執行bgsave(非阻塞)或者save(阻塞)指令自定義時間點備份,可以保留多個備份,當出現問題可以恢複到不同時間點的版本
(2)可以最大化io的性能,redis從主程序複制出一個子程序,然後操作都會由這個子程序操作,父程序無需任何的操作
(3)rdb在大量資料下,恢複的速度比aof快
缺點:
(1)不能時刻儲存資料,會丢失上一次執行rdb備份到目前的記憶體資料
(2)資料量非常大的時候,從父程序fork的時候需要時間,根據磁盤io性能可能很快也可能幾分鐘
4、執行指令:
(1)save: 手動輸入save後立即執行,直接調用 rdbsave ,阻塞 redis 主程序,直到儲存完成為止。在主程序阻塞期間,伺服器不能處理用戶端的任何請求。
(2)bgsave:手動啟動後背景儲存操作,但不是立即執行。父程序fork 出一個子程序,子程序負責調用 rdbsave ,并在儲存完成之後向主程序發送信号,通知儲存已完成。 redis 伺服器在bgsave 執行期間仍然可以繼續處理用戶端的請求。
1、aof:按照操作順序依次将操作添加到指定的日志檔案中,特點是資料安全性相對性較高,缺點是有些重複的操作也會全部記錄。
2、aof寫資料過程:當用戶端輸入一條指令,伺服器接收後redis并沒有馬上記錄,而是放到了一個臨時的區域,這個區域也就是aof寫指令的緩存區,到了一定階段後,将這些指令同步到.aof檔案中
3、實作過程:aof使用了寫時複制機制,aof預設每秒fsync一次,即将執行的指令儲存到aof檔案當中,這樣即便redis伺服器發生故障的話,頂多丢失1秒鐘内的資料;或者可以設定fsync政策,fsync會在背景執行線程,而主線程可以繼續處理使用者的正常請求而不收到aof的io影響
4、aof持久化三種政策
(1)no,表示不執行fsync,由作業系統保證資料同步到磁盤;
(2)always,表示每次寫入都會同步到aof檔案中,資料零誤差,性能低;
(3)everysec,表示每秒将緩存區中的指令同步到aof檔案中,資料準确性較高,性能較高;系統突然當機情況下可能會導緻丢失1s的資料,不過通常情況下選該項比較好
1、哨兵簡介:哨兵sentinel是一個分布式系統,用于對主從結構中的每台伺服器進行監控,當出現故障時通過投票機制選擇新的master并将所有slave連接配接到新的master
2、哨兵作用:
(1)監控
不斷檢查master和slave是否正常運作
master存活檢測、master與slave運作情況檢測
(2)通知(提醒)
當被監控的伺服器出現問題時,向其他哨兵或者用戶端發送通知
(3)自動轉移故障
斷開master與slave連接配接,選取一個slave作為master,将其他slave連接配接到新的master,并告知用戶端新的伺服器位址
(4)哨兵也是一台redis伺服器,隻是不提供資料服務;通常配置數量為單數,最少3台哨兵
3、哨兵搭建
(1)配置一拖二的主從結構
(2)配置哨兵
檢視sentinel.conf
(3)啟動哨兵
redis-sentinel sentinel-port.conf,不加配置檔案按照預設配置檔案啟動
(4)配置檔案:/etc/redis/sentinel.conf
<1>port:配置哨兵端口
<2>dir /tmp:哨兵資訊存儲位置
<3>sentinel monitor mymaster 127.0.0.1 6379 2:哨兵監控主機,主機名稱為mymaster,ip和端口為127.0.0.1:6379,當有2個哨兵連接配接不到主機,則認定主機當機,重寫選舉slave為master
<4>sentinel down-after-milliseconds mymaster 30000:哨兵連接配接名為mymaster的master逾時時長,超過後認定master當機,機關為毫秒
<5>sentinel parallel-syncs mymaster 1:新master上任後,最多有多少個slave同時對新的master進行同步,數字越小,完成故障轉移後的同步時間就越長,但數字越大,越多的slave因為主從複制而暫不可用。設定為1即可。
<6>sentinel failover-timeout mymaster 180000:故障轉移後的同步逾時時間,逾時後無效,機關為毫秒
4、哨兵工作原理:
(1)階段一:監控階段
同步各個節點的狀态資訊
擷取各個sentinel的狀态是否線上
擷取master的狀态:
master的屬性
runid
role:master
各個slave的詳細資訊
擷取所有slave的狀态
slave屬性
role
master_host、master_port
(2)階段二:通知階段
維護長期資訊對等的一個階段,會有随機一台sentinel向redis叢集master發送打招呼資訊,看是否可以收到回應,如果收到回應,代表正常,在sentinel内網中向各sentinel發送正常資訊,其他sentinel将會表示收到
當有1台sentinel檢測到master當機時,會将标記master為sri_s_down狀态(主觀下線),随後該sentinel通知哨兵内網,其它sentinel也會去向master發送招呼資訊,當有半數以上的sentinel均檢測到master當機,會将master标記為sri_o_down(客觀下線)
(3)階段三:故障轉移階段
master當機後,各sentinel之間會進行投票選舉,選出一個sentinel去處理以下事情:
<1>伺服器清單中挑選備選master:線上的、響應快、與原master連接配接時間最短的、其他優先原則:優先級、offset、runid
<2>向新的master發送指令,取消之前它slave的ip和端口
向其他slave發送新的master ip和端口