環境:
CentOS 7、已安裝 Redis
需求:
同時啟動兩個不同設定的 Redis,一個使用預設的 6379 PORT,另一個使用 6380 PORT
步驟:
- 原本 Redis 的工作資料夾在 /var/lib/redis,另外建立一個 /var/lib/redis2 當作第二個 Redis 的工作資料夾。
(工作資料夾:Redis 存放 DB 的位置)# mkdir /var/lib/redis2 # chown redis /var/lib/redis2 # chgrp redis /var/lib/redis2
- 原本安裝的 Redis 設定檔在 /etc/redis.conf ,另外複製一個給第二個 Redis 用
# cp /etc/redis.conf /etc/redis2.conf # chown redis /etc/redis2.conf
- 修改第二個 Redis 的設定檔
# vi /etc/redis2.conf
設定 logfile、dir、pidfile、port,以跟第一個 Redis 區別
例如:logfile "/var/log/redis/redis2.log" dir "/var/lib/redis2" pidfile "/var/run/redis/redis2.pid" port 6380
- 原本安裝的 Redis 系統服務設定檔在 /usr/lib/systemd/system/redis.service,另外複製一個給第二個 Redis 用
# cp /usr/lib/systemd/system/redis.service /usr/lib/systemd/system/redis2.service
修改 redis2.service 內容,將關鍵部分,改為第二個 Redis,
例如第一個 redis.service 內容為:[Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd ExecStop=/usr/libexec/redis-shutdown Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target
則第二個 redis2.service 內容改為:[Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/bin/redis-server /etc/redis2.conf --supervised systemd ExecStop=/usr/libexec/redis-shutdown redis2 Type=notify User=redis Group=redis RuntimeDirectory=redis2 RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target
RuntimeDirectory(運行目錄):服務啟動時,會於 /run 底下建立指定的資料夾,服務關閉時,會刪除建立的資料夾。
所以也將 RuntimeDirectory 設定值改成跟第一個 Redis 不一樣。
如果有其他參數,可先了解該參數意義,判斷設定值是否須跟第一個 redis 有區別。 - 原本第一個 redis 有「drop-in」資料夾,所以也照樣複製一個給 redis2 用。(此步驟可視實際需要,決定是否也建立「drop-in」資料夾)
# cp -pr /etc/systemd/system/redis.service.d /etc/systemd/system/redis2.service.d
該資料夾底下有一個 limit.conf 檔案,設定了 LimitNOFILE 參數,用來限制 File descriptor 的最大數量。
(將設定值寫在相對應的「drop-in」資料夾,可避免直接修改 .service 檔案,系統讀了.service 檔案,還會讀取相對應的「drop-in」資料夾)# If you need to change max open file limit # for example, when you change maxclient in configuration # you can change the LimitNOFILE value below # see "man systemd.exec" for information [Service] LimitNOFILE=10240
- 設定開機啟動 redis2
# systemctl enable redis2
- 啟動 redis2
# systemctl start redis2
- 查看執行的狀態
# systemctl status redis.service ● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) Main PID: 40341 (redis-server) CGroup: /system.slice/redis.service └─40341 /usr/bin/redis-server 127.0.0.1:6379
# systemctl status redis2.service ● redis2.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis2.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis2.service.d └─limit.conf Active: active (running) Process: 44005 ExecStop=/usr/libexec/redis-shutdown redis2 (code=exited, status=0/SUCCESS) Main PID: 44039 (redis-server) CGroup: /system.slice/redis2.service └─44039 /usr/bin/redis-server 127.0.0.1:6380
- 查看 Redis 使用的 PORT
第一個 Redis,TCP 6379 PORT 網路連線# lsof -i:6379 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 40341 redis 4u IPv4 10637133 0t0 TCP localhost:6379 (LISTEN)
第二個 Redis,TCP 6380 PORT 網路連線# lsof -i:6380 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 40457 redis 4u IPv4 10637186 0t0 TCP localhost:6380 (LISTEN)
參考:
- https://stackoverflow.com/questions/39352899/running-multiple-instance-of-redis-on-centos
stackexchange.redis - Running multiple instance of Redis on Centos - Stack Overflow - https://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services
configuration - How do I override or configure systemd services? - Ask Ubuntu - http://www.jinbuguo.com/systemd/systemd.exec.html
systemd.exec 中文手册 [金步国] - https://www.freedesktop.org/software/systemd/man/systemd.unit.html
systemd.unit - https://www.freedesktop.org/software/systemd/man/systemd.exec.html
systemd.exec
沒有留言:
張貼留言