Redis是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)快毛,和Memcached類(lèi)似漠另, 它的數(shù)據(jù)都是緩存在內(nèi)存中捏雌,區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步笆搓。
我們最近需要使用多臺(tái)機(jī)器性湿,分布式爬取數(shù)據(jù),采用的框架是scrapy-redis满败,所以需要在一臺(tái)服務(wù)器上安裝Redis肤频。
而今天上午,在阿里云服務(wù)器上安裝部署Redis時(shí)算墨,遇到一些問(wèn)題宵荒,沒(méi)有在網(wǎng)上找到解決辦法,記錄一下米同。
安裝
安裝這個(gè)步驟很簡(jiǎn)單骇扇,主要參考Linux下Redis的安裝和部署,下面說(shuō)下步驟面粮。
1少孝、到官網(wǎng)下載壓縮包,然后解壓
#直接復(fù)制下載鏈接熬苍,通過(guò)wget下載
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
#解壓
$ tar zxvf redis-4.0.1.tar.gz
2稍走、進(jìn)入Redis目錄,對(duì)解壓后的文件進(jìn)行編譯
# 進(jìn)入目錄
$ cd redis-4.0.1/
# 編譯
$ make
3柴底、進(jìn)入src目錄婿脸,執(zhí)行make install安裝Redis
$ cd src
# 安裝
$ make install
然后,在終端輸入redis-server
看到如下界面柄驻,說(shuō)明安裝成功狐树。
部署
1、修改配置文件
回退到redis-4.0.1/
目錄鸿脓,修改redis.conf
文件
$ cd ..
# 查看當(dāng)前目錄
$ pwd
/root/redis-4.0.1
$ vim redis.conf
我這里的需求是希望外部機(jī)器能訪問(wèn)抑钟,所以注釋掉bind 127.0.0.1
但是不能隨便一臺(tái)電腦都能連接,所以通過(guò)requirepass
設(shè)置一個(gè)密碼野哭,最好設(shè)置長(zhǎng)一點(diǎn)
這樣在塔,基本的就設(shè)置好了
2、debug模式拨黔,調(diào)試連接
(1)首先蛔溃,我們用debug模式啟動(dòng)服務(wù)器,這樣能更好的查看狀態(tài)和分析問(wèn)題
redis-server redis.conf --loglevel debug
(2)然后,我們另開(kāi)一個(gè)終端贺待,使用ssh登錄到服務(wù)器徽曲,在服務(wù)器上使用客戶(hù)端連接Redis
$ redis-cli
這里,我們也可以在Redis服務(wù)器的終端麸塞,看到有一個(gè)連接到我們服務(wù)器疟位。
(3)之后,我們?cè)趓edis客戶(hù)端進(jìn)行簡(jiǎn)單操作喘垂,使用keys *
查看Redis數(shù)據(jù)庫(kù)存了key值。
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
出現(xiàn)了錯(cuò)誤绍撞,這是因?yàn)槲覀僐edis服務(wù)器設(shè)置了需要密碼正勒。這里,我們可以輸入auth 1234567
來(lái)進(jìn)行獲得權(quán)限傻铣,也可以在登錄Redis服務(wù)器時(shí)章贞,給定密碼,例如:redis-cli -a 1234567
127.0.0.1:6379> auth 1234567
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name liuchungui
OK
127.0.0.1:6379> get name
"liuchungui"
從上可以看出來(lái)非洲,我們將name的liuchungui字段成功的存入Redis鸭限,并且取出來(lái)展示。
(4)其后两踏,我們?cè)囈幌掳芫诒镜仉娔X上連接Redis有沒(méi)有問(wèn)題
$ redis-cli -h 192.168.0.299 -a 1234567
注意: 將所有的192.168.0.299換成你自己的服務(wù)器ip
然后發(fā)現(xiàn),連接不上梦染,出現(xiàn)Operation timed out
192:~ liuchungui$ redis-cli -p 6379 -h 192.168.0.299 -a 1234567
Could not connect to Redis at 192.168.0.299:6379: Operation timed out
Could not connect to Redis at 192.168.0.299: Operation timed out
not connected> keys *
這時(shí)赡麦,我通過(guò)telnet 192.168.0.299 6397
測(cè)試服務(wù)器的6379端口,居然不通帕识。經(jīng)過(guò)各種google之后泛粹,最后找到了解決之法:原來(lái)這是因?yàn)榘⒗镌茮](méi)有開(kāi)放6379端口,只需要到阿里云那里設(shè)置一下安全組就行了肮疗。
阿里云安全組具體添加方法晶姊,請(qǐng)參考添加安全組規(guī)則
當(dāng)這里設(shè)置好了之后,我在本地就能連接服務(wù)器的Redis了伪货。
(5)最后们衙,調(diào)試沒(méi)有問(wèn)題,我們將Redis設(shè)置為后臺(tái)運(yùn)行超歌。
編輯redis.conf砍艾,然后將daemonize
屬性改為yes
運(yùn)行服務(wù)器
$ redis-server redis.conf
6997:C 10 Sep 15:10:17.034 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6997:C 10 Sep 15:10:17.034 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=6997, just started
6997:C 10 Sep 15:10:17.034 # Configuration loaded
到此,我們部署完成巍举。
三脆荷、問(wèn)題與總結(jié)
在這里我碰到最主要的一個(gè)大問(wèn)題是本地電腦無(wú)法連接服務(wù)器上的Redis,然后嘗試了各種失敗的方法
。
- 剛開(kāi)始以為是
redis.conf
這個(gè)配置文件沒(méi)配置好蜓谋,所以嘗試在bind
后面添加本地的ip梦皮,后來(lái)發(fā)現(xiàn)不行。后來(lái)才知道桃焕,bind后面添加ip剑肯,指定是Redis所在服務(wù)器網(wǎng)卡的ip,不是指定某些IP可以訪問(wèn)本機(jī)Redis實(shí)例观堂,這是一個(gè)誤區(qū)让网。這可以參考Redis bind 限制和指定IP訪問(wèn)和What does the bind parameter do in Redis? - 各種搜索通過(guò)防火墻來(lái)開(kāi)啟端口,即通過(guò)
iptables
來(lái)實(shí)現(xiàn)师痕,后來(lái)發(fā)現(xiàn)還是不行溃睹。這在自己建立的服務(wù)器應(yīng)該有作用,可以限制固定的ip來(lái)訪問(wèn)胰坟。而阿里云因篇,是在阿里云網(wǎng)站進(jìn)行配置。 - 當(dāng)出現(xiàn)
MISCONF Redis is configured to save RDB snapshots
錯(cuò)誤時(shí)笔横,可以使用redis-cli登錄竞滓,然后輸入config set stop-writes-on-bgsave-error no
設(shè)置來(lái)解決,參考:MISCONF Redis is configured to save RDB snapshots
補(bǔ)充
- 2017.9.30:最好在redis.conf中吹缔,設(shè)置下logfile商佑,這樣在redis出錯(cuò)誤時(shí),能看到相關(guān)錯(cuò)誤信息厢塘。