用 Docker 構建分佈式 Redis 集羣

    本文介紹瞭如何使用Docker搭建Redis集羣,不少讀者都在問Docker能帶來哪些實質性的好處,我想本文就是一個很好的例子。不使用Docker你也能夠搭建Redis集羣,那使用Docker後會有怎麼樣的優點了?我想能夠用兩個詞總結:快速和複用。

redis_docker.png

咱們常常會遇到這樣一個問題:當咱們想進行一個完整的測試的時候,每每缺乏硬件或者其它資源。爲了知足需求,我可能須要三臺服務,或者說三個虛擬機。可是我發現咱們沒有時間來建立它們,而且若是要物理機的話咱們也沒有那麼多資源。這也是爲何我對Docker如此感興趣,由於它能夠解決個人問題。 linux

我想在Ubuntu上建立三個運行Redis的Docker容器,並把它們鏈接起來,而後我就能夠自由的在測試和開發過程當中水平的擴展了, 接下來我就給大家展現我是怎麼作的,以及這樣作的優點。 git

1. 下載和配置基礎鏡像

我使用的是很是優秀的phusion鏡像做爲基礎鏡像,它增長了不少Docker忽略的特性, 好比按序啓動服務等等, 關於這個鏡像的更多信息,能夠點擊這裏瞭解。 github

首先,讓咱們使用Docker來pullphusion鏡像(譯者注:建議使用高版本的Docker下載,低版本會有問題)。 redis

root@server:/home/sam# docker pull phusion/baseimage

下載完成以後, 你能夠經過docker images命令看到最新下載的鏡像。 docker

root@server:/home/sam# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE phusion/baseimage 0.9.15 cf39b476aeec 3 months ago 289.4 MB phusion/baseimage latest cf39b476aeec 3 months ago 289.4 MB

這個鏡像很是好用,你能夠在容器啓動的時候指定特定服務的啓動順序, 在這裏我想給這個鏡像加一個SSH密碼登陸的功能,而不是使用SSH key。由於是在本地運行,因此不用太擔憂安全的問題。咱們須要建立一個phusion的實例, 而後經過SSH key登陸, 而且修改配置,重啓SSH,以後咱們就可使用root登陸了。 安全

首先,用phusion基礎鏡像建立一個新的容器。 ssh

root@server:/home/sam# docker run -d --name redis phusion/baseimage /sbin/my_init --enable-insecure-key

/sbin/my_init是容許phusion在容器啓動的時候啓動你的服務。 enable-insecure-key容許咱們使用‘insecure key‘ssh進新的容器。 curl

如今咱們已經部署了容器, 接下來須要獲得它的IP地址,可使用docker inspect命令。 工具

root@server:/home/sam# docker inspect redis | grep IPA"IPAddress": "172.17.0.46",

接下來,下載’insecure key‘並使用它登陸這個容器。 測試

root@server:/home/sam# curl -o insecure_key -fSL https://github.com/phusion/baseimage-docker/raw/master/image/insecure_key root@server:/home/sam# chmod 600 insecure_key root@server:/home/sam# ssh -i insecure_key root@<IP address>The authenticity of host '172.17.0.52 (172.17.0.52)' can't be established. ECDSA key fingerprint is aa:bb:cc:xx:xx:xx:xx:xx:xx:xx:xx:yy:zz:04:bf:04. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.17.0.52' (ECDSA) to the list of known hosts. root@c36b4bba7dd4:~#

祝賀你, 你如今SSH進入容器了!下面你須要修改SSH,從而咱們再也不須要’insecure key‘了,爲了作到這個,打開’/etc/ssh/sshd_config‘找到下面這一行, 並去掉註釋。

PermitRootLogin yes

保存文件, 咱們再設置root的密碼。

root@c36b4bba7dd4:~# passwd Enter new UNIX password:Retype new UNIX password: passwd: password updated successfully root@c36b4bba7dd4:~#

以上咱們作了一些準備工做,接下來咱們將在這個容器中安裝Redis。

CentOS 6/7系列安裝Docker http://www.linuxidc.com/Linux/2014-07/104768.htm

Docker的搭建Gitlab CI 全過程詳解 http://www.linuxidc.com/Linux/2013-12/93537.htm

Docker安裝應用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

在Ubuntu Trusty 14.04 (LTS) (64-bit)安裝Docker http://www.linuxidc.com/Linux/2014-10/108184.htm

Docker安裝應用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04安裝Docker  http://www.linuxidc.com/linux/2014-08/105656.htm

阿里雲CentOS 6.5 模板上安裝 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm

2 安裝Redis

如今咱們已經有了配置好的鏡像了,接下來咱們須要去下載和安裝Redis,你能夠從這裏下載到你想要的Redis,在咱們的例子中用到的是3.0.0 RC1,下載地址是:https://github.com/antirez/red ... ar.gz

注意:你還須要安裝wget、gcc、make以及一些其它的工具。可使用下面的命令:

apt-get update  #更新系統 apt-get upgrade  #升級系統 apt-get install wget  gcc make#安裝wget、gcc、make

首先,咱們下載Redis 3.0.0 RC1。

root@e3919192d9e3:/home# wget https://github.com/antirez/redis/archive/3.0.0-rc1.tar.gz

解壓這個包並make。

root@e3919192d9e3:/home# tar -zxvf 3.0.0-rc1.tar.gz root@e3919192d9e3:/home# cd redis-3.0.0-rc1/ root@e3919192d9e3:/home/redis-3.0.0-rc1# make

最後, 咱們把編譯好的代碼中的幾個可執行命令移動到/usr/bin/下面

root@e3919192d9e3:/home/redis-3.0.0-rc1# cd src root@e3919192d9e3:/home/redis-3.0.0-rc1/src# mv redis-cli redis-server redis-sentinel /usr/bin/ root@e3919192d9e3:/home/redis-3.0.0-rc1/src# cd .. root@e3919192d9e3:/home/redis-3.0.0-rc1# mkdir -p /etc/redis/ root@e3919192d9e3:/home/redis-3.0.0-rc1# cp redis.conf /etc/redis/redis.conf

如今打開文件/etc/redis/redis.conf, 找到‘daemonize no’改成‘daemonize yes‘,而後啓動它!

root@e3919192d9e3:/home/redis-3.0.0-rc1/src# redis-server /etc/redis/redis.conf root@e3919192d9e3:/home/redis-3.0.0-rc1/src#

好了, Redis如今已經安裝好了,而且在容器裏面運行了,使用的配置文件是/etc/redis/redis.conf。

3. 讓Docker在啓動容器的時候啓動Redis服務

如今咱們的容器正在運行Redis,而且也可使用SSH登陸了,咱們還須要讓它在容器啓動的時候自動啓動Redis服務,使用phusion基礎鏡像來實現這點至關的容易。首先,由於咱們啓動容器的時候使用了/sibn/my_init, 它會去運行任何咱們放在/etc/service/*下面的程序。因此,對於咱們來講,咱們只要去建立一個目錄以及在這個目錄裏面再建立一個叫run的文件,像下面這樣:

root@e3919192d9e3:/etc/service# cd /etc/service root@e3919192d9e3:/etc/service# mkdir redis root@e3919192d9e3:/etc/service# cd redis root@e3919192d9e3:/etc/service/redis# nano run

在這個run文件裏面,咱們加入下面的內容:

#!/bin/shset -e exec /usr/bin/redis-server /etc/redis/redis.conf

最後,記得給run文件添加可執行權限。

相關文章
相關標籤/搜索