最近想寫些小項目---加深對理論知識的理解(好比zk, redis,kafaka之類的),就先從環境搭建開始吧 本文搭建有六臺server的redis cluster,其中3 master,3 slave (每一個master 一個slave),主要有下面幾步。(搭建集羣以前但願你懂redis cluster的原理!!
)node
# 下載
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -xzvf redis-5.0.7.tar.gz
mv redis-5.0.7 redis
# 編譯 安裝
cd redis
make //(可能須要先安裝gcc: yum install gcc)
make install
make clean
複製代碼
redis server集羣模式須要一些特殊的配置,下爲參考redis
port 7000 # server端口,6臺server對應7000-7005。
# bind 127.0.0.1 //這一行要註釋,不然沒法遠程鏈接
cluster-enabled yes
cluster-config-file nodes.conf //node.conf文件不用管。
cluster-node-timeout 5000
appendonly yes //aof
daemonize yes
protected-mode no
複製代碼
mkdir redis-cluster
cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005
複製代碼
而後將redis.conf文件拷貝到 7000 到 7005 目錄裏面(每一個redis.conf的只有端口不一樣)算法
對應每個目錄,啓動一個服務器安全
redis-server redis.conf
複製代碼
到這裏咱們就有以集羣模式啓動的6臺(端口7000-7005)redis server,可是每臺服務器尚未進行slot指派,此時是不能對外提供服務的。ruby
redis集羣管理有多種方案(網上看到有用ruby的,沒深刻),我這裏用redis官方提供的redis-cli 命令的--cluster選項。 下面的命令將7000-7005的六臺服務器組成一個集羣 其中複製因子爲1所,以會有3臺master,另外3臺爲slave。 16384個slot會盡量均勻的指派給3臺master, 而3臺slave異步的從其master進行復制。bash
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
複製代碼
到這裏整個集羣就能夠對外提供服務了服務器
經過redis-cli鏈接每一臺server,而後設置密碼app
config set masterauth [password]\n
config set requirepass [password]\n
複製代碼
move to
哪臺機器);這裏還有一個坑,若是ip換成外部ip以後,需求開通17000-17005端口(安全組和防火牆都要考慮),由於搭建集羣服務器之間經過這些端口通訊(監聽客戶端鏈接的端口 + 10000)#! /bin/sh
# step1: start six redis-server in cluster mode.
PREFIX=/usr/local/redis-cluster/
for((PORT=7000;PORT<=7005;PORT++));
do
cd $PREFIX$PORT
pwd
(redis-server redis.conf);
done
# step2: cluster
redis-cli --cluster create 49.235.250.8:7000 49.235.250.8:7001 49.235.250.8:7002 49.235.250.8:7003 49.235.250.8:7004 49.235.250.8:7005 --cluster-replicas 1
# step3: set auth
commands=' config set masterauth qwerty\n config set requirepass qwerty\n auth qwerty\n config rewrite\n exit\n'
for((PORT=7000;PORT<=7005;PORT++));
do
echo -e $commands | redis-cli -p $PORT ;
done
echo 'success'
複製代碼