本篇是使用 docker 來模擬 redis 的 master slave 叢集,不過容器都是放在同一台機器上執行
-
實作環境與相關套件
- 作業系統:Ubuntu Server 14.04 LTS 64bit
- Docker 版本:1.11.2
- Docker Image: Redis
-
預先準備
- 首先先把含有 redis 的映像檔從 docker hub 上抓下來
-
$ docker pull redis
- 然後檢查本機是否已經安裝好含有 redis 的映像檔
-
$ docker images
-
開始實作
-
由於之後還需要對各個容器進行設定,所以統一執行的指令為
/bin/bash
,並且為每個容器配給一個終端機 -
先將所需要的容器開起來並且建立容器間的關聯
- 首先先用一個終端機啟動一個 redis 容器作為 master
-
$ docker run -it --name redis-master redis /bin/bash
-
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-
OPTIONS
-i, --interactive Keep STDIN open even if not attached
-t, --tty Allocate a pseudo-TTY
--name Assign a name to the container - 然後再用另一個終端機啟動另一個 redis 容器作為 slave 並且設定連結連到 master
-
$ docker run -it --name redis-slave --link redis-master:master redis /bin/bash
-
OPTIONS
--link=[] Add link to another container - 這時開啟另一個終端機查看目前共有那些 container 正在執行中
-
$ docker ps -a
這邊應該會看到
- 並且在 redis-slave 裡面查看 hosts 設定
-
$ cat /etc/hosts
這邊就可以看到有關於 redis-master 的連線設定
-
啟動容器內的 redis server 並且設定 master slave
-
redis 啟動時需要先給 redis.conf 檔給 redis-server,但 redis 的容器裡面並沒有這個設定檔,所以需要先從下載下來,再對設定檔內進行叢集的設定,但是容器裡面通常都沒有安裝編輯器 (為了保持容器的輕量化),所以就先在主機下載下來並且編輯完之後再透過 volume (主機和容器的共享資料夾) 將設定檔傳給容器
- 下載 redis 設定檔
-
$ wget http://download.redis.io/redis-stable/redis.conf
- 先對 redis.conf 進行 redis-master 的設定
-
# bind 127.0.0.1 protected-mode no daemonize yes
- 找到 redis-master 跟主機對應的 volume
-
$ docker inspect --format="{{range .Mounts}}{{.Source}}{{end}}" redis-master
因為 redis 的映像檔裡面已經整合了 volume 的掛載指令,不然一般在啟動容器的時候還需要多加一個參數
-v
來掛載 volume - 將檔案複製到 redis-master 跟主機對應的 volume
-
sudo cp redis.conf $(docker inspect --format="{{range .Mounts}}{{.Source}}{{end}}" redis-master)
然後在 redis-master 內就能看到
-
在 redis-master 啟動 redis-server 並且指定 redis.conf 作為啟動用的設定檔
-
$ redis-server /data/redis.conf
- 再來對 redis.conf 進行 redis-slave 的設定
-
daemonize yes slaveof master 6379
- 將檔案複製到 redis-slave 與主機對應的 volume
-
sudo cp redis.conf $(docker inspect --format="{{range .Mounts}}{{.Source}}{{end}}" redis-slave)
然後在 redis-slave 內就能看到
- 在 redis-slave 啟動 redis-server 並且指定 redis.conf 作為啟動用的設定檔
-
$ redis-server /data/redis.conf
-
如此一來就大功告成囉!!接著只要在 redis-master 新建一個 key 然後就會看到 redis-slave 也有一樣的 key 產生
-
-