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/bashdocker 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.confport 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伺服器