Redis 集群搭建
概述
最近想写些小项目---加深对理论知识的理解(比如zk, redis,kafaka之类的),就先从环境搭建开始吧
本文搭建有六台server的redis cluster,其中3 master,3 slave (每个master 一个slave),主要有下面几步。(搭建集群之前希望你懂redis cluster的原理!!
)
- redis 安装
- 集群模式启动六台redis-server,端口分别为(7000-7005)
- 六台server搭建一个集群(用redis-cli 的 --cluster选项)
- 对每台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集群模式需要一些特殊的配置,下为参考
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指派,此时是不能对外提供服务的。
搭建集群(slot指派)
redis集群管理有多种方案(网上看到有用ruby的,没深入),我这里用redis官方提供的redis-cli 命令的--cluster选项。 下面的命令将7000-7005的六台服务器组成一个集群 其中复制因子为1所,以会有3台master,另外3台为slave。 16384个slot会尽可能均匀的指派给3台master, 而3台slave异步的从其master进行复制。
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,然后设置密码
config set masterauth [password]\n
config set requirepass [password]\n
写在最后
- 密码一定要最后设置,否则搭建集群时会报auth错
- 如果需要外网访问,上面 redis-cli --cluster 选项后面主机地址要改成主机外部ip地址(因为Moved错误客户端处理的, 客户端只有拿到外部ip才知道该
move to
哪台机器);这里还有一个坑,如果ip换成外部ip之后,需求开通17000-17005端口(安全组和防火墙都要考虑),因为搭建集群服务器之间通过这些端口通信(监听客户端连接的端口 + 10000) - 自己写了一个脚本,贴在文末,以简化整个启动流程(脚本没怎么写过, 大佬勿喷)
- 待实验:redis-cli --cluster 这种方式搭建的集群是否用的一致性hash算法呐?
参考
集群启动脚本
#! /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'
转载自:https://juejin.cn/post/6844904062295474189