如何在Ubuntu 18.04 Server上安裝Redis
介紹
Redis是一個記憶體中的鍵值儲存器,以其靈活性,效能和廣泛的語言支援而聞名。它通常用作資料庫,快取和訊息代理,並支援各種資料結構。
本教程演示如何在Ubuntu 18.04伺服器上從源進行安裝和配置Redis。請注意,通過官方Ubuntu儲存庫下載和安裝Redis可以減少安裝步驟。
準備
一個Ubuntu 18.04伺服器,具有sudo許可權的非root使用者和防火牆。沒有伺服器的使用者可以購買和使用騰訊雲伺服器或者直接在騰訊雲實驗室Ubuntu伺服器上直接上機安裝Redis。
第一步,安裝構建和測試依賴項
為了獲得最新版本的Redis,我們將從原始碼編譯和安裝該軟體。但是,在下載原始碼之前,必須構建依賴項,以便您可以進行軟體編譯。
請從Ubuntu儲存庫安裝build-essential
元資料包。另外,下載可用於測試二進位制檔案的tcl
軟體包。
鍵入以下命令更新本地apt程式包快取並安裝依賴項:
$ sudo apt update
$ sudo apt install build-essential tcl
接下來,您可以開始安裝Redis。
第二步,下載、編譯和安裝Redis
安裝依賴項後,您就可以通過下載,編譯和構建原始碼來安裝Redis。由於您不需要長期保留Redis原始碼(您可以隨時重新下載),因此請將原始碼下載到您的/tmp
目錄中。
首先進入此目錄:
$ cd /tmp
接下來,使用curl下載Redis的最新穩定版本。最新版本始終可以在穩定的下載URL找到:
$ curl -O http://download.redis.io/redis-stable.tar.gz
輸入以下命令解壓縮tarball:
$ tar xzvf redis-stable.tar.gz
然後進入剛剛解壓縮的Redis源目錄結構:
$ cd redis-stable
輸入以下命令編譯Redis二進位制檔案:
$ make
二進位制檔案完成編譯後,執行測試套件以確保所有內容都正確編譯:
$ make test
這通常需要幾分鐘才能完成。測試完成後,輸入以下命令將二進位制檔案安裝到系統上:
$ sudo make install
接下來,您需要建立配置目錄。Redis配置目錄通常位於/etc/
$ sudo mkdir /etc/redis
接下來,複製Redis源存檔附帶的示例Redis配置檔案:
$ sudo cp /tmp/redis-stable/redis.conf /etc/redis
使用首選文字編輯器開啟檔案,對配置進行一些更改:
$ sudo nano /etc/redis/redis.conf
在檔案中,找到supervised
指令。該指令允許您宣告一個init系統來管理Redis作為服務,使您可以更好地控制其操作。該supervised
指令預設設定為no
。由於您執行的是使用systemd
初始化的Ubuntu系統,因此將其更改為systemd
:
/etc/redis/redis.conf
. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .
接下來,找該dir
指令。此選項指定Redis將用於轉儲持久資料的目錄。您需要將其更改為Redis具有寫許可權且普通使用者無法檢視的位置。
使用/var/lib/redis
目錄; 您將在第4步中建立此目錄並調整其許可權:
/etc/redis/redis.conf
. . .
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
. . .
完成後儲存並關閉檔案,接下來,我們將Redis配置為作為服務執行並建立其專用使用者和組。
第三步,建立Redis systemd單元檔案
為了更好地控制Redis的管理方式,您可以建立一個systemd單元檔案,使其可以作為systemd服務。這樣做的好處是可以伺服器啟動時啟動Redis。
建立並開啟/etc/systemd/system/redis.service
檔案:
$ sudo nano /etc/systemd/system/redis.service
進入後,通過新增服務描述並定義網路要求來啟動Unit:
/etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
Service部分用來指定服務行為。出於安全考慮,您不應以root使用者身份執行此服務。您應該使用專用的使用者和組。
要啟動該服務,只需呼叫redis-server
二進位制檔案並將其指向您的配置即可。要停止該服務,請使用Redis
shutdown
命令,您可以使用redis-cli
二進位制檔案執行該命令。此外,由於我們更希望在出現故障的時候Redis可以儘快的恢復,因此我們將Restart
指令設定為always
:
/etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
最後,新增一個Install部分。定義應該附加到服務上的systemd目標(如果它已啟用):
/etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
完成後儲存並關閉檔案。
Redis systemd單元檔案已全部設定。但是,在它可以投入使用之前,您必須建立在該Service部分中引用的專用使用者和組,並授予它們執行所需的許可權。
第四步, 建立Redis使用者,組和目錄
在開始和測試Redis之前,您需要做的最後一件事是建立在前兩個檔案中引用的使用者,組和目錄。
首先建立redis使用者和組。您可以通過輸入以下命令在單個命令中執行此操作
$ sudo adduser --system --group --no-create-home redis
接下來,輸入以下命令建立/var/lib/redis
目錄(redis.conf
在步驟2中建立的檔案中引用):
$ sudo mkdir /var/lib/redis
為此目錄授予redis
使用者和組所有權:
$ sudo chown redis:redis /var/lib/redis
最後,調整許可權,阻止普通使用者訪問此位置:
$ sudo chmod 770 /var/lib/redis
現在我們可以啟動Redis服務並測試其功能。
第五步,啟動和測試Redis
輸入以下命令啟動systemd服務:
$ sudo systemctl start redis
執行以下命令檢查服務有沒有錯誤:
$ sudo systemctl status redis
這將產生類似於以下的輸出:
● redis.service - Redis In-Memory Data Store
Loaded: loaded (/etc/systemd/system/redis.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2018-05-29 17:49:11 UTC; 4s ago
Main PID: 12720 (redis-server)
Tasks: 4 (limit: 4704)
CGroup: /system.slice/redis.service
└─12720 /usr/local/bin/redis-server 127.0.0.1:6379
. . .
要測試您的服務是否正常執行,請使用命令列客戶端連線到Redis伺服器:
$ redis-cli
在隨後的提示中,鍵入以下內容來測試連線:
127.0.0.1:6379> ping
這將返回:
PONG
接下來,通過輸入以下內容檢查是否可以設定鍵:
127.0.0.1:6379> set test "It's working!"
OK
鍵入以下內容檢索test值:
127.0.0.1:6379> get test
您應該能夠檢索儲存的值:
"It's working!"
確認您可以獲取該值後,退出Redis提示符,返回到shell:
127.0.0.1:6379> exit
作為最終測試,我們將檢查Redis是否能夠在資料被停止或重新啟動後保留資料。要執行此操作,請首先重新啟動Redis例項:
$ sudo systemctl restart redis
然後再次與客戶端連線並確認您的測試值仍然可用:
$ redis-cli
127.0.0.1:6379> get test
您的金鑰值仍應該可以訪問:
"It's working!"
完成後再次退出shell:
127.0.0.1:6379> exit
假設所有這些測試都有效並且您希望在伺服器引導時自動啟動Redis,請啟用systemd服務:
$ sudo systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.
至此,您的Redis安裝可完全執行。
結論
在本教程中,您從其原始碼安裝,編譯和構建Redis,將其配置為作為systemd服務執行,並驗證Redis安裝是否正常執行。如果對Redis感興趣的使用者,可以參考騰訊雲開發者手冊Redis中文開發文件。