Redis--主從複製--主從切換

一:Redis概述:

1:概念:

非關係型數據庫,基於K/V存儲,存儲於內存的數據庫.
    每個數據項都由KEY和VALUE組成。V能夠是字符串,列表,關聯數組(hashs),集合,有序集合。使用key來引用這些值。
    redis是單進程的。多核cpu對redis無用。但能夠運行多實例。

    支持持久化存儲。

    支持主從複製。 主 rw  從 read-only

2:學習存儲的邏輯

1:交互式接口的命令
2:主從如何實現
3:高可用如何實現sentnal(專用於實現redis高可用)node

二:命令

此節命令重要的有五個:string list hash set sorted_setredis

一:安裝

redis包在epl倉庫中。直接使用yum安裝便可算法

clipboard.png

clipboard.png

監聽端口:6379/tcp數據庫

二:鏈接至Redis

1:本機鏈接:

在未給redis配置帳號密碼時。僅支持本地鏈接
redis-cli :便可鏈接至redisvim

clipboard.png

2: 遠程鏈接:

redis-cli -h 172.16........ –p 端口 -a 密碼數組

clipboard.png

三:命令概述

redis 默認有16個數據庫,使用數字標識。
select:切換數據庫安全

clipboard.png

help 查看 幫助命令的具體使用服務器

clipboard.png

四:string

help @string能夠獲取string的全部命令幫助使用信息
設定:SET key value [EX seconds] [PX milliseconds] [NX|XX]網絡

[EX seconds]  過時時間。數據是存於內存中的
  NX   只有不存在時,纔去建立這個值

獲取:GET key
追加:APPEND key value
自增:DECR keyapp

DECRBY key increment

自減:INCR key

INCRBY key increment

多設定:MSET
多獲取: MGET

獲取字段長度:STRLEN key

eg:

設定 獲取 追加的使用

clipboard.png

數值: 設定 自增 自減 自增多少 自減多少

clipboard.png

五:list—列表 數組

clipboard.png

設定: LSET key index value

依據索引去設定值

左增:LPUSH key value [value ...]
右增:PUSH key value [value ...]
右減:RPOP key
左減:LPOP key

左側第幾個位置刪除數值:LREM key count value 此種用的很少

插入:LINSERT key BEFORE|AFTER pivot value
查看:LINDEX key index

clipboard.png

clipboard.png

clipboard.png

六:hash—映射 關聯數組

clipboard.png

設定:HSET key field value

HMSET key field value [field value ...]  一次 給一個key 設定多個值

查看信息HKEYS key
查看值 HVALS key
刪除信息:HDEL key field [field ...]

clipboard.png

clipboard.png

七:set—(無序)集合

定義集合:SADD key member [member ...]
交集:SINTER key [key ...]
並集:兩個集合的並集 SUNION key [key ...]
差集:SDIFF key [key ...]

前面的key有 然後面的key沒有的

刪除集合中的成員:SREM key member [member ...]

隨機彈出集合中的一個元素:SPOP key [count]

查看:SMEMBERS key

交集後存入另外一個集合;SINTERSTORE destination key [key ...]
並集後存入另外一個集合SUNIONSTORE destination key [key ...]

clipboard.png

clipboard.png

clipboard.png

八:sorted_set—有序集合

與無序集合 相比 。多了元素的下標

添加: ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

集合內元素的個數:ZCARD key

指定範圍內元素的個數:ZCOUNT key min max
獲取元素的下標:ZSCORE key member
獲取元素的索引:ZRANK key member

clipboard.png

clipboard.png

列出集合內的元素:ZRANGE key start stop [WITHSCORES]

當向集合內添加元素時,內部默認會給每一個元素增長一個內部的index

clipboard.png

九:pubsub—訂閱

訂閱:PSUBSCRIBE pattern [pattern ...]

訂閱子頻道

發佈信息:PUBLISH channel message
獲取狀態:PUBSUB subcommand [argument [argument ...]]
取消訂閱:PUNSUBSCRIBE [pattern [pattern ...]]

訂閱:SUBSCRIBE channel [channel ...]

clipboard.png

十:transactions—事務

啓動一個事務:MULTI –

運維不多用到此功能

十一:connecton—鏈接

127.0.0.1:6379> help @connection

AUTH password
summary: Authenticate to the server
since: 1.0.0

ECHO message
summary: Echo the given string
since: 1.0.0

PING [message]
summary: Ping the server
since: 1.0.0

QUIT -
summary: Close the connection
since: 1.0.0

SELECT index 切換數據庫
summary: Change the selected database for the current connection
since: 1.0.0

十二:設定數據庫登陸密碼:

1)編輯配置文件:
#vim /etc/redis.conf
加入:requirepass mashuai

clipboard.png

2)重啓redis服務
3)鏈接 redis-cli
不輸入密碼登陸時 是不能夠 輸入命令的

clipboard.png

4)認證

clipboard.png

十二:server

help @server 查看server端的命令

1)主要命令:info

info: server

client
  replication  從節點的相關信息

clipboard.png
info client

clipboard.png

info cpu
info memory

clipboard.png

clipboard.png

2)其餘指令

2)flushdb
清空某個數據庫
3) CLIENT LIST
列出當前登陸的客戶端

clipboard.png

三:配置文件

一:配置文件

核心配置:Limits相關的配置:

網絡配置項     NETWORK
      持久化相關配置  SNAPSHOTTING
配置和使用Redis:
    基本配置項  GENERAL
    網絡配置項
    持久化相關配置  SNAPSHOTTING
    另一個持久化的配置  APPEND ONLY MODE
    主從複製相關的配置  REPLICATION
    安全相關配置
    Limit相關的配置
    SlowLog相關的配置
    INCLUDES
    Advanced配置

[root@h~]#grep -i "^##" /etc/redis.conf

INCLUDES
NETWORK
GENERAL
SNAPSHOTTING
REPLICATION
SECURITY
LIMITS
APPEND ONLY MODE
LUA SCRIPTING
REDIS CLUSTER
SLOW LOG
LATENCY MONITOR
EVENT NOTIFICATION
ADVANCED CONFIG

通用配置項:GENERAL

daemonize, supervised, loglevel, pidfile, logfile, 
databases:設定數據庫數量,默認爲16個,每一個數據庫的名字均爲整數,從0開始編號,默認操做的數據庫爲0;
    切換數據庫的方法:
             SELECT <dbid>

網絡配置項:

bind IP
        port PORT
        protected-mode
        tcp-backlog
        unixsocket 
        timeout:鏈接的空閒超時時長;

bind: 監聽在本機哪一個網卡的ip網絡地址上
bind 172.16.253.96

安全配置:

requirepass <PASSWORD>

Limits相關的配置:

maxclients
    maxmemory <bytes>
    maxmemory-policy noeviction
        淘汰策略:volatile-lru,設置lru時間的鍵
                  volatile-ttl,離淘汰時間最近的鍵淘汰
  allkeys-lru, volatile-random, allkeys-random, noeviction
         maxmemory-samples 5
            淘汰算法運行時的採樣樣本數;

SlowLog相關的配置:

slowlog-log-slower-than 10000
            單位是微秒;
        slowlog-max-len 128
            SlowLog記錄的日誌最大條目

ADVANCED配置:

hash-max-ziplist-entries 512
        hash-max-ziplist-value 64    
        
            設置ziplist的鍵數量最大值,每一個值的最大空間; 
        
        client-output-buffer-limit normal 0 0 0
        client-output-buffer-limit slave 256mb 64mb 60
        client-output-buffer-limit pubsub 32mb 8mb 60
            <hard-limit>
            <soft-limit>  超出 64m後 在60秒內清除
            <soft-limit seconds>

二:配置命令

redis的配置參數 容許 運行時修改

能夠不用更改配置文件

     CONFIG GET
     CONFIG RESETSTAT  重置各類狀態
     CONFIG REWRITE  :利用內存中的設定 重寫至 配置文件
     CONFIG SET

clipboard.png

四:redis持久化

redis是基於內存的存儲
redis的全部數據都是在內存中運行
重啓服務後,內存中的全部數據將沒有。
持久化:將數據保存在磁盤上,但不是基於磁盤提供服務

兩種實現方式:

一:RDB

按事先定製的策略,週期性地將數據從內存同步至磁盤;數據文件默認爲dump.rdb;

/var/lib/redis/dumo.rdb

客戶端顯式使用SAVE或BGSAVE命令來手動啓動快照保存機制;

SAVE:同步,即在主線程中保存快照,此時會阻塞全部客戶端請求;
BGSAVE:異步;後臺同步,主程序能夠繼續向客戶端提供請求

RDB相關的配置:

SNPSHOTTING
*save <seconds> <changes>
        
            save 900 1
            save 300 10
            save 60 10000
            
            表示:三個策略知足其中任意一個均會觸發SNAPSHOTTING操做;900s內至少有一個key有變化,300s內至少有10個key有變化,60s內至少有1W個key發生變化;

stop-writes-on-bgsave-error yes

dump操做出現錯誤時(不能向磁盤中同步數據時),是否禁止新的寫入操做請求;

rdbcompression yes 是否支持壓縮,當cpu有較大空閒時,能夠啓動此選項
rdbchecksum yes 每次同步完以後,是否對RDB文件作檢查

dbfilename dump.rdb:指定rdb文件名
*dir /var/lib/redis:rdb文件的存儲路徑。生產中建議將此文件存儲於其餘固態硬盤上。

二:AOF

記錄每次寫操做至指定的文件尾部實現的持久化;當redis重啓時,可經過從新執行文件中的命令在內存中重建出數據庫;

BGREWRITEAOF:AOF文件重寫;

執行此命令,實現AOF文件重寫(合併多條命令至一條命令,這就叫作AOF文件重寫)
    不會讀取正在使用AOF文件,而是經過將內存中的數據以命令的方式保存至臨時文件中,完成以後替換原來的AOF文件;

clipboard.png

啓用AOF:

1) 配置文件 appendonly yes 
     2)命令行 CONFIG SET appendonly yes    
     此項啓用後會生成 /var/lib/redis/appendonly.aof文件

clipboard.png

appendfsync: 內存中的數據發生改變,什麼時候向磁盤中同步數據

Redis supports three different modes:
                no:redis不執行主動同步操做,而是內核決定什麼時候執行;
                everysec:每秒一次;當redis出現故障時,有可能會丟失部分數據
                always:每語句一次;此種模式,會對系統I/O形成極大的壓力
                        可是,保證了數據的安全性

默認使用everysec模式

no-appendfsync-on-rewrite no

是否在後臺執行aof重寫期間不調用fsync,默認爲no,表示調用;
            保證數據的安全性

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb 重寫知足的條件,方會啓動重寫,重寫是爲了恢復數據更高效

上述兩個條件同時知足時,方會觸發重寫AOF;與上次aof文件大小相比,其增加量超過100%,且大小很多於64MB;

aof-load-truncated yes redis崩潰時,從新恢復redis後,從磁盤中aof文件從新構建數據至內存後,要不要把aof文件刪除。

三:注意

建議不要同時啓用RDB及AOF
RDB與AOF同時啓用:

(1) BGSAVE和BGREWRITEAOF不會同時進行;
        (2) Redis服務器啓動時用持久化的數據文件恢復數據,會優先使用AOF;

五:主從複製

一:理論要點

特色:
        一個Master能夠有多個slave主機,支持鏈式複製;
        Master以非阻塞方式同步數據至slave主機;
        
    配置slave節點:
        redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT>
                與主節點相連
        redis-cli> CONFIG SET masterauth <PASSWORD>
                寫入與主節點相連的密碼

其餘配置參數:
配置參數:

*slaveof  
        *masterauth 
        
        slave-serve-stale-data yes  主節點出問題時,是否使用本機數據提供服務
        slave-read-only yes        從節點是 只讀的
        *repl-diskless-sync no     快照先存於磁盤,再發送給從節點
            no, Disk-backed, Diskless
            
            新的從節點或某較長時間未能與主節點進行同步的從節點從新與主節點通訊,須要作「full synchronization",

此時其同步方式有兩種style:

Disk-backend:主節點新建立快照文件於磁盤中,然後將其發送給從節點;
            Diskless:主節佔新建立快照後直接經過網絡套接字文件發送給從節點;爲了實現並行複製,一般須要

在複製啓動前延遲一個時間段;

repl-diskless-sync-delay 5
        repl-ping-slave-period 10
        
        *repl-timeout 60
        
        repl-disable-tcp-nodelay no
        repl-backlog-size 1mb

*slave-priority 100

複製集羣中,主節點故障時,sentinel應用場景中的主節點選舉時使用的優先級;數字越小優先級越高,但0表示不參與選舉; 
        
        min-slaves-to-write 3:主節點僅容許其可以通訊的從節點數量大於等於此處的值時接受寫操做;
        min-slaves-max-lag 10:從節點延遲時長超出此處指定的時長時,主節點會拒絕寫入操做;

二:實現主從複製

環境: 96 主節點 97 98 從節點

1: 主節點 96主機

配置文件: bind 0.0.0.0

requirepass  mashuai

2 :從節點95

使用命令 與 主節點實現相連
1)鏈接至本機 redis

redis-cli

2)

[root@h~]#redis-cli

127.0.0.1:6379> SLAVEOF 172.16.253.96 6379
OK
127.0.0.1:6379> CONFIG SET masterauth mashuai
OK
127.0.0.1:6379> CONFIG REWRITE
OK

3)測試

get name

"tom lucylili"

clipboard.png

3 97 主機

1)
更改配置文件:實現
vim /etc/redis.conf
slaveof 172.16.253.96
masterauth mashuai

clipboard.png

2) 重啓redis 服務 測試

4 96主節點

查看鏈接的從節點
info replication

clipboard.png

六:sentinel 主從切換:

主要完成三個功能:監控、通知、自動故障轉移
    
        選舉:流言協議、投票協議

一:sentinel配置項

1 配置項:

port 26379
        sentinel monitor <master-name> <ip> <redis-port> <quorum>
        sentinel auth-pass <master-name> <password>
        
            <quorum>表示sentinel集羣的quorum機制,即至少有quorum個sentinel節點同時斷定主節點故障時,才認爲其真的故障。  quorum的數值依據redis集羣中的節點數來決定;
                s_down: subjectively down
                o_down: objectively down
        
        sentinel down-after-milliseconds <master-name> <milliseconds>
            監控到指定的集羣的主節點異常狀態持續多久方纔將標記爲「故障」;
            
        sentinel parallel-syncs <master-name> <numslaves>
            指在failover過程當中,可以被sentinel並行配置的從節點的數量;
            
        sentinel failover-timeout <master-name> <milliseconds>
            sentinel必須在此指定的時長內完成故障轉移操做,不然,將視爲故障轉移操做失敗;故障轉移超時時間
            
        sentinel notification-script <master-name> <script-path>
            通知腳本,此腳本被自動傳遞多個參數;

2 鏈接至 sentinel

鏈接至sentinel端口,查看相關信息

redis-cli -h SENTINEL_HOST -p SENTINEL_PORT 
            redis-cli> 
                SENTINEL masters                   監聽的主節點
                SENTINEL slaves <MASTER_NAME>     從節點信息
                SENTINEL failover <MASTER_NAME>    手動down掉主節點
                SENTINEL get-master-addr-by-name <MASTER_NAME>

二:實現sentinel

主節點故障時,服務切換至從節點

1)95 97 主機 實現認證功能

clipboard.png

2)更改配置文件

95 96 97 主機配置文件更改以下 : /etc/redis-sentinel.conf
bind 0.0.0.0
sentinel monitor mymaster 172.16.253.96 6379 2

監測的主節點

sentinel auth-pass mymaster mashuai

主節點遠程鏈接的密碼

sentinel down-after-milliseconds mymaster 5000

主節點多長時間鏈接不上時標記位DOWN

sentinel failover-timeout mymaster 18000

故障轉移超時時間,默認爲3分鐘,此處改成18秒

3) 啓動 sentinel

systemctl start redis-sentinel

查看日誌:

clipboard.png

4) 鏈接至 sentinel

redis-cli -h 172.16.253.96 -p 26379

sentinel masters 主節點信息
sentinel slave mymaster 從節點信息

clipboard.png

clipboard.png

主動down掉 主節點
sentinel failover mymaster
以後 會自動提高一個從節點 爲主節點

clipboard.png

相關文章
相關標籤/搜索