首頁 > 軟體

docker-compose設定並部署redis服務的實現

2022-04-03 13:00:19

前言

在使用docker部署redis的時候,遇到很多坑,在此記錄下遇到的問題

一、安裝docker和docker-compose

### 安裝docker
curl -sSL https://get.daocloud.io/docker | sh

### 啟動docker
systemctl start docker

### 安裝docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
### 將可執行許可權應用於二進位制檔案
chmod +x /usr/local/bin/docker-compose

二、下載redis版本,本文中選擇的是6.2.6版本

下載網址:download.redis.io/releases/

三、解壓並複製redis.conf組態檔到伺服器上,本文是放在/etc/redis/redis.conf

四、修改redis.conf組態檔

### 指定redis繫結的主機地址,註釋掉這部分,使redis可以外部存取
    # bind 127.0.0.1 -::1
### 指定存取redis伺服器端的埠
    port 6379
### 指定使用者端連線redis伺服器時,當閒置的時間為多少(如300)秒時關閉連線(0表示禁用)
    timeout 0
### 預設情況下,Redis不作為守護行程執行。如果需要,請使用「yes」
    daemonize no
### 給redis設定密碼,不需要密碼的話則註釋
    # requirepass foobared
### 開啟redis持久化,預設為no
    appendonly yes
### 防止出現遠端主機強迫關閉了一個現有的連線的錯誤 預設是300
    tcp-keepalive 300
### 指定redis資料庫的紀錄檔級別,常用的紀錄檔級別有debug、verbose、notice、warning,不進行修改的情況下預設的是notice
    loglevel notice
### 指定redis資料庫多長時間內(s)有多少次(c)更新操作時就把快取中的資料同步到本地庫,比如:save 600 2,指的是10分鐘內有2次更新操作,就同步到本地庫
    save <s><c>
### 指定redis的最大記憶體。由於Redis 在啟動時會把資料載入到記憶體中,當資料達到最大記憶體時,redis會自動把已經到期和即將到期的key值。所以可以根據需求調整自己的所需的最大記憶體
    maxmemory 500mb
### 設定了maxmemory的選項,redis記憶體使用達到上限。可以通過設定LRU演演算法來刪除部分key,釋放空間。預設是按照過期時間的,如果set時候沒有加上過期時間就會導致資料寫滿maxmemory
    maxmemory-policy volatile-lru
### 設定外部網路連線redis服務,開啟需設定bind ip或者設定存取密碼,關閉此時外部網路可以直接存取
    # protected-mode yes

五、設定docker-compose.yml

my_redis:
    image: redis:6.2.6-alpine # 指定服務映象,最好是與之前下載的redis組態檔保持一致
    container_name: my_redis # 容器名稱
    restart: on-failure # 重啟方式
    environment:
      - TZ=Asia/Shanghai # 設定時區
    volumes: # 設定資料卷
      - /root/redis/data:/data
      - /etc/redis/redis.conf:/etc/redis/redis.conf
    ports: # 對映埠
      - "6380:6379"
    sysctls: # 設定容器中的核心引數
      - net.core.somaxconn=1024
   #  - vm.overcommit_memory=1
    command: /bin/sh -c "echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
            && redis-server /etc/redis/redis.conf --appendonly yes" # 指定組態檔並開啟持久化
    privileged: true # 使用該引數,container內的root擁有真正的root許可權。否則,container內的root只是外部的一個普通使用者許可權
複製程式碼

六、啟動容器

### 啟動容器
docker-compose up -d

### 進入容器
docker exec -it my_redis /bin/sh
### 進入使用者端
redis-cli
### 如果設定了密碼,需要輸入auth 密碼
auth 你的密碼
### 檢視已儲存的key
keys *
### 檢視redis資訊
info

七、redis啟動後遇到的問題

  • Warning: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128

意思:無法強制執行TCP backlog設定511,因為/proc/sys/net/core/somaxconn被設定為較低的值128

echo "net.core.somaxconn=551" > /etc/sysctl.conf
sysctl net.core.somaxconn=551
  • Warning:overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect

意思: overcommit_memory的值設定為0! 在記憶體不足的情況下,後臺儲存可能會失敗。 要解決此問題,請將“vm.overcommit_memory = 1”新增到/etc/sysctl.conf,然後重新啟動或執行命令“sysctl vm.overcommit_memory = 1”以使其生效

echo 1 > /proc/sys/vm/overcommit_memory
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
  • redis報錯:RDB: 0 MB of memory used by copy-on-write

由於我redis.conf組態檔,設定了save,將快取中的資料同步到本地庫,所以我暫時的解決方法是取消儲存,設定save ""

八、分享個redis視覺化工具

redis-insight下載連結:https://redis.com/redis-enterprise/redis-insight/

到此這篇關於docker-compose設定並部署redis服務的實現的文章就介紹到這了,更多相關docker-compose設定部署redis服務內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com