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'
複製代碼
相關文章
相關標籤/搜索