1. 程式人生 > >Docker搭建Redis主從伺服器

Docker搭建Redis主從伺服器

一、環境搭建

    2、redis映象下載,可從阿里雲映象庫或Docker Hub映象庫下載,執行命令docker pull redis即可下載,如下圖所示,

    

    下載好redis映象後,就可以用docker run -d -p 6379:6379 --name docker-redis redis啟動一個redis容器,下載搭建一個1主1從的redis服務。

二、Redis Docker容器

    這裡搭建1主1從的redis服務(需要的話也可以搭建多個從伺服器),因此需要啟動兩個redis docker容器,從伺服器連線到主伺服器中。

    1、準備redis容器

docker run -it --name docker-redis-master --mount type=bind,source=/home/leesia/docker/redis/v,target=/leesia redis /bin/bash

docker run -it --name docker-redis-slave1 --mount type=bind,source=/home/leesia/docker/redis/v,target=/leesia --link docker-redis-master:master redis /bin/bash

    命令說明:

    第一條命令是啟動主服務容器,容器名為docker-redis-master,mount 引數掛載了宿主機的/home/leesia/docker/redis/v到容器的/leesia目錄,宿主機的/home/leesia/docker/redis/v目錄必須存在,否則會報錯,可以參考--mount引數配置。/bin/bash是容器啟動時進入偽終端。

    第二條命令是啟動從服務容器,容器名為docker-redis-slave1,同樣掛載了宿主機的/home/leesia/docker/redis/v到容器的/leesia目錄。link引數是連線到其他容器,這裡連線到主服務容器docker-redis-master,並設定別名為master。 /bin/bash是容器啟動時進入偽終端。

    分別執行這兩個命令,可啟動redis容器,並進入容器。在容器中按ctrl+p,再ctrl+q可從容器退出,並保持容器繼續執行,退出後用執行docker exec -it container_id /bin/bash再次進入容器。

    啟動主服務容器:

    

    啟動從服務容器:

    

    注意:這兩條命令執行後只是啟動了兩個容器,容器中的redis服務並沒有啟動。可以通過docker ps檢視啟動的容器資訊。也可以通過docker inspect命令檢視容器的詳情資訊,也可以通過docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_id 命令檢視兩個容器的IP,容器IP在redis的配置檔案中會用到。執行該命令後,可返回主服務容器和從服務容器的IP。

    docker ps檢視容器資訊:


    docker inspect檢視容器IP資訊:

    

這裡可以看到主從服務容器的IP分別為172.17.0.2和172.17.0.4。

    2、配置redis

    redis的配置檔案為redis.conf,但是redis映象中並不包含該檔案,所以需要手工將宿主機的redis.conf檔案配置到redis容器中。可以將該檔案複製到/home/leesia/docker/redis/v目錄裡,還記得啟動redis容器的mount引數嗎,複製後,即可以在容器中的/leesia目錄下看到redis.conf檔案。

    將/home/leesia/docker/redis/v目錄下的redis.conf檔案再複製一份,並將兩檔案重新命名為redis-master.conf和redis-slave.conf,分別表示主服務容器的配置檔案和從服務容器的配置檔案。

    在宿主機中檢視/home/leesia/docker/redis/v:

    

    在容器裡檢視/leesia目錄,看到的內容和宿主機上的一樣的:

    

    由於容器裡沒有vim編輯器,因此可以在宿主機中分別修改這兩個檔案,配置項如下:

redis-master.conf
    port 6379
    bind 172.17.0.2

    daemonize yes

redis-slave.conf
    port 6379
    bind 172.17.0.4
    daemonize yes

    slaveof master 6379

    配置檔案說明:port表示redis的埠,bind表示容器的IP,還記得上面用docker inspect命令檢視docker容器的IP嗎,就在這裡用到了,slaveof master 6379表示從伺服器,master為主服務容器的別名,在從服務容器的啟動命令中連線主服務定義了別名,這裡也可以用主服務容器的IP 172.17.0.2。

    將修改好的兩個檔案分別複製到主從容器的/usr/local/bin目錄下,並命名為redis.conf。

    複製到主服務容器中:

    

    複製到從服務容器中:

    

    其他redis配置檔案

    在容器的/var/lib目錄下建立redis目錄;在/var/log目錄下建立redis目錄,並在新建的redis目錄下建立redis-server.log日誌檔案。主從服務容器中都需要。

    

    3、啟動redis服務

    分別在主從容器的/usr/local/bin目錄下執行redis-server redis.conf命令,啟動redis服務。這樣,redis主從伺服器已經搭建。

    啟動主服務:

    

    啟動從服務:

    

三、驗證

    在主服務容器的/usr/local/bin目錄下執行redis-cli -h 172.17.0.2 -p 6379,連線redis服務,執行set master 'master',存入一個master鍵。

    

    在從服務容器的/usr/local/bin目錄下執行redis-cli -h 172.17.0.4 -p 6379,連線redis服務,執行get master,返回'master',說明主伺服器將資料同步到了從伺服器中。

    

    好了,這樣就搭建了一個1主1從的redis伺服器