使用Docker構建redis叢集(非分散式)
1叢集結構說明
叢集中有三個主節點,三個從節點,一共六個結點。因此要構建六個redis的docker容器。在宿主機中將這六個獨立的redis結點關聯成一個redis叢集。需要用到官方提供的ruby指令碼。
2構建redis基礎映象
本文選擇版本為redis-3.0.7,如果需要其他版本,直接修改wget後面地址中的版本號即可。
程式碼清單2-1 下載&編譯redis原始碼包
123456 | # mkdir –p /usr/docker_root/redis_cluster # cd /usr/docker_root/redis_cluster # wget http: //download.redis.io/releases/redis-3.0.7.tar.gz # tar zxvf redis- 3.0 . 7 .tar.gz # cd redis- 3.0 . 7 # make |
PS: 如果你連 # 也複製了,那你還是別看了……
我們已經在宿主機編譯好了redis原始碼,在src路徑下有我們需要的可執行檔案:redis-cli,redis-server和redis-trib.rb。redis-trib.rb是redis官方提供的ruby指令碼,用來構建redis叢集
修改redis.conf。在redis-3.0.7的根路徑下有redis的配置檔案redis.conf。將其移動到上一級路徑/usr/docker_root/redis_cluster/ 下。
依據程式碼清單2-2,修改redis.conf檔案中的對應引數值。
daemonize : 是否後臺執行,將其設為no,表示前臺執行。
port :redis服務監聽的埠。
logfile : 指定日誌檔案路徑。
appendonly : 是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高資料抗風險能力,但影響效率。
cluster-node-timeout : 叢集結點超時限制。
程式碼清單2-2 需要修改的配置引數
123 | daemonize no port 6379 logfile "/var/log/redis/redis-server.log" |
1234 | appendonly yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 |
下面構建redis基礎映象。以Dockerfile方式構建。
程式碼清單2-3 建立redis基礎映象的Dockerfile
# pwd
/usr/docker_root/redis_cluster
# vim Dockerfile
我們來看看Dockerfile的內容,如程式碼清單2-4所示。
1 | <strong>程式碼清單 2 - 4 Dockerfile<br><br></strong>FROM ubuntu: 14.04 |
12345678910111213141516171819 | ADD redis- 3.0 . 7 .tar.gz / RUN mkdir -p /redis ADD redis.conf /redis/ RUN apt-get -yqq update RUN apt-get install -y gcc make WORKDIR /redis- 3.0 . 7 RUN make RUN mv /redis- 3.0 . 7 /src/redis-server /redis/ WORKDIR / RUN rm -rf /redis- 3.0 . 7 RUN apt-get remove --purge -y gcc make VOLUME [ "/var/log/redis/" ] EXPOSE 6379 <br><br> |
將本地的redis原始碼包複製到映象的根路徑下,ADD命令會在複製過後自動解包。被複制的物件必須處於Dockerfile同一路徑,且ADD後面必須使用相對路徑。
將我們修改後的配置檔案也複製到映象內。
為編譯原始碼包,需要安裝gcc和make,安裝之前先更新apt-get。更新和安裝時間較長。
編譯原始碼包。當然編譯也需要一段時間。
編譯後,容器中只需要可執行檔案redis-server,所以將該檔案移到/redis/路徑下。現在redis-server 和redis.conf都在/redis/下。
將redis-3.0.7路徑整個刪除。
gcc和make也可以解除安裝掉。
指定資料卷,通過這個資料卷可以檢視redis執行的日誌檔案。
公開redis預設埠6379。
因為不會執行這個映象,所有沒有包含ENTRYPOINT和CMD指令。我們基於這個映象構建別的映象。
現在我們構建redis基礎映象
程式碼清單2-5 構建redis基礎映象
# docker build -t redis:3.0.7 .
構建過程與網路頻寬有關,十分鐘左右,構建完成。成功構建映象之後,執行docker images,可以看見zcq/redis_base映象,如圖2-2所示,映象size有290.4MB。
3構建redis結點映象
我們繼續構建redis結點映象,這個映象將會用於生成提供redis服務的docker容器。
程式碼清單3-1 建立redis結點映象的Dockerfile
# mkdir redis_node
# cd redis_node
# vim Dockerfile
Dockerfile如程式碼清單3-2所示。
1 | <br><strong>程式碼清單 3 - 2 redis結點映象Dockerfile</strong> |
1 | FROM redis: 3.0 . 7 |
1 | ENTRYPOINT [ "/redis/redis-server" , "/redis/redis.conf" ] |
構建redis結點映象。
程式碼清單3-3 構建redis結點映象
# docker build -t redis-cluster:3.0.7 .
檢視redis結點映象redis-cluster:3.0.7,如上圖。
1 |
4建立redis結點容器
依次建立六個redis結點容器,如程式碼清單4-1所示。
程式碼清單4-1 建立redis結點
123456 | # docker run -d --name redis01 -p 30001 : 6379 redis-cluster: 3.0 . 7 # docker run -d --name redis02 redis-cluster: 3.0 . 7 # docker run -d --name redis03 redis-cluster: 3.0 . 7 # docker run -d --name redis04 redis-cluster: 3.0 . 7 # docker run -d --name redis05 redis-cluster: 3.0 . 7 # docker run -d --name redis06 redis-cluster: 3.0 . 7
|