docker redis4.0 叢集(cluster)搭建
redis叢集對於很多人來說非常熟悉,在前些日子,我也有一位大兄弟也釋出過一篇關於在阿里雲(centOS7)上搭建redis 叢集的文章http://www.cnblogs.com/zhengzeze/p/7325750.html,雖然叢集搭建的文章在網上很多,我比較喜歡這篇文章的地方是他在搭建過程中,指出一些我們會遇到而別人沒有指出的問題。
在這裡,我同樣帶給大家一遍關於阿里雲(centOS7)redis叢集搭建的文章,但是這次搭建有所不同的是,它是在docker上搭建的redis叢集。
準備工具
一、安裝docker(來自官網)
1、安裝所需的軟體包
$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
2、使用以下命令來設定穩定的儲存庫。
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
3、安裝docker ce(docker社群版)
$ sudo yum install docker-ce
4、啟動docker
$ sudo systemctl start docker
二、在docker庫獲取redis映象(截至2017-12-28,最新版為4.0.6)
$ dockerpull redis
三、在docker庫獲取ruby映象
$ docker pull ruby
至此,docker上redis cluster所有工具準備完畢,我們在命令列上輸入docker images,就可以檢視到已經安裝的映象(注:mysql和nginx是無關本教程的)
搭建
一、建立redis容器
1、建立redis配置檔案(redis-cluster.tmpl)
我在路徑/home下建立一個資料夾redis-cluster,在路徑/home/redis-cluster下建立一個檔案redis-cluster.tmpl,並把以下內容複製過去。(注:路徑可自定義,我用的是/home/redis-cluster
port ${PORT} cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 39.10X.XX.XX //自己伺服器IP cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} appendonly yes
通過命令,可檢視
$ cat /home/redis-cluster/redis-cluster.tmpl
2、建立自定義network
$ docker network create redis-net
3、在/home/redis-cluster下生成conf和data目標,並生成配置資訊
$ for port in `seq 7000 7005`; do \ mkdir -p ./${port}/conf \ && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \ && mkdir -p ./${port}/data; \ done
共生成6個資料夾,從7000到7005,每個資料夾下包含data和conf資料夾,同時conf裡面有redis.conf配置檔案
4、建立6個redis容器
$ for port in `seq 7000 7005`; do \ docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \ -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /home/redis-cluster/${port}/data:/data \ --restart always --name redis-${port} --net redis-net \ --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \ done
至此,通過命令docker ps可檢視剛剛生成的6個容器資訊
二、叢集
通過啟動ruby來實現叢集
$ echo yes | docker run -i --rm --net redis-net ruby sh -c '\ gem install redis \ && wget http://download.redis.io/redis-stable/src/redis-trib.rb \ && ruby redis-trib.rb create --replicas 1 \ '"$(for port in `seq 7000 7005`; do \ echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \ done)"
輸入命令後,可以得到下面的資訊說明叢集成功了
注意點
1、注意redis配置資訊的路徑
2、以上的程式碼都是centOS命令列上輸入的
3、阿里雲上要新增安全組,除了7000-7005埠,還要開放17000-17005埠