由於NoSQL資料庫蔚為風潮,對此本文將說明基於Redis 7.2.4所開發的NoSQL資料庫Valkey,介紹其主要的組態設定檔、運作方式、相關功能,以及如何執行指令來啟動Valkey,並安裝phpRedisAdmin,即可採用直覺化的網頁介面來輕鬆管理。
隨著大數據時代的來臨,傳統的關聯式資料庫(例如MySQL、MSSQL)漸漸地無法滿足大量資訊且高速運算的需求,也因此NoSQL(Not Only SQL)資料庫應運而生。其中Redis(Remote Dictionary Server)即是一個開源碼社群中頗富盛名的高性能鍵值(Key-Value Store)NoSQL資料庫。
所謂的鍵值(Key-Value Store)資料庫,指的是其儲存資料的方式僅於單純地指定鍵值(key)=>儲存值(value)。例如設定Redis=good,使用者僅須指定鍵值為Redis,即可快速取得good儲存值,如此可顯著地提升資料庫運作的效率。除此之外,Redis運作於記憶體中,藉由記憶體快速存取的特性,更可大大地提升執行效率。也因此,近年來有許多著名的企業也採用Redis來當作業務運作的資料庫。惟因近年來Redis修正其版權,使其開源授權的模式具有爭議。也因此而有Valkey(https://valkey.io/)資料庫軟體的產生。
Valkey是基於Redis 7.2.4所開發的完全開源碼替代品,其功能與運作方式與Redis完全相容,過去Redis使用者可無縫接軌至此資料庫。
在本文中,除了說明Valkey安裝及簡單的用法外。並介紹phpRedisAdmin(https://github.com/erikdubbelboer/phpRedisAdmin)軟體,讓使用者能更方便地利用網頁管理介面來管理Valkey資料庫,本次使用的作業系統為CentOS 9。
什麼是Valkey
Valkey是一個以開源碼版權發布、使用記憶體為儲存空間的高性能鍵值資料庫。接著將安裝Valkey,在此使用的版本為8.0.2,並利用原始碼進行編譯,請先確認系統上是否已經安裝make和gcc。
連結至官方網站下戴Valkey的原始碼後,即可利用make或make BUILD_TLS=yes(支援SSL/TLS加密傳輸)進行編譯,本例使用make(不支援SSL/TLS)。在編譯成功後,利用「mke install」指令進行安裝。Valkey所提供的主要程式功能,包括:
‧valkey-server:主要服務的伺服器程式,用來提供Valkey的相關功能。
‧valkey-cli:Valkey的用戶端程式,使用者可利用此程式以命令介面的方式與Valkey伺服器進行互動並下達相關指令。
‧valkey-check-rdb:用於檢查和修復Valkey RDB(Redis Database)檔案。
‧valkey-check-aof:用於檢查和修復AOF(Append Only File)檔案。
Valkey主要組態檔說明
簡單說明Valkey所提供的程式用途後,接下來介紹其使用的主要組態檔(檔名為valkey.conf),其設定架構說明如下:
基本的網路設定
在此區段中主要是設定網路的相關基本設定,常用的組態設定如下所述:
設定Valkey伺服器運作時所使用的通訊埠,預設為6379。
設定Valkey伺服器運作時所使用的IP,例如設定127.0.0.1,將限制只能在本機端存取。
設定是否啟用保護模式,設定為yes表示不允許未經授權的連線,一般預設組態為yes。
設定與Valkey伺服器連線逾時的時間,如果設定為0,表示無逾時。
設定 Valkey伺服器是否要採用常駐程式的模式運作。
記憶體管理
在此區段中主要是設定Valkey伺服器使用記憶體的設定,一般而言,使用者僅須設定maxmemory組態,設定Valkey伺服器能使用記憶體的最大限制即可,例如設定maxmemory 1GB,表示最大僅能使用系統上1GB的記憶體來運作。
磁碟儲存方式
Valkey主要是利用記憶體來儲存資料,由於此種方式只要系統關機就會遺失相關資料,因此也利用磁碟來永久儲存資料。
依照其儲存方式可分為RDB(Redis DataBase)和AOF(Append Only File),使用者可同時啟用兩種的儲存方式,也可不使用(不在磁碟上儲存任何資料),相關說明如下所述:
設定定期地將資料寫入磁碟。其優點為可控制寫入頻率,相較於以AOF方式儲存,其檔案更小。一般而言,RDB通常用來做為備份還原的備份檔。但其缺點為,當服務異常停止時,有可能因為來不及寫入磁碟,而造成部分資料遺失。
使用者可利用dbfilename組態來設定RDB檔案的名稱以及利用dir組態來設定RDB檔案所在的目錄位置,相關設定如下:
dbfilename "檔案名稱" dir "RDB檔案所在目錄"
並且,可利用dbcompression組態來設定是否要壓縮RDB檔案,以節省磁碟空間。另外,寫入頻率的設定格式為save ,意思是每隔一段時間且有鍵值改變就備份資料。例如save 900 1,表示900秒內若有超過1個鍵值被改變,就進行備份。
如果不使用,可設定成「save “”」,使用者可利用valkey-check-rdb程式來檢查並修復RDB檔案的錯誤。
與RDB不同的是,此模式會記錄每個操作成功的記錄,並將其新增於現有日誌檔的最後面,也因此相較於RDB,其資料比較完整,檔案也較大。使用者可利用appendonly [yes或no]組態來設定是否啟用AOF儲存,並利用appendfilename組態來設定AOF檔案的名稱以及利用appenddirname組態來設定AOF檔案所在的目錄位置,相關設定如下:
appendfilename "檔案名稱" appenddirname "AOF檔案所在目錄"
另為了提供適當的記錄效率,可使用appendfsync組態來設定其儲存策略,語法如下:
appendfsync [always或everysec或no]
‧always:當操作成功後,便會將相關記錄立即寫入日誌檔案中,此種方式幾乎可確保所有資料均有記錄,但如果發生同時間大量的操作,即有可能導致磁碟寫入衝突而造系統的錯誤。
‧everysec:設定每秒寫入日誌檔,此種方式可有效降低使用always設定,而發生大量操作時,可能發生磁碟寫入衝突而造成的系統錯誤機率,並可有效地控管資料遺失的問題(最多不會超過1秒)。
‧no:由作業系統來決定何時將其寫入日誌檔案。一般來說,不會超過寫入間隔,不會超過30秒。
使用者可利用valkey-check-rdb程式來檢查,並且修復AOF檔案的錯誤。
安全性設定
在此區段中主要是設定Valkey伺服器身分驗證的設定機制,可用於保護資料存取,主要利用requirepass組態來設定密碼驗證,若設定此組態,來源端須輸入正確的密碼方可進行連線。
另外,也可利用aclfile組態來設定可存取的來源列表,設定如下所示:
requirepass “密碼資訊” aclfile “ACL檔案名稱”
日誌與監控
在此區段中主要是設定Valkey日誌記錄的相關組態,常用的組態如下:
設定要記錄的Log等級,等級如下說明:
‧debug:記錄所有的資訊,此為最詳盡的Log記錄。
‧verbose:詳盡地記錄相關Log,其資訊完整度僅次於Debug模式。
‧notice:記錄應注意之資訊
‧warning:記錄警告等級的相關資訊
‧nothing:不記錄任何資訊
設定儲存日誌記錄的檔案名稱。
設定緩慢查詢的時間門檻,查詢的時間若超過此設定即視為緩慢查詢。例如設定slowlog-log-slower-than 1000000,代表超過1秒的查詢動作均視為緩慢查詢。
設定記錄緩慢查詢的記錄筆數,例如設定slowlog-max-len 128,表示會記錄128筆慢查詢。
透過命令列方式啟動Valkey
介紹過Valkey相關的程式與組態設定後,接下來即可啟動Valkey伺服器,執行如下指令:
valkey-server /etc/valkey.conf #根據valkey.conf組態來啟動Valkey
在啟動成功之後,就能夠使用valkey-cli來對伺服器下達指令,圖1所示為基本指令測試,相關說明如下:
圖1 基本指令測試。
‧ping:測試伺服器的回應,如果運作正常,伺服器將會回應PONG。
‧set test[鍵值] bar:設定鍵值(在此名稱為test),其內容值為bar。
‧get test[鍵值]:取得鍵值(test)的內容,應會取得bar。
‧info:顯示目前Valkey伺服器相關的運作相關資訊,例如伺服器運作資訊、記憶體使用等等資訊。
安裝phpRedisAdmin方便網頁介面操作
由於以命令列方式來管理Valkey資料庫並不好用,因此推薦安裝phpRedisAdmin(官方網址https://github.com/erikdubbelboer/phpRedisAdmin)軟體,讓使用者能透過網頁介面進行管理,更直覺地操作Valkey資料庫。
phpRedisAdmin是一個使用PHP語言所撰寫的的網頁介面管理工具,使用者可透過瀏覽器輕鬆管理Redis/Valkey資料庫,其主要功能如下所述:
查看及搜尋資料庫內容
使用者可以透過網頁介面來查看資料庫內的所有資料,並利用鍵值的方式快速查詢資料庫內相關的資料。
除了可查看資料庫資料外,還能夠查看伺服器的相關資訊,包括伺服器運作狀態、記憶體使用情況以及客戶端連接數等系統資訊。
執行命令
使用者可以透過網頁介面來執行相關命令,對資料庫內容進行新增、刪除、修改等命令。
資料備份與匯出
提供資料庫匯出功能,方便使用者進行備份,並且提供匯入從備份資料恢復。
接下來安裝phpRedisAdmin,首先要讓PHP程式語言支援Redis/Valkey功能,因此必須先安裝支援Redis/Valkey資料庫的模組。
在此將採用PhpRedis(官方網址是https://github.com/phpredis/),讓PHP能直接操作Redis/Valkey資料庫。相關安裝指令如下:
#取得最新版的PhpRedis原始碼 git clone https://github.com/ phpredis/phpredis.git phpize #產生相關PHP組態以便後續編譯 configure --enable-redis #設定啟用支援Redis功能 make #進行編譯,在成功之後即會產生 redis.so模組檔案 make install #安裝相關模組(redis. so)檔案至系統上
接下來, 必須設定PHP的組態檔,也就是php.ini檔案,使其能夠載入redis.so:
extension=/usr/local/lib/php/ extensions/no-debug-zts-20210902/ redis.so
在安裝PhpRedis之後,接著到phpRedisAdmin官方網站取得最新版本的phpRedisAdmin,而後直接將程式複製到網站目錄即可,如圖2所示。
圖2 使用phpRedisAdmin。
要注意的是,phpRedisAdmin並沒有帳密認證的功能,因此建議利用限制來源連線以及設定HTTP網頁認證的方式來適當地控管此網頁介面,以避免潛在的資安風險。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>