2022年7月10日 星期日

Linux 同時執行兩個 Redis

環境:
CentOS 7、已安裝 Redis


需求:
同時啟動兩個不同設定的 Redis,一個使用預設的 6379 PORT,另一個使用 6380 PORT


步驟:

  1. 原本 Redis 的工作資料夾在 /var/lib/redis,另外建立一個 /var/lib/redis2 當作第二個 Redis 的工作資料夾。
    (工作資料夾:Redis 存放 DB 的位置)
    # mkdir /var/lib/redis2
    # chown redis /var/lib/redis2
    # chgrp redis /var/lib/redis2
  2. 原本安裝的 Redis 設定檔在 /etc/redis.conf ,另外複製一個給第二個 Redis 用
    # cp /etc/redis.conf /etc/redis2.conf
    # chown redis /etc/redis2.conf
  3. 修改第二個 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
  4. 原本安裝的 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 有區別。
  5. 原本第一個 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
  6. 設定開機啟動 redis2
    # systemctl enable redis2
  7. 啟動 redis2
    # systemctl start redis2
  8. 查看執行的狀態
    # 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
  9. 查看 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)





參考:

沒有留言:

張貼留言