文章目錄
安裝 Redis 時遇到的錯誤排除
之前筆記 使用 Yum 安裝 Redis 5 提到最近嘗試撰寫 script 在 CentOS 上建立 Redis 環境,也才發現幾個 yum package 的版本差異與 epel、ius 兩個 yum repository 的相依關係,除此之外過程中還遇到之前人工安裝時沒遇到的問題,覺得值得紀錄一下
基本環境說明
- Azure VM B1s (1 vcpu,1GiB memory)
- CentOS-based 7.7
- Redis 5.0.7
- epel-release.noarch 0:7-11
- ius-release.noarch 0:2-1.el7.ius
錯誤訊息與解決方式
錯誤一
現象:
slave 或是某個 redis instnace service 無法啟動,個人經驗較常出現在 slave 或是第二個啟動的 redis instance 上
錯誤訊息內容
Could not create server TCP listening socket 127.0.0.1:6380: bind: Permission denied
錯誤截圖
解決方式
關閉
SELinux
,但有安全疑慮時則建議使用semanage
調整,以下僅示範關閉SELinux
用法setenforce 0
是針對當前 server 狀態/etc/selinux/config
是避免重開機時 server 狀態被重置
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
錯誤二
現象:
master、slave 服務正常啟動,但 master 執行
redis-cli info replication
顯示無連線的 slave;而 slave 執行redis-cli info replication
則顯示 master 的狀態一直是down
,使用journalctl -xe
檢查 master log 會出現錯誤訊息錯誤訊息內容
Failed opening the RDB file dump.rdb (in server root dir /) for saving: Permission denied Background saving error SYNC failed. BGSAVE child returned an error
錯誤截圖
解決方式
將 redis config 中的
data
(預設為/
) 指向執行 redis service 使用者 (使用 yum 安裝,預設 user 為redis
) 有權限的路徑,權限需為755
錯誤三
現象:
master、slave 服務正常啟動, master 與 slave 間的 sync 狀態也正常,但 sentinel service 未正常啟動,也無法正確執行 failover,使用
journalctl -xe
檢查時出現下列錯誤訊息錯誤訊息內容
Sentinel config file /etc/redis/redis_sentinel_26379.conf is not writable: Permission denied. Exiting...
錯誤截圖
解決方式
grant sentinel config
寫入
的權限給 service 的執行使用者(以redis
為例)setfacl -m u:redis:rw /etc/redis/redis_sentinel_26379.conf
心得
過去安裝都是人工使用有 root 權限帳號進行安裝,幾乎沒遇到權限問題,透過這次使用 script 來進行遠端安裝,立馬讓過去權限不分的問題暴露出來XD
原本以為自己對 Redis 還算熟悉,沒想到過去使用時忽略了不少權限設定上的細節,資安觀念薄弱讓 server 使用過大的權限來執行 Redis 服務,所幸還沒發生資料外漏或是駭客攻擊,不過還是相當慚愧呀,算是在出問題前學到了寶貴一課
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。