中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Docker構建分布式Redis集群

發布時間:2021-12-13 14:14:23 來源:億速云 閱讀:147 作者:iii 欄目:大數據

這篇文章主要介紹“怎么用Docker構建分布式Redis集群”,在日常操作中,相信很多人在怎么用Docker構建分布式Redis集群問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Docker構建分布式Redis集群”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!


1. 下載和配置基礎鏡像

我使用的是非常優秀的phusion鏡像作為基礎鏡像,它增加了很多Docker忽略的特性, 比如按序啟動服務等等, 關于這個鏡像的更多信息,可以點擊這里了解。

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

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


下載完成之后, 你可以通過docker images命令看到最新下載的鏡像。

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基礎鏡像創建一個新的容器。

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進新的容器。

現在我們已經部署了容器, 接下來需要得到它的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。

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/sh
set -e
exec /usr/bin/redis-server /etc/redis/redis.conf


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

4. 提交鏡像以便于重用

現在我們的redis容器運行良好, 我們想要把它保存為偽模板,以便在Docker上重復部署。做到這個非常簡單,我們只要使用‘docker commit ...’這個鏡像到我們本地的庫就可以了,像下面這樣:

root@server:/home/sam# docker ps -as
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
e3919192d9e3 phusion/baseimage:0.9.15 "/sbin/my_init --ena 3 hours ago Up 3 hours redis 164.9 MB
root@server:/home/sam# docker commit redis redis-cluster-node
root@server:/home/sam# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
redis-cluster-node latest babfb02edf4d 5 hours ago 561.2 MB



5. 部署新鏡像的3個實例
為了解釋清楚,我會刪除之前創建的容器,以免后面搞暈。首先使用docker stop redis,之后再docker rm redis

root@server:/home/sam# docker stop redis
redis
root@server:/home/sam# docker rm redis
redis
root@server:/home/sam#


很簡單,下面讓我們部署新鏡像的3個實例,我們使用了Docker的端口映射機制,從而我們就可以使用Host服務器的IP訪問這些實例,我們給這些實例關聯的端口如下:

node1 - hostip:7001
node2 - hostip:7002
node3 - hostip:7003

所以我們運行redis-cli -h 192.168.0.2 -p 7001,它將重定向到172.17.0.x -p 6379,例如下面我們部署了三個實例:

root@server:/home/sam# docker run -d --name node1 -p 7001:6379 redis-cluster-node /sbin/my_init
cd1c1f96346bdf9c1cec04333c2e849992ecbc4375dcea6b30902dd9842d8c99
root@server:/home/sam# docker run -d --name node2 -p 7002:6379 redis-cluster-node /sbin/my_init
cd1c1f96346bdf9c1cec04333c2e849992ecbc4375dcea6b30902dd9842d8c99
root@server:/home/sam# docker run -d --name node3 -p 7003:6379 redis-cluster-node /sbin/my_init
cd1c1f96346bdf9c1cec04333c2e849992ecbc4375dcea6b30902dd9842d8c99
root@server:/home/sam#


現在我們可以運行docker ps -as來查看我們運行的三個Redis容器:

root@server:/home/sam# docker ps -as
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
a532b4ac60d9 redis-cluster-node:latest "/sbin/my_init" 5 hours ago Up 5 hours 0.0.0.0:7003->6379/tcp node3 2.267 MB
6c8a87a0a76a redis-cluster-node:latest "/sbin/my_init" 5 hours ago Up 5 hours 0.0.0.0:7002->6379/tcp node2 2.318 MB
39e02633ccf8 redis-cluster-node:latest "/sbin/my_init" 5 hours ago Up 5 hours 0.0.0.0:7001->6379/tcp node1 2.334 MB
root@server:/home/sam#


現在我們看到了3個容器,分別名字為node1、node2和node3,并且有一個專門的端口與Redis 服務的端口相映射。為了測試這樣的映射是正確的,可以在另外一臺機器使用redis-cli登錄到各個Redis服務器上面:

root@server:/home/sam# redis-cli -h 192.168.0.2 -p 7001
redis 192.168.0.16:7001>
root@server:/home/sam# redis-cli -h 192.168.0.2 -p 7002
redis 192.168.0.16:7002>
root@server:/home/sam# redis-cli -h 192.168.0.2 -p 7003
redis 192.168.0.16:7003>
root@server:/home/sam# redis-cli -h 192.168.0.2 -p 7005
Could not connect to Redis at 192.168.0.2:7005: Connection refused
not connected>


正如你看到的, 我們可以使用 hostip+port登錄到對應的Redis服務器上, 當我們嘗試一個不正確的端口時,卻不行。


 譯者增加: 如果這里驗證失敗了的可以登錄進容器中檢查下Redis的服務有沒有起來:  
 
docker exec -t -i redis bash -l
 netstat -anp | grep redis  #看看有沒有網絡監聽,如果沒有執行下面的命令啟動redis服務
 redis-server /etc/redis/redis.conf

6. 配置Redis的從節點

我們有了三個獨立的Redis服務器, 現在我們想把它們連接到一起, 從而我們可以測試這個集群的擴展性,對集群的監控,或者是做其它的事情。

我們把node1作為主節點,把node2和node3配置為它的從節點,這可以簡單的通過修改/etc/redis/redis.conf這個文件來實現。SSH進入node2和node3節點,修改配置文件,然后重啟容器:

root@server:/home/sam# docker inspect node1 | grep IPA
"IPAddress": "172.17.0.46",
root@server:/home/sam# docker inspect node2 | grep IPA
"IPAddress": "172.17.0.47",
root@server:/home/sam# ssh root@172.17.0.47
root@172.17.0.47's password:
Last login: Tue Jan 13 11:47:31 2015 from 172.17.42.1
root@6c8a87a0a76a:~# nano /etc/redis/redis.conf


在這個配置文件中我們只要找到‘salveof’這一行,然后去掉注釋,修改為node1的ip地址,像下面這樣:

root@6c8a87a0a76a:~# cat /etc/redis/redis.conf | grep slaveof
# Master-Slave replication. Use slaveof to make a Redis instance a copy of
slaveof 172.17.0.46 6379
root@6c8a87a0a76a:~#


最后使用命令docker restart node2重啟容器, 現在它就是node1的一個從節點了。為了驗證這個, 使用redis-cli分別登錄到node1和node2, 在node1上運行命令set hello world, 然后在node2上運行get hello,如果配置正確的話會得到下面的結果:

root@server:/home/sam# redis-cli -h 192.168.0.16 -p 7001
redis 192.168.0.12:7001> set hello world
OK
redis 192.168.0.12:7001> exit
root@server:/home/sam# redis-cli -h 192.168.0.16 -p 7002
redis 192.168.0.12:7002> get hello
"world"
redis 192.168.0.12:7002> exit
root@server:/home/sam#

對于node3也做同樣的配置即可。

到此,關于“怎么用Docker構建分布式Redis集群”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

略阳县| 玛纳斯县| 遂川县| 宝兴县| 达孜县| 万宁市| 梨树县| 梁河县| 民和| 沂南县| 安义县| 灵宝市| 财经| 建瓯市| 比如县| 石景山区| 张家界市| 庆阳市| 宁陕县| 阜城县| 土默特右旗| 尉氏县| 嘉祥县| 云阳县| 翁源县| 团风县| 怀远县| 蒙阴县| 昌黎县| 贵德县| 随州市| 通化县| 白水县| 武宁县| 静宁县| 枝江市| 通道| 乐东| 敦化市| 禄丰县| 佳木斯市|