redis config,Redis安裝及HA(High Availability)配置

 2023-11-22 阅读 23 评论 0

摘要:Redis是一種內存數據庫,以KEY-VALUE(即鍵值對)的形式存儲數據。這篇文章主要介紹的是Redis安裝及配置,所以不對Redis本身作詳細介紹了。 ? 下載: http://redis.io/download (另外,Redis作者有一博客:http://antirez.com/latest/0,有

Redis是一種內存數據庫,以KEY-VALUE(即鍵值對)的形式存儲數據。這篇文章主要介紹的是Redis安裝及配置,所以不對Redis本身作詳細介紹了。

?

http://redis.io/download (另外,Redis作者有一博客:http://antirez.com/latest/0,有興趣的可以關注)

?

以redis-2.8.19.tar.gz為例,解壓放在某目錄下,這里選擇/usr/local目錄。

?

編譯

進入/usr/local/redis-2.8.19,執行

#make

如遇到gcc: Command not found錯誤,表示需要安裝gcc

#yum install gcc

如遇到zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory錯誤,則要進入deps目錄,執行:

#make hiredis

#make jemalloc

#make linenoise

#make lua

然后再回到上級目錄執行make即可。

?

啟動

make成功之后,會在src目錄生成redis-server等可執行文件,執行:

#src/redis-server

#src/redis-server &//加&為了可以讓鼠標退出Redis的命令行

?

#ps aux|grep redis//查看是否有相應的進程

#telnet localhost 6379//登錄Redis

或更常用的

#src/redis-cli//進入Redis交互命令行

這里介紹三個最基本的Redis命令(1)keys *,顯示數據庫中所有的key;(2)set foo bar,即為鍵foo設置值bar;(3)get foo,查看鍵foo的值。

?

關閉

#src/redis-cli shutdown

?

日志

不管對什么應用程序,日志對于診斷工作有很大的作用,所以這里提一下Redis的日志。我們發現按上面的方法啟動Redis,我們在系統中找不到Redis的日志,即便我們配置了/usr/local/redis-2.8.19/redis.conf文件中的logfile,指向/var/log/redis.log,仍然找不到日志。

同時,通過src/redis-cli CONFIG GET *來查看配置項,則提示命令參數錯誤ERR Wrong number of arguments for CONFIG GET

其實,造成這些問題的原因是在啟動Redis時沒有明確指定配置文件,可以這樣指定:

#src/redis-server redis.conf &//可以使用絕對路徑來指定redis.conf

這樣就一切正常了,日志文件也生成了。

?

HA配置

我們先介紹Redis怎么配置Replication,這里準備了兩臺機器:redisha1(153.65.171.99),這個作master;redisha2(153.65.170.156),這個我們用來作slave,修改它的redis.conf:

slaveof 153.65.171.99 6379

表示我是redisha1的slave。這樣設置之后,如果我們在redisha1中通過set foo bar2,在redisha2中通過get foo就可以取到值bar2。Redis自動完成了同步。

需要注意的是,配置完Replication后,作為slave的redisha2則進入read-only模式,也就是我們不能在redisha2上使用set命令寫入數據了,set操作會收到(error) READONLY You can't write against a read only slave。

?

配置完Replication并不意味著就萬事大吉了,試想如果redisha1宕機了,則基本意味著這套Redis系統失效了,因為這個時候剩下的redisha2是一個read-only的slave。

我們期望能有一個監控程序可以自動完成Redis Replication系統中的角色切換,而這正是我們要介紹的Redis Sentinel的設計目的(sentinel本身有哨兵、放哨之意)。同樣,也準備了兩臺機器,都用來運行Sentinel:redisha3(153.65.171.168),redisha4(153.65.170.145),并且和前面的redisha1和redisha2一樣,都部署了redis-2.8.19,所不同的是,我們并不改動redis.conf進行,要改動的是sentinel.conf:

sentinel monitor test 153.65.171.99 ??6379 ??2

這一行配置表示我要監控153.65.171.99這臺機器上的Redis實例,并為它取了一個昵稱叫test(默認是mymaster,如果你改動了,注意要搜索這個文件中所有mymaster的地方,并都改過來)。6379則是99上Redis監聽的端口。

最后的2這個數字則是quorum數,對于一個Redis主從系統,可以有多個sentinel同時監控它,以避免當唯一的一個sentinel宕掉后影響redis系統的運行。多個sentinel之間采用一種“投票”機制,即某一sentinel發現某一redis實例宕掉了,它不能直接將它移出系統,而要詢問所有的sentinel,只有當n個sentinel都投票同意說這個redis實例確實宕掉了,才能將它移出。而這個這n值正是由quorum參數指定。

?

啟動Sentinel

在redisha3與redisha4上,進入/usr/local/redis-2.8.19目錄,執行:

#src/redis-server sentinel.conf --sentinel

?

測試

關閉redisha1上的redis實例,則在sentinel的窗口中:

+switch-master test 153.65.171.99 6379 153.65.170.156 6379

也就是說原來的redisha1(153.65.171.99)的master角色現在由于redisha2(153.65.170.156)來承擔了。

同時你會發現看到redisha2的redis.conf中的slaveof配置被移除了,因為它現在是master了。

?

啟動redisha1上的redis,redisha1會被以slave的身份加入到redis系統中,可以在sentinel的窗口中看到:

+convert-to-slave slave 153.65.171.99:6379 153.65.171.99 6379 @ test 153.65.170.156 6379

而redisha1中的redis.conf文件的最后一行會被自動添加上slaveof配置,指向現在的master即redisha2。

需要注意的是,這個自動發現新redis實例并把它作為slave加入到系統中的功能,在2.6版本中是沒有的。

?

關閉redisha4上的sentinel,redisha3上可以看到:

+sdown sentinel 153.65.170.145:26379 153.65.170.145 26379 @ test 153.65.170.156 6379

這個時候我關閉redisha2(它現在是master),sentinel無法進行自動角色切換了,這跟quorum的配置有關,因為它現在沒有辦法收到2個投票,這個上面介紹過了。

?

SDOWN, ODOWN:

在sentinel的輸出中,經常可以看到這兩個狀態:

Subjectively Down condition (SDOWN) 主觀覺得某redis實例已停止,即當前sentinel判斷某redis實例已經停止。

Objectively Down condition (ODOWN) 客戶判斷某redis實例已停止,quorum參數指定的數量n,當當前有n個sentinel投票此redis已經宕了,則進入ODOWN狀態。

?

其它幾個命令:

#redis-cli -h {IP} -p 26379 info Sentinel//查看sentinel的信息

#redis-cli -h {IP} -p 6379 info Replication//查看replication的信息

#redis-cli?-h {IP}?-p 26379 sentinel slaves test//查看所有slave的信息。test是sentinel.conf中配置的master的昵稱

?


送書了,送書了,關注公眾號“程序員雜書館”,送出O'Reilly《Spark快速大數據分析》紙質書(亦有一批PDF分享)! —— 2018年12月

轉載于:https://www.cnblogs.com/morvenhuang/p/4184262.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/184963.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息