Redis中間件手冊(cè)_第1頁(yè)
Redis中間件手冊(cè)_第2頁(yè)
Redis中間件手冊(cè)_第3頁(yè)
Redis中間件手冊(cè)_第4頁(yè)
Redis中間件手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Redis 組件手冊(cè)組件手冊(cè)Version 0.1| 2016文文 檔檔 變變 更更 記記 錄錄版本編號(hào)版本編號(hào)版本日期版本日期作作 者者說(shuō)說(shuō) 明明目目 錄錄1.引言引言51.1編寫(xiě)目的.51.2讀者對(duì)象.51.3名詞術(shù)語(yǔ).51.4約定和限制.52概述概述.52.1功能列表.62.2集群部署方案.7Redis+Zookeeper 方案.7redis + sentinel (官方).8redis 雙寫(xiě).9Redis+keepalive.93組建部署過(guò)程組建部署過(guò)程.103.1環(huán)境部署概述.103.2創(chuàng)建主機(jī)應(yīng)用屬組和用戶.10系統(tǒng)平臺(tái)準(zhǔn)備.10創(chuàng)建屬組.10創(chuàng)建組下面的用戶.103.3部署步驟及

2、配置.11Redis 的下載.11redis 的安裝.11參數(shù)配置修改.12啟動(dòng)及驗(yàn)證服務(wù).14Slave 主機(jī) redis 安裝配置.15驗(yàn)證 M-S 服務(wù).15部署問(wèn)題匯總.164REDIS+KEEPALIVE 集群部署集群部署.174.1KEEPALIVE介紹.174.2系統(tǒng)平臺(tái)準(zhǔn)備.174.3KEEPLIVE的安裝 .18安裝 openssl 相關(guān)服務(wù):.18下載軟件包.18編譯安裝.18日志重定向.18配置修改.19啟動(dòng) keepalive 服務(wù).21keepalive 的 M-S 服務(wù)驗(yàn)證.21redis 的監(jiān)控切換腳本.23驗(yàn)證 redisM-S 切換.25部署問(wèn)題匯總.285性

3、能調(diào)優(yōu)性能調(diào)優(yōu).296附錄附錄.346.1運(yùn)維常見(jiàn)問(wèn)題.346.2客戶端 API.341引言引言1.1 編寫(xiě)目的編寫(xiě)目的了解 redis 的運(yùn)行機(jī)制。提供了 redis 的部署安裝步驟以及安裝過(guò)程中遇到的一些常見(jiàn)部署問(wèn)題1.2 讀者對(duì)象讀者對(duì)象了解 Redis 的相關(guān)知識(shí)及 redis 安裝部署人員1.3 名詞名詞術(shù)語(yǔ)術(shù)語(yǔ)1.4 約定和限制約定和限制Redis 最擅長(zhǎng)的是結(jié)構(gòu)化數(shù)據(jù)的 cache,計(jì)數(shù)器場(chǎng)景,輕量級(jí)的消息隊(duì)列,Top 排行榜等互聯(lián)網(wǎng)應(yīng)用場(chǎng)景。redis 是目前公認(rèn)的速度最快的基于內(nèi)存的鍵值對(duì)數(shù)據(jù)庫(kù),但 redis 的缺點(diǎn)也非常明顯,僅提供最基本的 hash set, list,

4、 sorted set 等基于數(shù)據(jù)類型,不分表,沒(méi)有 schema,沒(méi)有索引,沒(méi)有外鍵,缺少 int/date 等基本數(shù)據(jù)類型,多條件查詢需要通過(guò)集合內(nèi)聯(lián)(sinter,zinterstore)和連接間接實(shí)現(xiàn),操作不便,開(kāi)發(fā)效率低,可維護(hù)性不佳; 因此一般不將其視為完整的數(shù)據(jù)庫(kù)單獨(dú)使用,很多網(wǎng)站將 redis 作為高速緩存和 session 狀態(tài)存儲(chǔ)層,然后再與其他數(shù)據(jù)庫(kù)搭配使用。2概述概述Redis 是一個(gè)開(kāi)源(BSD 許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件。Redis 支持多種類型的數(shù)據(jù)結(jié)構(gòu),如 字符串(strings), 散列(hashes), 列表(li

5、sts), 集合(sets), 有序集合(sorted sets) , bitmaps(一串連續(xù)的 2 進(jìn)制數(shù)字), hyperloglogs (一個(gè)概率統(tǒng)計(jì)的數(shù)據(jù)結(jié)構(gòu),可以被用來(lái)估計(jì)一個(gè)集合的基數(shù))和 地理空間(geospatial) 索引半徑查詢。Redis 內(nèi)置了 復(fù)制(replication),LUA 腳本(Lua scripting), LRU 驅(qū)動(dòng)事件(LRU eviction),事務(wù)(transactions) 和不同級(jí)別的 磁盤(pán)持久化(persistence), 并通過(guò) Redis 哨兵(Sentinel)和自動(dòng) 分區(qū)(Cluster)提供高可用性(high availabil

6、ity)。2.1 功能列表功能列表Memcache 和 redis 的對(duì)比:MemcacheRedis類型內(nèi)存數(shù)據(jù)庫(kù)內(nèi)存數(shù)據(jù)庫(kù)數(shù)據(jù)類型在定義 value 時(shí)就要固定數(shù)據(jù)類型,數(shù)據(jù)結(jié)構(gòu)單一,(key-value)有字符串,鏈表,集合和有序集合,提供 list,set,hash 等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)存儲(chǔ)方式Memcache 采用鍵值對(duì)存儲(chǔ)方式。它本質(zhì)是一個(gè)大的 hash表Redis 有兩種存儲(chǔ)方式,默認(rèn)是 snapshot 方式,實(shí)現(xiàn)方法是定時(shí)將內(nèi)存的快照(snapshot)持久化到硬盤(pán)另一種是:aof 即 append only mode,在寫(xiě)入內(nèi)存數(shù)據(jù)的同時(shí)將操作命令保存到日志文件內(nèi)存算法采用 L

7、RU 算法修改最大內(nèi)存(新的對(duì)象會(huì)被放在緩存的頂部,當(dāng)緩存達(dá)到了容量極限,會(huì)把底部的對(duì)象踢走)也是采用 LRU 算法,3.0 版本之后采用改進(jìn)版的,即:現(xiàn)在每次隨機(jī)五條記錄出來(lái),插入到一個(gè)長(zhǎng)度為十六的按空閑時(shí)間排序的隊(duì)列里,然后把排頭的那條刪掉,然后再找五條出來(lái),繼續(xù)嘗試插入隊(duì)列虛擬內(nèi)存不支持支持,redis 在 2.0 版本后增加了自己的 VM 特性,突破物理內(nèi)存的限制;可以對(duì) key value 設(shè)置過(guò)期時(shí)間過(guò)期策略支持,在 set 時(shí)就指定,例如set key1 0 0 8,即永不過(guò)期支持,可以通過(guò)例如 expire設(shè)定,例如 expire name 10分布式設(shè)定 memcache 集

8、群,利用magent 做一主多從,或者多主多從自身可以做到一主一從或一主多從存儲(chǔ)數(shù)據(jù)安全服務(wù)一不存在,數(shù)據(jù)就沒(méi)有使用 save 存儲(chǔ) dump.rdb 中災(zāi)難恢復(fù)不支持append only file(aof)用于數(shù)據(jù)恢復(fù)2.2 集群部署方案集群部署方案.1 Redis+ZookeeperRedis+Zookeeper 方案方案使用 ruby 編寫(xiě),通過(guò) NodeManager 檢查 redis 服務(wù)器的狀態(tài),然后更新 zookeeper 中的列表,zookeeper 來(lái)維護(hù)當(dāng)前可用服務(wù)器列表。 zookeeper 中保存三個(gè)列表:master、slaves、unavailab

9、le。 NodeManager 通過(guò)配置文件讀取 node 列表。 每個(gè) node 一個(gè) NodeWatcher 線程,每隔 2 秒鐘檢查一次 node 的狀態(tài)(syncing、available、unavailable)如果 node 連續(xù) max_failures 次失敗的話,設(shè)置為 unavailableNodeWatcher 將 狀態(tài)存放在 NodeManager 的狀態(tài) queue 中NodeManager 的一個(gè)線程定期的檢查 queue 中的狀態(tài),對(duì)狀態(tài)進(jìn)行處理:1.unavailable處理時(shí)判斷 node 是否為 master,如果為 master 則執(zhí)行 promote_n

10、ew_master 將選出新的 master 并對(duì)剩余的 slave 執(zhí)行 slaveof,如果是 slave 的話,則從 slave 列表中移除2.syncing將 node 加入到 unavailable 列表中,并從 slave 列表中移除3.available判斷 node 是否在當(dāng)前的 available 列表中,如果不在列表中,則加入到 available 列表中。可以部署多個(gè) NodeManager,一個(gè)時(shí)間只有一個(gè) NodeManager 處于可用狀態(tài),多個(gè)NodeManager 注冊(cè)到 zookeeper 中。 缺點(diǎn): 1現(xiàn)有代碼需要進(jìn)行改造,以支持通過(guò) zookeeper

11、來(lái)獲取可用的服務(wù)列表(有現(xiàn)成的客戶端)。 2沒(méi)有考慮到多機(jī)房的本地化原則(可以通過(guò)增加客戶端的判斷邏輯來(lái)進(jìn)行)。 3只有一個(gè) active 的 NodeManager 節(jié)點(diǎn),如果該 NodeManager 節(jié)點(diǎn)的網(wǎng)絡(luò)出現(xiàn)問(wèn)題,則會(huì)出現(xiàn)誤操作的現(xiàn)象。 .2 redisredis + + sentinelsentinel (官方官方)通過(guò)多個(gè) Sentinel 一起監(jiān)控 redis 集群,檢測(cè)到 master 不可用時(shí),通過(guò)投票來(lái)決定master 是否需要切換。Sentinel 之間互相檢測(cè)(通過(guò)在共同檢測(cè)的 master 中寫(xiě)入信息來(lái)進(jìn)行),Sentinel 只需要配置 mast

12、er 節(jié)點(diǎn),自動(dòng)通過(guò) master 來(lái)獲取已經(jīng)連接的 slave 列表。當(dāng)其中的某一個(gè) Sentinel 檢測(cè)到 master 宕機(jī)之后,標(biāo)示 master 為 SDOWN,向其他的 Sentinel 發(fā)送 SENTINEL is-master-down-by-addr 命令來(lái)進(jìn)行投票,投票確認(rèn)之后標(biāo)識(shí)為 ODOWN,開(kāi)始選擇一個(gè)新的 master,并且進(jìn)行切換。 缺點(diǎn): 1 沒(méi)有合適的客戶端,需要自己處理各種事件。 2 目前還沒(méi)有 release。 .3 redisredis 雙寫(xiě)雙寫(xiě) 通過(guò)應(yīng)用服務(wù)器在程序側(cè)寫(xiě)入到兩個(gè)節(jié)點(diǎn)來(lái)進(jìn)行高可用. 缺點(diǎn): 1. 數(shù)據(jù)的一致性比較欠缺。(

13、程序側(cè)采用隨機(jī)讀,如果網(wǎng)絡(luò)出現(xiàn)抖動(dòng)延遲,寫(xiě)入數(shù)據(jù)延遲,隨機(jī)導(dǎo)致讀取的數(shù)據(jù)不一致,所以后來(lái)雙寫(xiě)的讀寫(xiě)都在同一個(gè)節(jié)點(diǎn)上而不是隨機(jī)讀,盡量保證數(shù)據(jù)一致性) 2. 當(dāng)其中一臺(tái) master 掛掉之后,后續(xù)添加新的 master 進(jìn)行運(yùn)維成本比較高。(手動(dòng)重做主從復(fù)制) .4 Redis+keepaliveRedis+keepalive基本構(gòu)建與原理 1)Keepalive + VIP : 在 redis master-slave 上部署 keepalived、redis instance 存活檢測(cè)腳本、以及告警通知腳本。2)當(dāng) redis master 失效的時(shí)候,VIP 從 mast

14、er 上漂移到 slave 上,完成 m-s 角色和配置更改。3)客戶端連接 redis 的參數(shù)中 host 設(shè)置的是 VIP,整個(gè)切換過(guò)程對(duì)客戶端透明。3、優(yōu)缺點(diǎn)與適用場(chǎng)景。 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,成本低。缺點(diǎn):整個(gè)集群的最大吞吐量受限于 redis 單實(shí)例的處理能力,除非一個(gè)應(yīng)用使用多套這種 Keepalive+VIP 方案。因而擴(kuò)展能力較差,而且不適合目前單機(jī)部署多個(gè) redis 實(shí)例的部署場(chǎng)景3組建部署過(guò)程組建部署過(guò)程3.1 環(huán)境部署概述環(huán)境部署概述該文檔的應(yīng)用環(huán)境部署過(guò)程主要是基于 linux 而搭建的,整個(gè)過(guò)程主要包括:redis 的常規(guī)部署redis 的 master 和 slave

15、的配置3.2 創(chuàng)建主機(jī)應(yīng)用屬組和用戶創(chuàng)建主機(jī)應(yīng)用屬組和用戶.1 系統(tǒng)平臺(tái)準(zhǔn)備系統(tǒng)平臺(tái)準(zhǔn)備操作系統(tǒng): CentOS release 7主機(jī) IP:.2 創(chuàng)建屬組創(chuàng)建屬組屬組創(chuàng)建的 shell 腳本如下:groupadd aigrp.3 創(chuàng)建組下面的用戶創(chuàng)建組下面的用戶在兩臺(tái)主機(jī)上分別創(chuàng)建用戶的 Shell 腳本如下:useradd -g aigrp -d /veris/redis -s /bin/bash redis;echo redis | passwd -stdin redis;useradd -g aigrp -d /veris/keepa

16、live -s /bin/bash keepalive;echo keepalive | passwd -stdin keepalive;執(zhí)行如下語(yǔ)句:echo 1 /etc/hostsecho 1 redis24 /etc/hosts以上創(chuàng)建屬組,用戶的腳本均在 root 用戶下進(jìn)行操作3.3 部署步驟及配置部署步驟及配置.1 RedisRedis 的下載的下載Redis 官網(wǎng):https:/redis.io/版本下載地址: .2 redisredis 的安裝的安裝以最新的版本:首先檢查是否安裝了 tcl 服務(wù),若沒(méi)有則使用 yun 安裝:yum instal

17、l tcl;(需要 root 權(quán)限)在 Master 和 Slave 主機(jī)上分別安裝 redis:下載安裝 redis: wget tar -; cd ;make PREFIX=/veris/redis install -指定路徑安裝驗(yàn)證是否安裝成功: make test若出現(xiàn)o/ All tests passed without errors!Cleanup: may take some time. OK則說(shuō)明安裝成功。切換到 root 用戶:/src;make install;出現(xiàn)如下,則說(shuō)明安裝成功:-bash-4.2$ make installHint: Its a good idea

18、 to run make test ;) INSTALL install INSTALL install INSTALL install INSTALL installINSTALL install .3 參數(shù)配置修改參數(shù)配置修改修改配置文件參數(shù):/redis.conf(將文件名改為 redis_6379.conf) 設(shè)置參數(shù)(每個(gè)參數(shù)的說(shuō)明可查看章節(jié) 4)如下(標(biāo)紅部分為 master 和 slave 的不同配置的地方):protected-mode yesport 6379tcp-backlog 511timeout 0tcp-keepalive 300daemonize

19、yessupervised nopidfile /veris/redis/redis/redis_6379.pidloglevel noticelogfile databases 16stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump.rdbdir /veris/redis/redis/backupslave-serve-stale-data yesslave-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl

20、-disable-tcp-nodelay noslave-priority 100appendonly noappendfilename appendonly.aofappendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yeslua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-thr

21、eshold 0notify-keyspace-events hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000activerehashing yesclient-output-buffer-limit normal 0 0 0client-ou

22、tput-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yes.4 啟動(dòng)及驗(yàn)證服務(wù)啟動(dòng)及驗(yàn)證服務(wù)啟動(dòng) redis: cd redis-server ./redis_6379.conf連接 redis:cd ./redis-cli -p 6379表示連接成功。.5 SlaveSlave 主機(jī)主機(jī) redisredis 安裝配置安裝配置Slave 主機(jī):安裝同上修改 redis.conf(改

23、名為 redis_6379.conf)配置,大部分相同,只是有些與 Master 主機(jī)不同(不同的配置):bind port 6379slaveof redis229 6379daemonize no使用 redis_6379.conf 配置文件啟動(dòng) redis:cd redis-server ./redis_6379.conf連接 redis:cd ./redis-cli -p 637.6 驗(yàn)證驗(yàn)證 M-SM-S 服務(wù)服務(wù)Master 和 slave 主機(jī)都啟動(dòng)成功之后,可進(jìn)入 redis,執(zhí)行 info 命令,查看鏈接狀態(tài):若出現(xiàn)下面信息,則表示配置啟動(dòng)成功。Master

24、:Slave:在 master 上 set 一個(gè)值,看 slave 能否取得,若可以則表示數(shù)據(jù)同步 OKSlave:.7 部署問(wèn)題匯總部署問(wèn)題匯總執(zhí)行 make test 出現(xiàn)如下報(bào)錯(cuò):cd src & make testYou need tcl 8.5 or newer in order to run the Redis testmake1: * test Error 1原因:系統(tǒng)沒(méi)有安裝 tcl 或者不是最新版本,需要安轉(zhuǎn)下,切到 root,執(zhí)行 yum install tcl。4Redis+keepalive 集群部署集群部署 4.1 Keepalive 介紹介紹

25、keepalived 是以 VRRP 協(xié)議為實(shí)現(xiàn)基礎(chǔ)的,VRRP 全稱 Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。虛擬路由冗余協(xié)議,可以認(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,即將 N 臺(tái)提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè) master 和多個(gè) backup,master 上面有一個(gè)對(duì)外提供服務(wù)的 vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該 vip),master 會(huì)發(fā)組播,當(dāng) backup 收不到 vrrp 包時(shí)就認(rèn)為 master 宕掉了,這時(shí)就需要根據(jù) VRRP 的優(yōu)先級(jí)來(lái)選舉一個(gè) backup 當(dāng) master。這樣的話

26、就可以保證路由器的高可用了。keepalived 主要有三個(gè)模塊,分別是 core、check 和 vrrp。core 模塊為 keepalived 的核心,負(fù)責(zé)主進(jìn)程的啟動(dòng)、維護(hù)以及全局配置文件的加載和解析。check 負(fù)責(zé)健康檢查,包括常見(jiàn)的各種檢查方式。vrrp 模塊是來(lái)實(shí)現(xiàn) VRRP 協(xié)議的。4.2 系統(tǒng)平臺(tái)準(zhǔn)備系統(tǒng)平臺(tái)準(zhǔn)備操作系統(tǒng): CentOS release 7主機(jī) IP:14.3 Keeplive 的安裝的安裝.1 安裝安裝 opensslopenssl 相關(guān)服務(wù):相關(guān)服務(wù):yum -y install openssl yum -y install openss

27、l-devel .2 下載軟件包下載軟件包從官網(wǎng)上下載 keepalive 的軟件包,需要在 Master 和 Slave 服務(wù)器上下載安裝:.3 編譯安裝編譯安裝需要在主備服務(wù)器上編譯安裝./configure -prefix=/veris/keepalivemake & make install.4 日志重定向日志重定向Keepalive 的運(yùn)行日志保存在: /var/log/messages,不方便查看,若要指定自己的日志路徑,則需要如下配置修改:keepalive 的日志是傳給 syslog 的,故要重定向 keepalive 日

28、志首先要更改 syslog 的配置文件,在/etc/rsyslog.conf 文件添加一行vim /etc/rsyslog.conflocal0.* /veris/keepalive/log/keepalived.log創(chuàng)建日志文件存放的目錄mkdir -p /veris/keepalive/log/重啟 rsyslog 服務(wù)service rsyslog restart 重啟完 rsyslog 服務(wù)后,不需要重啟 keepalive 服務(wù),keepalive 的日志會(huì)直接重定向到新的日志文件.5 配置修改配置修改Master 23 主機(jī):主機(jī):修改 keepalived.co

29、nf:Rm /veris/keepalive/etc/keepalived/keepalived.conf;Vi /veris/keepalive/etc/keepalived/keepalived.conf添加如下內(nèi)容:global_defs lvs_id 23vrrp_script chk_redis script /veris/keepalive/scripts/redis_check.sh weight -20 interval 2vrrp_instance VI_1 state MASTER interface eno16777984 virtual_router_id 51 pri

30、ority 200 advert_int 5 track_script chk_redis virtual_ipaddress notify_master /veris/keepalive/scripts/redis_master.sh notify_backup /veris/keepalive/scripts/redis_backup.shSlave 24 主機(jī):主機(jī):修改 keepalived.conf:Rm /veris/keepalive/etc/keepalived/keepalived.conf;Vi /veris/keepalive/etc/keepalived/keepali

31、ved.conf添加如下內(nèi)容:global_defs lvs_id 24vrrp_script chk_redis script /veris/keepalive/scripts/redis_check.sh weight -20 interval 2 vrrp_instance VI_1 state BACKUP interface eno16777984 virtual_router_id 51 priority 190 advert_int 5 #track_script # chk_redis # virtual_ipaddress notify_master /veris/keepa

32、live/scripts/redis_master.sh notify_backup /veris/keepalive/scripts/redis_backup.sh.6 啟動(dòng)啟動(dòng) keepalivekeepalive 服務(wù)服務(wù)啟動(dòng)需要 root 權(quán)限進(jìn)行啟動(dòng)服務(wù),啟動(dòng)腳本如下(master 和 slave 相同):/veris/redis/bin/redis-server /veris/redis/conf/redis_6379.conf &啟動(dòng)成功。.7 keepalivekeepalive 的的 M-SM-S 服務(wù)驗(yàn)證服務(wù)驗(yàn)證啟動(dòng) 24 主機(jī)的 k

33、eepalive 服務(wù),同時(shí)停掉 24 的 keepalive 服務(wù),查看虛擬 vip 已加到24 主機(jī),23 主機(jī)則無(wú):當(dāng) 23,24 的 keepalive 都啟動(dòng)時(shí),則通過(guò)權(quán)重選舉,發(fā)現(xiàn) 23 的權(quán)重 200 大于 24 的190,則虛擬 Ip 又會(huì)漂到 23 主機(jī):.8 redisredis 的監(jiān)控切換腳本的監(jiān)控切換腳本實(shí)現(xiàn)主從切換需要編寫(xiě)三個(gè)腳本(master 和 slave 主機(jī)上腳本只要將 IP 改為對(duì)方即可,其他一樣):redis_check.sh -redis 的服務(wù)是否正常監(jiān)控腳本redis_master.sh -redis 切換成主的的腳本redis_ba

34、ckup.sh -redis 切換成備的腳本mkdir -p /veris/keepalive/scriptscd /veris/keepalive/scripts在該目錄下條件腳本分別如下:redis_check.sh:#!/bin/bashALIVE=/veris/redis/bin/redis-cli PINGif $ALIVE = PONG ; then echo $ALIVE exit 0else echo $ALIVE exit 1firedis_master.sh:#!/bin/bashREDISCLI=/veris/redis/bin/redis-cliLOGFILE=/ver

35、is/keepalive/log/redis-state.logpid=$echo date +%Y-%m-%d:%H:%M:%S|$pid|state:slaver $LOGFILEecho date +%Y-%m-%d:%H:%M:%S|$pid|state:slaver wait 10 sec for data sync from old master $LOGFILEsleep 10 echo date +%Y-%m-%d:%H:%M:%S|$pid|state:slaver data rsync from old mater ok. $LOGFILEecho date +%Y-%m-

36、%d:%H:%M:%S|$pid|state:master Run slaveof no one,close master/slave $LOGFILE$REDISCLI SLAVEOF NO ONE $LOGFILE 2&1echo date +%Y-%m-%d:%H:%M:%S|$pid|state:master wait other slave connect. $LOGFILEredis_backup.sh:#!/bin/bashREDISCLI=/veris/redis/bin/redis-cliLOGFILE=/veris/keepalive/log/redis-state

37、.logpid=$echo date +%Y-%m-%d:%H:%M:%S|$pid|state:master $LOGFILEecho date +%Y-%m-%d:%H:%M:%S|$pid|state:master Being slave state. $LOGFILE 2&1echo date +%Y-%m-%d:%H:%M:%S|$pid|state:master wait 10 sec for data sync from old master $LOGFILEsleep 10echo date +%Y-%m-%d:%H:%M:%S|$pid|state:master da

38、ta rsync from old mater ok. $LOGFILE.9 驗(yàn)證驗(yàn)證 redisM-SredisM-S 切換切換驗(yàn)證思路如下:注:以下為搶占模式驗(yàn)證(搶占模式為:master 主機(jī)重啟啟動(dòng),就會(huì)將自己的master 角色搶回來(lái),非搶占就是啟動(dòng)了,將自己作為 slave,不會(huì)強(qiáng)制將 master 角色搶回來(lái))啟動(dòng) 23,24 兩臺(tái)主機(jī)的 redis,查看各自的 master 和 slave 的狀態(tài)(23 是master,24 為 salve)23:24:圖中可以看到當(dāng)前 23 作為 master 主機(jī),24 作為 slave 主機(jī)。停掉 master 的主機(jī)(2

39、3),查看 slave 的主機(jī)(24)是否可以自動(dòng)變成 master在 23 的主機(jī)上執(zhí)行停 redis 操作:./redis-cli shundown查看 24 主機(jī)的狀態(tài):從圖上可看出,24 的 redis 已從 slave 切換成 master 模式啟 master 的主機(jī)(23),查看 23 是否把 master 搶占過(guò)來(lái),24 自動(dòng)變成 slave啟動(dòng)命令: ./redis-server ./etc/redis_6379.conf &查看 23 和 24 的 redis 狀態(tài):23:24:由上圖可看出,23 的 redis 狀態(tài)為 master,24 的狀態(tài)從 master

40、切換成 slave。.10 部署問(wèn)題匯總部署問(wèn)題匯總安裝 keeplive 報(bào)錯(cuò)如下:1.執(zhí)行 checking openssl/ssl.h presence. nochecking for openssl/ssl.h. noconfigure: error: ! OpenSSL is not properly installed on your system. ! ! Can not include OpenSSL headers files. !解決方法:主機(jī)未安裝 openssl 相關(guān)插件,需安裝:yum -y install openssl yum -y instal

41、l openssl-devel 5性能調(diào)優(yōu)性能調(diào)優(yōu)Redis.conf 的文件具體參數(shù)介紹:Redis.conf 配置文件參數(shù)說(shuō)明示例include引入其它配置文件。比如說(shuō)當(dāng)你有多個(gè) server,而有一些配置項(xiàng)是它們公用的,那么你可以將這些公用的配置項(xiàng)寫(xiě)進(jìn)一個(gè)配置文件 common.conf 里,然后這些 server 再 include 這個(gè)配置文件,這些 server自己的配置項(xiàng)則分別寫(xiě)在自己的配置文件里。include /path/to/common.confloadmodule啟動(dòng)時(shí)加載模塊,如果 server 無(wú)法加載模塊,則此配置會(huì)被忽略。可以使用多個(gè) loadmoduleloa

42、dmodule /path/to/my_module.soBindredis 在 server 上所有有效的網(wǎng)絡(luò)接口上監(jiān)聽(tīng)客戶端連接。如果只想讓它在一個(gè)或多個(gè)網(wǎng)絡(luò)接口上監(jiān)聽(tīng),那你就綁定一個(gè) IP 或者多個(gè) IP。多個(gè) ip 空格分隔即可bind 00 bind :1protected-mode當(dāng)開(kāi)啟后,禁止公網(wǎng)訪問(wèn) redis。它啟用的條件有兩個(gè),第一是沒(méi)有使用 bind,第二是沒(méi)有設(shè)置訪問(wèn)密碼。protected-mode yesPort指定該 redis server 監(jiān)聽(tīng)的端口號(hào)。默認(rèn)是6379,如果指定 0 則不監(jiān)聽(tīng)port

43、6379tcp-backlog此參數(shù)確定了 TCP 連接中已完成隊(duì)列(完成三次握手之后)的長(zhǎng)度, 當(dāng)然此值必須不大于 Linux 系統(tǒng)定義的/proc/sys/net/core/somaxconn 值,默認(rèn)是511,而 Linux 的默認(rèn)參數(shù)值是 128,當(dāng)系統(tǒng)并發(fā)量大并且客戶端速度緩慢的時(shí)候,可以將這二個(gè)參數(shù)一起參考設(shè)定。tcp-backlog 511Timeout當(dāng)客戶端閑置多少秒后關(guān)閉連接,如果設(shè)置為 0表示關(guān)閉該功能。timeout 30tcp-keepalive單位是秒,表示將周期性的使用SO_KEEPALIVE 檢測(cè)客戶端是否還處于健康狀態(tài),tcp-keepalive 300避免服

44、務(wù)器一直阻塞,官方給出的建議值是 300Sdaemonize是否以守護(hù)模式啟動(dòng),默認(rèn)為 no,配置為 yes時(shí)以守護(hù)模式啟動(dòng),這時(shí) redis instance 會(huì)將進(jìn)程號(hào)pid 寫(xiě)入默認(rèn)文件/var/run/redis.pid。daemonize yespidfile配置 pid 文件路徑。當(dāng) redis 以守護(hù)模式啟動(dòng)時(shí),如果沒(méi)有配置 pidfile,pidfile 默認(rèn)值是/var/run/redis.pid 。pidfile /var/run/redis_6379.pidloglevel日志級(jí)別。可選項(xiàng)有:debug(記錄大量日志信息,適用于開(kāi)發(fā)、測(cè)試階段); verbose(較多日志

45、信息); notice(適量日志信息,使用于生產(chǎn)環(huán)境);warning(僅有部分重要、關(guān)鍵信息才會(huì)被記錄)。loglevel noticelogfile日志文件的位置,當(dāng)指定為空字符串時(shí),為標(biāo)準(zhǔn)輸出,如果 redis 已守護(hù)進(jìn)程模式運(yùn)行,那么日志將會(huì)輸出到 /dev/null 。logfile databases設(shè)置數(shù)據(jù)庫(kù)的數(shù)目。默認(rèn)的數(shù)據(jù)庫(kù)是 DB 0 ,可以在每個(gè)連接上使用 select 命令選擇一個(gè)不同的數(shù)據(jù)庫(kù),dbid 是一個(gè)介于 0 到 databases - 1 之間的數(shù)值databases 16Save保存數(shù)據(jù)到磁盤(pán)。格式是:save ,含義是在 seconds 秒之后至少有 c

46、hanges 個(gè) keys 發(fā)生改變則保存一次。save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error默認(rèn)情況下,如果 redis 最后一次的后臺(tái)保存失敗,redis 將停止接受寫(xiě)操作,這樣以一種強(qiáng)硬的方式讓用戶知道數(shù)據(jù)不能正確的持久化到磁盤(pán), 否則就會(huì)沒(méi)人注意到災(zāi)難的發(fā)生。 如果后臺(tái)保存進(jìn)程重新啟動(dòng)工作了,redis 也將自動(dòng)的允許寫(xiě)操作。然而你要是安裝了靠譜的監(jiān)控,你可能不希望 redis 這樣做,那你就改成 no 好了stop-writes-on-bgsave-error nordbcompression是否在 dump

47、 .rdb 數(shù)據(jù)庫(kù)的時(shí)候壓縮字符串,默認(rèn)設(shè)置為 yes。如果你想節(jié)約一些 cpu 資源的話,可以把它設(shè)置為 no,這樣的話數(shù)據(jù)集就可能會(huì)比較大。rdbcompression yesrdbchecksum是否 CRC64 校驗(yàn) rdb 文件,會(huì)有一定的性能損rdbchecksum 失(大概 10%)。yesdbfilenamerdb 文件的名字dbfilename dump.rdbdir數(shù)據(jù)庫(kù)存放目錄。必須是一個(gè)目錄,aof 文件也會(huì)保存到該目錄下。dir ./slaveof設(shè)置本機(jī)為 slave 服務(wù)。格式:slaveof 。設(shè)置 master 服務(wù)的 IP 地址及端口,在 Redis 啟動(dòng)時(shí)

48、,它會(huì)自動(dòng)從 master 進(jìn)行數(shù)據(jù)同步。slaveof 6379masterauth當(dāng) master 服務(wù)設(shè)置了密碼保護(hù)時(shí),slav 服務(wù)連接 master 的密碼。masterauth 123456slave-serve-stale-data當(dāng)一個(gè) slave 與 master 失去聯(lián)系時(shí),或者復(fù)制正在進(jìn)行的時(shí)候,slave 應(yīng)對(duì)請(qǐng)求的行為:1) 如果為 yes(默認(rèn)值) ,slave 仍然會(huì)應(yīng)答客戶端請(qǐng)求,但返回的數(shù)據(jù)可能是過(guò)時(shí),或者數(shù)據(jù)可能是空的在第一次同步的時(shí)候;2) 如果為 no ,在你執(zhí)行除了 info 和 salveof 之外的其他命令時(shí),slave 都

49、將返回一個(gè) SYNC with master in progress 的錯(cuò)誤slave-serve-stale-data yesslave-read-only設(shè)置 slave 是否是只讀的。從 2.6 版起,slave默認(rèn)是只讀的slave-read-only yesrepl-diskless-sync主從數(shù)據(jù)復(fù)制是否使用無(wú)硬盤(pán)復(fù)制功能。repl-diskless-sync norepl-ping-slave-period指定 slave 定期 ping master 的周期,默認(rèn) 10 秒鐘。repl-ping-slave-period 10repl-timeout設(shè)置主庫(kù)批量數(shù)據(jù)傳輸時(shí)間或

50、者 ping 回復(fù)時(shí)間間隔,默認(rèn)值是 60 秒 。repl-timeout 60repl-disable-tcp-nodelay指定向 slave 同步數(shù)據(jù)時(shí),是否禁用 socket 的NO_DELAY 選 項(xiàng)。若配置為“yes”,則禁用NO_DELAY,則 TCP 協(xié)議棧會(huì)合并小包統(tǒng)一發(fā)送,這樣可以減少主從節(jié)點(diǎn)間的包數(shù)量并節(jié)省帶寬,但會(huì)增加數(shù)據(jù)同步到 slave 的時(shí)間。若配置為“no”,表明啟用 NO_DELAY,則 TCP 協(xié)議棧不會(huì)延遲小包的發(fā)送時(shí)機(jī),這樣數(shù)據(jù)同步的延時(shí)會(huì)減少,但需要更大的repl-disable-tcp-nodelay no帶寬。 通常情況下,應(yīng)該配置為 no 以降低

51、同步延時(shí),但在主從節(jié)點(diǎn)間網(wǎng)絡(luò)負(fù)載已經(jīng)很高的情況下,可以配置為 yesrepl-backlog-size設(shè)置主從復(fù)制 backlog 容量大小。這個(gè) backlog 是一個(gè)用來(lái)在 slaves 被斷開(kāi)連接時(shí)存放 slave 數(shù)據(jù)的 buffer,所以當(dāng)一個(gè) slave 想要重新連接,通常不希望全部重新同步,只是部分同步就夠了,僅僅傳遞 slave 在斷開(kāi)連接時(shí)丟失的這部分?jǐn)?shù)據(jù)。這個(gè)值越大,salve 可以斷開(kāi)連接的時(shí)間就越長(zhǎng)。repl-backlog-size 1mbrepl-backlog-ttl配置當(dāng) master 和 slave 失去聯(lián)系多少秒之后,清空 backlog 釋放空間。當(dāng)配置成

52、 0 時(shí),表示永遠(yuǎn)不清空。repl-backlog-ttl 3600slave-priority當(dāng) master 不能正常工作的時(shí)候,Redis Sentinel 會(huì)從 slaves 中選出一個(gè)新的 master,這個(gè)值越小,就越會(huì)被優(yōu)先選中,但是如果是 0 , 那是意味著這個(gè) slave 不可能被選中。 默認(rèn)優(yōu)先級(jí)為 100slave-priority 100requirepass設(shè)置 redis 連接密碼requirepass foobaredmaxclients設(shè)置客戶端最大并發(fā)連接數(shù),默認(rèn)無(wú)限制,Redis 可以同時(shí)打開(kāi)的客戶端連接數(shù)為 Redis 進(jìn)程可以打開(kāi)的最大文件描述符數(shù)-32(re

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論