最近想写些小项目---加深对理论知识的理解(好比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'
复制代码