redis 集群搭建

概述

最近想写些小项目---加深对理论知识的理解(好比zk, redis,kafaka之类的),就先从环境搭建开始吧 本文搭建有六台server的redis cluster,其中3 master,3 slave (每一个master 一个slave),主要有下面几步。(搭建集群以前但愿你懂redis cluster的原理!!node

  1. redis 安装
  2. 集群模式启动六台redis-server,端口分别为(7000-7005)
  3. 六台server搭建一个集群(用redis-cli 的 --cluster选项)
  4. 对每台server进行密码配置

redis下载 & 安装

# 下载
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.conf 文件准备

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
复制代码

准备六台sever的配置文件

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

搭建集群(slot指派)

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
复制代码

写在最后

  1. 密码必定要最后设置,不然搭建集群时会报auth错
  2. 若是须要外网访问,上面 redis-cli --cluster 选项后面主机地址要改为主机外部ip地址(由于Moved错误客户端处理的, 客户端只有拿到外部ip才知道该move to哪台机器);这里还有一个坑,若是ip换成外部ip以后,需求开通17000-17005端口(安全组和防火墙都要考虑),由于搭建集群服务器之间经过这些端口通讯(监听客户端链接的端口 + 10000)
  3. 本身写了一个脚本,贴在文末,以简化整个启动流程(脚本没怎么写过, 大佬勿喷)
  4. 待实验:redis-cli --cluster 这种方式搭建的集群是否用的一致性hash算法呐?

参考

  1. redis 官网集群搭建
  2. Linux下搭建Redis集群、JedisCluster带密码访问

集群启动脚本

#! /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'
复制代码
相关文章
相关标签/搜索