Linux之redis服務(wù)

redis簡介

redis單純程模型,支持主從模式佑菩,提高可用性,是一個開源項目裁赠,經(jīng)常用來當一個數(shù)據(jù)結(jié)構(gòu)服務(wù)器倘待。其是內(nèi)存級別的緩存服務(wù)器并可實現(xiàn)持久化功能. 據(jù)稱一百萬的變量存儲(字串)占用100M內(nèi)存空間,單臺redis服務(wù)器可達到5萬并發(fā)的能力组贺。

redis與memcache的對比

redis的優(yōu)勢

  • 支持豐富的操作
  • 主從復制和集群
  • 就地更新操作
  • 支持持久化(磁盤),避免雪崩效應

memcache優(yōu)勢

  • 多線程祖娘,善用多核CPU失尖,更少的阻塞操作
  • 更少的內(nèi)存開銷
  • 更少的內(nèi)存分配壓力
  • 可能有更少的內(nèi)存碎片

redis的組件

  • redis-server
  • redis-cli
  • redis-benchmark
  • redis-check-dump & redis-check-aof

redis的工作端口

  • 6379/TCP

redis-cli命令的參數(shù)

  • -h HOST : 連接的主機地址或主機名
  • -p PORT :連接的端口
  • -s socket : 指定套接字
  • -a password : 指定連接密碼
  • -r <repeat> : 指定命令運行多次

redis-cli中相關(guān)的命令

  • connection相關(guān)的命令
    • auth PASS : 認證
    • ping : 測試服務(wù)器是否在線
    • echo "string" : 顯示string
    • quit : 退出
    • select # : 挑選指定的名稱空間(即數(shù)據(jù)庫)
    • help @connection : 獲取與連接相關(guān)的命令幫助
  • 與服務(wù)器端支持的命令
    • help @server : 獲取與服務(wù)器端相關(guān)的命令幫助

    • bgsave : 實現(xiàn)異步將數(shù)據(jù)集同步到磁盤上

    • client getname : 獲取當前客戶端的連接名

    • client kill IP:PORT : 指定IP:PORT可關(guān)閉相關(guān)的連接信息

    • client list : 查看客戶端的連接信息

    172.16.36.70:6379> client list id=5 addr=172.16.36.70:57606 fd=8 name= age=904 idle=879 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
    ```
    • client setname CONNECTION-NAME: 設(shè)定當前連接的名稱
    • info : 查看當前服務(wù)器的狀態(tài)信息
    • info memory : 只顯示memory段的相關(guān)信息
    • config resetstart : 重置info中所統(tǒng)計的數(shù)據(jù)
    • config set PARAMETER value : 運行時修改設(shè)定指定參數(shù)的值,只保存在內(nèi)存中
    • config rewrite : 將修改在內(nèi)存中的參數(shù)值同步到配置文件中
    • config get dir : 查看redis的文件保存目錄
    • dbsize : 顯示數(shù)據(jù)庫中所有鍵的數(shù)量
    • lastsave : 用來獲取最新一次save執(zhí)行的時間戳
    • save : 保存數(shù)據(jù)到磁盤
    • monitor : 實時監(jiān)控所接收到的請求
    • shutdown : 將所有數(shù)據(jù)從內(nèi)存同步到磁盤渐苏,并安全關(guān)閉
    • shutdown [nosave][save] : 關(guān)閉程序并選擇是否將數(shù)據(jù)同步到磁盤上
    • salveof HOST PORT :配置主從掀潮,當前節(jié)點將變成從節(jié)點
    • slowlog : 查看慢查詢?nèi)罩荆枰_啟慢查詢?nèi)罩竟δ?/li>
    • sync : 復制功能的內(nèi)建命令
  • 與訂閱相關(guān)的命令
    • help @pubsub : 獲取與訂閱相關(guān)的命令
    • psubscribe : 基于模式進行訂閱
    • publish : 向頻道發(fā)送消息
    • subscribe CHANNEL : 訂閱一個頻道

redis的認證功能

vim /etc/redis.conf
requirepass zhenping.com

重啟redis服務(wù)
systemctl restart redis

連接redis并認證的方法
redis-cli -h 172.16.36.70
172.16.36.70:6379> select 0
(error) NOAUTH Authentication required.
172.16.36.70:6379> auth zhenping
OK

redis清空數(shù)據(jù)庫

  • flushdb : 清空當前庫

  • flushall : 清空所有庫

    [root@Centos7 ~]# redis-cli -h 172.16.36.70
    172.16.36.70:6379> flushall
    OK
    172.16.36.70:6379> flushdb
    OK
    

redis的事務(wù)功能

通過multi,exec,watch等命令來實現(xiàn)事務(wù)功能琼富,將多個命令打包仪吧,多個命令按順序執(zhí)行,并一次執(zhí)行完成鞠眉,并將執(zhí)行結(jié)果一次性全部返回給客戶端薯鼠。redis事務(wù)不支持回滾操作,在事務(wù)中應避免發(fā)生錯誤(如命令寫錯等)械蹋,事務(wù)了也將會執(zhí)行失敗出皇。

  • multi : 啟動一個事務(wù)
  • exec : 執(zhí)行事務(wù),一次性將事務(wù)中的所有操作執(zhí)行完成后哗戈,返回給客戶端
  • watch : 樂觀鎖機制郊艘,在EXEC命令執(zhí)行之前 ,用于監(jiān)視指定數(shù)據(jù)鍵,如果監(jiān)視的某任意鍵數(shù)據(jù)被修改纱注,服務(wù)器拒絕執(zhí)行事務(wù)
####建立一個事務(wù)
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> multi
OK
172.16.36.70:6379> set ip 172.16.36.70
QUEUED
172.16.36.70:6379> get ip
QUEUED
172.16.36.70:6379> set prot 8080
QUEUED
172.16.36.70:6379> exec
1) OK
2) "172.16.36.70"
3) OK

####使用watch機制監(jiān)控鍵
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> watch ip
OK
172.16.36.70:6379> multi
OK
172.16.36.70:6379> set ip 172.16.36.71
QUEUED
172.16.36.70:6379> get ip
QUEUED
172.16.36.70:6379> exec
(nil)

說明: 當watch ip指令發(fā)出后畏浆,其它的請求操作改變了IP鍵的值,此時新發(fā)起的事務(wù)中狞贱,如果也要改變其值刻获, 此事務(wù)申請將會失敗

redis的發(fā)布和訂閱功能(publish/subscribe)

發(fā)布和訂閱功能被廣泛用于構(gòu)建即時通信應用,比如:網(wǎng)絡(luò)聊天室和實時廣播斥滤、實時提醒等将鸵。 訂閱發(fā)布功能就能幫你很輕松地實現(xiàn)通知、監(jiān)控程序

  • subsciribe CHANNEL_NAME : 訂閱一個頻道
  • publish CHANNEL_NAME : 向頻道發(fā)送一個消息
  • unsubscribe CHANNEL_NAME : 退訂頻道
  • psubscribe CHANNEL_NAME_PATTERN : 基于正則表達式模式定義多個頻道
1佑颇、訂閱一個頻道:
72.16.36.70:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1

2顶掉、向頻道發(fā)送消息
172.16.36.70:6379> publish news weizhenping
(integer) 1

3、頻道會接收下來消息
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
1) "message"
2) "news"
3) "weizhenping"   #此內(nèi)容為頻道發(fā)送過來的消息

基于模式的頻道訂閱示例
1挑胸、基于模式訂閱頻道
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> PSUBSCRIBE news.i[to]    #訂閱了news.io,news,io兩個頻道
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.i[to]"
3) (integer) 1

2痒筒、向頻道發(fā)送消息
172.16.36.70:6379> PUBLISH news.io hello
(integer) 1

3、頻道會接收下來消息
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> PSUBSCRIBE news.i[to]
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.i[to]"
3) (integer) 1
1) "pmessage"
2) "news.i[to]"
3) "news.io"
4) "hello"

redis的持久化功能

  • 1茬贵、RDB(redisDB)

    • 工作原理

    RDB為snapshot(快照)存儲機制簿透,其也是redis默認的存儲機制,按照事先定制的策略解藻,周期性地將數(shù)據(jù)從內(nèi)存中讀取出來保存至磁盤老充,當?shù)竭_save指令指定的時間,redis主進程將fork一個子進程螟左,負責內(nèi)存中的內(nèi)容快照并保存到磁盤中啡浊。 Linux系統(tǒng)有寫時復制機制,父進程與子進程會共享相同的物理頁面胶背,當父進程處理寫請求時巷嚣,操作系統(tǒng)為寫的數(shù)據(jù)創(chuàng)建一個副本,因此子進程保存的數(shù)據(jù)一定是與時間點一致的數(shù)據(jù)钳吟。當子進程將快照寫入臨時文件后廷粒,會使用臨時文件替換舊的文件,然后子進程完成退出 红且。保存的數(shù)據(jù)文件默認為dump.rdb. 如果在SAVE周期之前停電了坝茎,會造成部分數(shù)據(jù)丟失。

    • 數(shù)據(jù)保存機制
      • save : 在主線程中保存快照暇番,保存時會阻塞所有客戶端請求景东,每次將完整數(shù)據(jù)寫至dump.rdb文件中,會帶來大量的IO壓力
      • bgsave : 異步保存機制奔誓,在后端自動保存斤吐,其不會阻塞窩客戶端請求
    • RDB相關(guān)的配置參數(shù)(/etc/redis/redis.conf)
      • stop-writes-on-bgsave-error yes : 在基于快照備份時搔涝,一旦發(fā)生錯誤,是否停止寫操作
      • rdbcompression yes : rdb文件是否壓縮來節(jié)約空間
      • rdbchecksum yes : 是否對rdb的鏡像文件做校驗碼檢測和措,當redis啟動時會根據(jù)事先保存好的校驗碼進行對比庄呈,保證數(shù)據(jù)的完整性
      • dbfilename dump.rdb : 保存的文件名
      • dir /var/lib/redis/ : 文件保存目錄
      • save "" : 關(guān)閉rdb功能
  • 2、AOF(append only file)

    • 工作原理

    redis以順序IO的方式附加在文件的尾部派阱,將每一次的寫命令操作都通過write函數(shù)追加到文件后面诬留,其是比RDB更好的持久化方案,但文件會變得越來越大贫母。當redis重啟時文兑,可通過執(zhí)行文件中的命令在內(nèi)存中重建數(shù)據(jù)庫

    • 數(shù)據(jù)保存機制
      • bgrewriteaof : AOF文件重寫,它不會讀取正在使用的AOF文件腺劣,而是通過將內(nèi)存中的數(shù)據(jù)以命令的方式保存至臨時文件中绿贞,完成之后替換原來的AOF文件,這樣可以減少AOF的大小
    • AOF重寫過程
      • 1橘原、redis主進程通過fork機制創(chuàng)建子線程
      • 2籍铁、子進程根據(jù)redis內(nèi)存中現(xiàn)有的數(shù)據(jù)通過重建命令創(chuàng)建數(shù)據(jù)庫于臨時文件中
      • 3、父進程繼續(xù)接收客戶請求趾断,并會把這些請求中的寫操作繼續(xù)追加到原來的AOF文件中拒名,額外地,也將新的寫請求放置于一個緩沖隊列中
      • 4芋酌、子進程重寫完成增显,會通知父進程,父進程把緩沖中的隊列命令寫到臨時文件中
      • 5脐帝、父進程用臨時文件替換老的AOF文件
    • AOF相關(guān)的配置參數(shù)(/etc/redis/redis.conf)
      • appendonly no : 是否啟用AOF功能同云,yes表示啟用
      • appendfilename "appendonly.aof" : aof存儲文件
      • appendfsync always : 每次收到寫命令,立即寫入磁盤
      • appendfsync everysec : 每秒鐘寫一次腮恩,推薦操作
      • appendfsync no : append功能自己觸發(fā)寫操作,將所有操作都提交給OS温兼,由操作系統(tǒng)決定什么時候?qū)?/li>
      • no-appendfsync-no-rewrite no: 在重寫的過程中是否調(diào)用fsync
      • auto-aof-rewrite-percentage 100 : 在aof文件已經(jīng)是上次重寫時的2倍大小秸滴,將自動啟動重寫操作
      • auto-aof-rewrite-min-size 64mb : 當文件達到64MB才執(zhí)行重寫操作
      RDB與AOF同時啟用時:
      1、bgsave和bgrewriteaof不會同時執(zhí)行
      2募判、在redis服務(wù)器啟動用于恢復數(shù)據(jù)時荡含,會優(yōu)先使用AOF
      

redis的主從復制

  • 1、redis的主從復制特點

    • 一個master可以有多個slave
    • 支持鏈式復制
    • master以非阻塞方式同步數(shù)據(jù)至slave,意味著可同時與多個slave同步
  • 2届垫、復制的工作原理

    • 1释液、主庫會自己基于ping check機制來檢查從庫是否在線
    • 2、如果從庫在線就同步數(shù)據(jù)文件至從服務(wù)器端
    • 3装处、從服務(wù)器也可以發(fā)送請求同步的請求误债,主庫將啟動一個線程浸船,把內(nèi)存中的數(shù)據(jù)同步給從庫,從庫將數(shù)據(jù)保存至文件中
    • 4寝蹈、從庫再把文件裝載到內(nèi)存中李命,從而完成復制功能
  • 3、主從相關(guān)配置(/etc/redis.conf)

    • slave-serve-stale-data yes : 當主服務(wù)器連接不上了箫老,從服務(wù)器是否可以使用過期數(shù)據(jù)響應
    • repl-diskless-sync no : 是否基于diskless機制同步
    • slave-priority 100 : 指定從服務(wù)器優(yōu)先級
    • min-slave-to-write 3 : 如果從節(jié)點小于三個封字,主服務(wù)器將拒絕寫操作
    • min-slave-max-lag 10 : 從服務(wù)器不能晚于主服務(wù)器10秒鐘,是否將停止復制

    如果master使用了requirepass開啟了認證功能耍鬓,從服務(wù)器要使用masterauth <password>來連接阔籽,使用指定的密碼進行認證

    主從設(shè)置示例:
        172.16.36.70 : 主redis服務(wù)
        172.16.36.71 : 從redis服務(wù)
        
    172.16.36.70配置
    vim /etc/redis.conf
    bind 172.16.36.70
    
    172.16.36.71配置:
    vim /etc/redis.conf
    bind 172.16.36.71
    
    [root@Centos7 ~]# redis-cli -h 172.16.36.71
    172.16.36.71:6379> SLAVEOF 172.16.36.70 6379
    OK
    172.16.36.71:6379> get ip   #查看是否能獲取到主庫數(shù)據(jù)
    "172.16.36.70"
    172.16.36.71:6379> dbsize
    (integer) 3
    

redis高可用的實現(xiàn)

  • sentinel機制

    • 工作原理

      找一臺專用的監(jiān)控主機,即能提供監(jiān)控又可以提供配置功能牲蜀,如果發(fā)現(xiàn)master離線了笆制,監(jiān)控主機會從從節(jié)點選擇新的主節(jié)點。為了不誤判各薇,setinel至少奇數(shù)個節(jié)點项贺,同時監(jiān)控。如果主節(jié)點不在線峭判,多個setinel會協(xié)調(diào)一個新的主節(jié)點开缎,以免發(fā)生誤判,所有setinel每秒一次向所有服務(wù)器發(fā)送ping請求林螃,判斷節(jié)點是否在線奕删。setinel是一個分布式系統(tǒng),使用流言協(xié)議和投票協(xié)議來決定故障遷移疗认⊥瓴校可以監(jiān)控多組redis實例。

    • sentinel的功用
      • 用于管理多個redis服務(wù)横漏,實現(xiàn)HA
      • 監(jiān)控
      • 通知
      • 自動故障轉(zhuǎn)移
    • 工作過程
      • 啟用sentinel時谨设, 首先服務(wù)器做自身初始化,運行redis-server中專用于sentinel功能中的代碼
      • 初始化sentinel狀態(tài)缎浇,根據(jù)給定的配置文件扎拣,初始化監(jiān)控的master服務(wù)列表(可以根據(jù)master的配置,獲取從服務(wù)器節(jié)點)
      • 創(chuàng)建連向Master的連接
    • sentinel下線機制
      • 主觀下線 : 一個sentinel實例判斷出某節(jié)點下線
      • 客觀下線 : 多個sentinel節(jié)點協(xié)商后判斷出某節(jié)點下線
  • setinel程序

    • redis-sentinel /path/to/sentinel.conf
    • redis-server /path/to/sentinel --sentinel
  • setinel的工作端口

    • 26379/TCP
  • 專用配置文件

    • /etc/redis-sentinel.conf
  • redis-sentinel.conf配置參數(shù)
    • prot 26379
    • dir /tmp
    • sentinel monitor mymaster 127.0.0.1 6379 2
    mymaster: sentinel要監(jiān)控的實例名稱素跺,此名稱可以隨意取
    127.0.0.1 : 主節(jié)點的IP地址
    6379 : 主節(jié)點的端口
    2 : sentinel節(jié)點的票數(shù)二蓝,此值要大于sentinel節(jié)點數(shù)量的半數(shù)
    
    • sentinel down-after-milliseconds mymaster 30000 : 判斷主節(jié)點不在線的默認超時時長,默認30秒
    • sentinel parallel-syncs mymaster 1 : 故障轉(zhuǎn)移時最多能有多少個從服務(wù)器向主服務(wù)器發(fā)起同步請求
    • sentinel failover-timeout mymaster 180000 : 提升主節(jié)點的超時時長指厌,表示提升新的主節(jié)點在3分鐘內(nèi)未完成刊愚,操作將失敗
  • sentinel專用命令

    • sentinel masters : 列出所有主服務(wù)器
    • sentinel slaves <master name> : 獲取所有當前redis實例中的從節(jié)點信息
    • sentinel get-master-addr-by name <master name> :直接獲取當前redis實例主節(jié)點的IP地址及端口
    172.16.36.74:26379> sentinel get-master-addr-by-name mymaster
    1) "172.16.36.72"
    2) "6379"
    
    • sentinel reset : 重置服務(wù)器所有狀態(tài)
    • sentinel failover <master name> : 手動實現(xiàn)故障轉(zhuǎn)移
  • sentinel配置實例

實驗環(huán)境說明:
    172.16.36.70 : redis主節(jié)點
    172.16.36.71 : redis從節(jié)點
    172.16.36.72 : redis從節(jié)點
    172.16.36.74 : sentinel節(jié)點1
    172.16.36.75 : sentinel節(jié)點2
    172.16.36.76 : sentinel節(jié)點3
    
####配置redis主節(jié)點
操作主機: 172.16.36.70
#vim /etc/redis.conf
bind 172.16.36.70
daemonize yes   
啟動服務(wù)
#redis-server /etc/redis.conf
[root@Centos7 ~]# ss -tnl
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port
LISTEN     0      128                                           172.16.36.70:6379                                                    *:*


####配置redis從節(jié)點
操作主機: 172.16.36.71
#vim /etc/redis.conf
bind 172.16.36.71
daemonize yes

啟動服務(wù)
#redis-server /etc/redis.conf
[root@Centos7 ~]# ss -tnl
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port
LISTEN     0      128                                           172.16.36.70:6379                                                    *:*

配置主節(jié)點信息
[root@Centos7 ~]# redis-cli -h 172.16.36.71 -p 6379
172.16.36.71:6379> SLAVEOF 172.16.36.70 6379
OK

操作主機: 172.16.36.72
#vim /etc/redis.conf
bind 172.16.36.72
daemonize yes

啟動服務(wù)
#redis-server /etc/redis.conf
[root@Centos7 ~]# ss -tnl
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port
LISTEN     0      128                                           172.16.36.70:6379                                                    *:*

配置主節(jié)點信息
[root@Centos7 ~]# redis-cli -h 172.16.36.71 -p 6379
172.16.36.71:6379> SLAVEOF 172.16.36.70 6379
OK


####配置sentinel節(jié)點
操作主機: 172.16.36.74
# vim /etc/redis-sentinel.conf
port 26379
dir "/tmp"
daemonize yes
sentinel monitor mymaster 172.16.36.70 6379 2
sentinel parallel-syncs mymaster 3
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000

啟動服務(wù)
redis-sentinel /etc/redis-sentinel.conf

查看服務(wù)啟動狀態(tài)
users:(("master",2112,14))
[root@Centos7 ~]# ss -tln
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port
LISTEN     0      128                                                      *:26379                                                   *:*


操作主機: 172.16.36.75
# vim /etc/redis-sentinel.conf
port 26379
dir "/tmp"
daemonize yes
sentinel monitor mymaster 172.16.36.70 6379 2
sentinel parallel-syncs mymaster 3
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000

啟動服務(wù)
redis-sentinel /etc/redis-sentinel.conf

查看服務(wù)啟動狀態(tài)
users:(("master",2112,14))
[root@Centos7 ~]# ss -tln
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port
LISTEN     0      128                                                      *:26379                                                   *:*


操作主機: 172.16.36.76
# vim /etc/redis-sentinel.conf
port 26379
dir "/tmp"
daemonize yes
sentinel monitor mymaster 172.16.36.70 6379 2
sentinel parallel-syncs mymaster 3
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000

啟動服務(wù)
redis-sentinel /etc/redis-sentinel.conf

查看服務(wù)啟動狀態(tài)
users:(("master",2112,14))
[root@Centos7 ~]# ss -tln
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port
LISTEN     0      128                                                      *:26379                                                   *:*



查看sentinel相關(guān)的日志信息
tailf /var/log/redis/redis-sentinel.log
[32524] 25 Mar 10:05:02.290 # Sentinel runid is a44025e518b65c512340c48535df119496f7a0d8
[32524] 25 Mar 10:05:02.291 # +monitor master mymaster 172.16.36.70 6379 quorum 2
[32524] 25 Mar 10:05:32.322 # +sdown slave 172.16.36.71:6379 172.16.36.71 6379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:05:46.311 * +sentinel sentinel 172.16.36.76:26379 172.16.36.76 26379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:05:57.071 * +sentinel sentinel 172.16.36.75:26379 172.16.36.75 26379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:09:03.727 # +sdown master mymaster 172.16.36.70 6379


將當前的Master節(jié)點shudown,查看sentinel的相關(guān)日志信息
[32524] 25 Mar 10:09:03.747 # +new-epoch 4
[32524] 25 Mar 10:09:03.749 # +vote-for-leader 90c011868befc3047a8527886efce8f8c6f9ea34 4
[32524] 25 Mar 10:09:03.836 # +odown master mymaster 172.16.36.70 6379 #quorum 3/2
[32524] 25 Mar 10:09:03.836 # Next failover delay: I will not start a failover before Fri Mar 25 10:15:04 2016
[32524] 25 Mar 10:09:04.854 # +config-update-from sentinel 172.16.36.75:26379 172.16.36.75 26379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:09:04.854 # +switch-master mymaster 172.16.36.70 6379 172.16.36.72 6379
[32524] 25 Mar 10:09:04.855 * +slave slave 172.16.36.71:6379 172.16.36.71 6379 @ mymaster 172.16.36.72 6379
[32524] 25 Mar 10:09:04.856 * +slave slave 172.16.36.70:6379 172.16.36.70 6379 @ mymaster 172.16.36.72 6379

對當前主節(jié)點監(jiān)控sentinel的活躍探測信息
root@Centos7 ~]# redis-cli -h 172.16.36.72
172.16.36.72:6379> monitor
OK
1458878723.052705 [0 172.16.36.76:53255] "PING"
1458878723.402835 [0 172.16.36.75:38413] "PING"
1458878723.586806 [0 172.16.36.74:32824] "PING"
1458878723.859748 [0 172.16.36.75:38413] "PUBLISH" "__sentinel__:hello" "172.16.36.75,26379,90c011868befc3047a8527886efce8f8c6f9ea34,4,mymaster,172.16.36.72,6379,4"
1458878724.099837 [0 172.16.36.76:53255] "PING"
1458878724.152776 [0 172.16.36.76:53255] "PUBLISH" "__sentinel__:hello" "172.16.36.76,26379,21a0a795010287138b6efc636d03edcce66bcd56,4,mymaster,172.16.36.72,6379,4"
1458878724.454214 [0 172.16.36.75:38413] "PING"
1458878724.617819 [0 172.16.36.74:32824] "PING"
1458878724.693888 [0 172.16.36.74:32824] "PUBLISH" "__sentinel__:hello" "172.16.36.74,26379,a44025e518b65c512340c48535df119496f7a0d8,4,mymaster,172.16.36.72,6379,4"

使用info sentinel命令查看主從信息
172.16.36.74:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=172.16.36.72:6379,slaves=2,sentinels=3

Redis Clustering

在redis3.0版本中引入clustering功能, 是去中心化的分布式數(shù)據(jù)庫踩验,通過分片機制進行數(shù)據(jù)分布鸥诽,clustering內(nèi)的每個節(jié)點僅有數(shù)據(jù)庫一部分數(shù)據(jù)商玫,每個節(jié)點都有全局元數(shù)據(jù),通過查找元數(shù)據(jù)衙传,即可查詢到數(shù)據(jù)存放在哪臺服務(wù)器

分布式解決方案

  • Twemproxy(Twitter)
    • 代理分片機制
    • 優(yōu)點
      • 非常穩(wěn)定撞叨,企業(yè)方案
    • 缺點
      • 單點故障
      • 需要依賴第三方軟件盖桥,如Keeplived
      • 無法平滑地橫向擴展
      • 沒有后臺界面
      • 代理分片機制引入更多的來回次數(shù)并提高延遲
      • 單核模式自晰,無法充分利用多核沛膳,除非多實例
      • Twitter官方肉串不再繼續(xù)使用
  • Codis(豌豆莢)
    • 代理分片機制
    • 2014年11月開源
    • 基于GO以及C語言開發(fā)
    • 優(yōu)點
      • 非常穩(wěn)定,企業(yè)級方案
      • 數(shù)據(jù)自動平衡
      • 高性能
      • 簡單的測試顯示較Twemproxy快一倍
      • 善用多核CPU
      • 簡單
        • 沒有paxos類的協(xié)調(diào)機制
        • 沒有主從復制
      • 有后臺界面
    • 缺點
      • 代理分片機制引入更多的來回次數(shù)并提高延遲
      • 需要第三方軟件支持協(xié)調(diào)機制
        • 目前支持zookeeper及Etcd
      • 不支持主從復制 俊鱼,需要另外實現(xiàn)
      • Codis采用proxy方案刻像,所有必然會帶來單機性能的損失
        • 經(jīng)測試,在不開Pipeline的情況下并闲,大概會損失40%左右的性能
  • Redis Cluster(官方)
    • 官方實現(xiàn)
    • 需要3.0或更高版本
    • 優(yōu)點
      • 無中心的P2P Gossip分散式模式
      • 更少的來回次數(shù)并降低延遲
      • 自動于多個redis節(jié)點進行分片
      • 不需要第三方軟件支持協(xié)調(diào)機制
    • 缺點
      • 依賴于redis 3.0或更高版本
      • 需要時間驗證其穩(wěn)定性
      • 沒有后臺界面
      • 需要智能客戶端
      • redis客戶端必須支持redis cluster架構(gòu)
      • 較Codis有更多的維護升級版本
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末细睡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帝火,更是在濱河造成了極大的恐慌溜徙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犀填,死亡現(xiàn)場離奇詭異蠢壹,居然都是意外死亡,警方通過查閱死者的電腦和手機九巡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門图贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冕广,你說我怎么就攤上這事疏日。” “怎么了撒汉?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵沟优,是天一觀的道長。 經(jīng)常有香客問我睬辐,道長挠阁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任溉委,我火速辦了婚禮鹃唯,結(jié)果婚禮上爱榕,老公的妹妹穿的比我還像新娘瓣喊。我一直安慰自己,他們只是感情好黔酥,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布藻三。 她就那樣靜靜地躺著洪橘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棵帽。 梳的紋絲不亂的頭發(fā)上熄求,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音逗概,去河邊找鬼弟晚。 笑死,一個胖子當著我的面吹牛逾苫,可吹牛的內(nèi)容都是我干的卿城。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼铅搓,長吁一口氣:“原來是場噩夢啊……” “哼瑟押!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起星掰,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤多望,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后氢烘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怀偷,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年威始,在試婚紗的時候發(fā)現(xiàn)自己被綠了枢纠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡黎棠,死狀恐怖晋渺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脓斩,我是刑警寧澤木西,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站随静,受9級特大地震影響八千,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燎猛,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一恋捆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧重绷,春花似錦沸停、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘟滨。三九已至,卻和暖如春能颁,著一層夾襖步出監(jiān)牢的瞬間杂瘸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工伙菊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留败玉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓镜硕,卻偏偏與公主長得像绒怨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谦疾,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.1 資料 南蹂,最好的入門小冊子,可以先于一切文檔之前看念恍,免費六剥。 作者Antirez的博客,Antirez維護的R...
    JefferyLcm閱讀 17,059評論 1 51
  • 本文將從Redis的基本特性入手,通過講述Redis的數(shù)據(jù)結(jié)構(gòu)和主要命令對Redis的基本能力進行直觀介紹瞳氓。之后概...
    kelgon閱讀 61,168評論 23 625
  • Redis雜談 Redis是近年來發(fā)展迅速的內(nèi)存數(shù)據(jù)庫策彤,網(wǎng)上也已經(jīng)有多Redis的文章。但不管是英文還是中文匣摘,多數(shù)...
    迷失于重逢閱讀 1,556評論 0 14
  • 前面是黑暗 后面也是黑暗 那個穿拖鞋的小男孩 從走廊里過來 像燈一樣店诗,將門檻照亮
    詩人鳳凰閱讀 418評論 0 0
  • 看不得圓滿 因為都已經(jīng)支離破碎 看不得歡笑 因為都已經(jīng)欲哭無淚 小時候,笑是一種心情 從滑梯快速滑落 我會笑 撞上...
    蘇瑞旻閱讀 413評論 0 1