Linux下安裝和部署Redis

Redis是一個高性能的key-value數據庫,和Memcached類似, 它的數據都是緩存在內存中,區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。

我們最近需要使用多臺機器,分布式爬取數據,采用的框架是scrapy-redis,所以需要在一臺服務器上安裝Redis。

而今天上午,在阿里云服務器上安裝部署Redis時,遇到一些問題,沒有在網上找到解決辦法,記錄一下。

安裝

安裝這個步驟很簡單,主要參考Linux下Redis的安裝和部署,下面說下步驟。

1、到官網下載壓縮包,然后解壓

#直接復制下載鏈接,通過wget下載
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
#解壓
$ tar zxvf redis-4.0.1.tar.gz

2、進入Redis目錄,對解壓后的文件進行編譯

# 進入目錄
$ cd redis-4.0.1/
# 編譯
$ make

3、進入src目錄,執行make install安裝Redis

$ cd src
# 安裝
$ make install

然后,在終端輸入redis-server看到如下界面,說明安裝成功。

部署

1、修改配置文件

回退到redis-4.0.1/目錄,修改redis.conf文件

$ cd ..
# 查看當前目錄
$ pwd
/root/redis-4.0.1
$ vim redis.conf

我這里的需求是希望外部機器能訪問,所以注釋掉bind 127.0.0.1

但是不能隨便一臺電腦都能連接,所以通過requirepass設置一個密碼,最好設置長一點

這樣,基本的就設置好了

2、debug模式,調試連接

(1)首先,我們用debug模式啟動服務器,這樣能更好的查看狀態和分析問題

redis-server redis.conf  --loglevel debug

(2)然后,我們另開一個終端,使用ssh登錄到服務器,在服務器上使用客戶端連接Redis

$ redis-cli

這里,我們也可以在Redis服務器的終端,看到有一個連接到我們服務器。

(3)之后,我們在redis客戶端進行簡單操作,使用keys *查看Redis數據庫存了key值。

127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.

出現了錯誤,這是因為我們Redis服務器設置了需要密碼。這里,我們可以輸入auth 1234567來進行獲得權限,也可以在登錄Redis服務器時,給定密碼,例如: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"

從上可以看出來,我們將name的liuchungui字段成功的存入Redis,并且取出來展示。

(4)其后,我們試一下,在本地電腦上連接Redis有沒有問題

$ redis-cli -h 192.168.0.299 -a 1234567

注意: 將所有的192.168.0.299換成你自己的服務器ip

然后發現,連接不上,出現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 *

這時,我通過telnet 192.168.0.299 6397測試服務器的6379端口,居然不通。經過各種google之后,最后找到了解決之法:原來這是因為阿里云沒有開放6379端口,只需要到阿里云那里設置一下安全組就行了

阿里云安全組具體添加方法,請參考添加安全組規則

當這里設置好了之后,我在本地就能連接服務器的Redis了。

(5)最后,調試沒有問題,我們將Redis設置為后臺運行。

編輯redis.conf,然后將daemonize屬性改為yes

運行服務器

$ 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

到此,我們部署完成。

三、問題與總結

在這里我碰到最主要的一個大問題是本地電腦無法連接服務器上的Redis,然后嘗試了各種失敗的方法

  • 剛開始以為是redis.conf這個配置文件沒配置好,所以嘗試在bind后面添加本地的ip,后來發現不行。后來才知道,bind后面添加ip,指定是Redis所在服務器網卡的ip,不是指定某些IP可以訪問本機Redis實例,這是一個誤區。這可以參考Redis bind 限制和指定IP訪問What does the bind parameter do in Redis?
  • 各種搜索通過防火墻來開啟端口,即通過iptables來實現,后來發現還是不行。這在自己建立的服務器應該有作用,可以限制固定的ip來訪問。而阿里云,是在阿里云網站進行配置。
  • 當出現MISCONF Redis is configured to save RDB snapshots錯誤時,可以使用redis-cli登錄,然后輸入config set stop-writes-on-bgsave-error no設置來解決,參考:MISCONF Redis is configured to save RDB snapshots

補充

  • 2017.9.30:最好在redis.conf中,設置下logfile,這樣在redis出錯誤時,能看到相關錯誤信息。

參考

Linux下Redis的安裝和部署

redis進階:密碼設置、訪問權限控制等安全設置

阿里云開放端口權限

Redis bind 限制和指定IP訪問

What does the bind parameter do in Redis?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,947評論 18 139
  • 前言 Redis是一個高性能的key-value數據庫,現時越來越多企業與應用使用Redis作為緩存服務器。樓主是...
    liangzzz閱讀 4,318評論 9 152
  • NOSQL類型簡介鍵值對:會使用到一個哈希表,表中有一個特定的鍵和一個指針指向特定的數據,如redis,volde...
    MicoCube閱讀 4,060評論 2 27
  • 馬到成功01524程雨煙 毛遂名成因自薦,志在青云上九天。翔宇折桂探蟾宮,飛龍得水覆乾坤。 怕被一人傷 2015-...
    馬到成功程雨煙閱讀 3,380評論 159 116
  • 鏈接:click here~~ Problem Description 很多學校流行一種比較的習慣。老師們很喜歡詢...
    db5bacb5a79c閱讀 328評論 0 1