天天看點

初學乍練:一鍵部署redis叢集初學乍練:一鍵部署redis叢集一、需求二、安裝redis三、建立配置檔案模闆四、編寫建立叢集的shell腳本五、其它準備

初學乍練:一鍵部署redis叢集

目錄

一、需求

二、安裝redis

1. 安裝gcc

2. 建redis使用者

3. 解壓并編譯

4. 限制redis使用者登入

三、建立配置檔案模闆

1. master模闆

2. slave模闆

3. 哨兵模闆

四、編寫建立叢集的shell腳本

1. master

2. slave

五、其它準備

1. 配置SSH登入無密碼驗證

2. 禁用requiretty

3. 将create_redis_cluster.sh改為可執行

        三台128G記憶體的實體機,目标為在其上建構多套一主兩從的redis叢集。要求根據業務需要,能夠快速建立新叢集。三台伺服器IP如下:

103.244.233.166(master)

103.244.233.167(slave)

103.244.233.168(slave)

        以下操作步驟均在三台機器上執行。

yum install gcc           

useradd redis

su - redis

tar -zxvf redis-3.2.3.tar.gz

cd redis-3.2.3/src/ && make

        編輯/etc/passwd檔案,将redis使用者的登入shell改為/sbin/nologin:

redis:x:8002:8002::/home/redis:/sbin/nologin           

        在103.244.233.166上建立/home/redis/redis.conf.templet檔案,内容如下:

rename-command flushAll ""

daemonize yes

port 20001

dir "/home/redis/redisdata1"

pidfile "/home/redis/redisdata1/redis.pid"

logfile "/home/redis/redisdata1/redis.log"

dbfilename "dump.rdb"

save 900 1

appendonly no

appendfilename "appendonly.aof"

appendfsync always

maxmemory 8gb

maxmemory-policy volatile-lru

maxmemory-samples 3

slowlog-log-slower-than 10000

repl-backlog-size 64mb

timeout 0

repl-timeout 240

requirepass "123456"

masterauth "123456"

protected-mode no

        在103.244.233.167、103.244.233.168上建立/home/redis/redis.conf.templet檔案,内容如下:

rename-command flushAll ""

daemonize yes

port 20001

dir "/home/redis/redisdata1"

pidfile "/home/redis/redisdata1/redis.pid"

logfile "/home/redis/redisdata1/redis.log"

dbfilename "dump.rdb"

save 900 1

appendonly no

appendfilename "appendonly.aof"

appendfsync always

maxmemory 8gb

maxmemory-policy volatile-lru

maxmemory-samples 3

slowlog-log-slower-than 10000

repl-backlog-size 64mb

timeout 0

repl-timeout 240

requirepass "123456"

masterauth "123456"

protected-mode no

slaveof 103.244.233.166 20001

        slave的模闆檔案比master的模闆檔案隻是多了最後一行。

        在全部三台機器上建立/home/redis/redis.conf.templet檔案,内容如下:

port 20002

protected-mode no

sentinel monitor redis1 103.244.233.166 20001 2

dir "/home/redis/redisdata1"

sentinel auth-pass redis1 123456

sentinel down-after-milliseconds redis1 5000

sentinel failover-timeout redis1 10000

        說明:

  • 一個叢集最少需要三個單執行個體的redis和三個哨兵執行個體。
  • 第1個叢集名稱為redis1,第2、3...個叢集的叢集名稱依次為redis2、redis3... 。
  • 第1個叢集的資料目錄為/home/redis/redisdata1,第2、3...個叢集的資料目錄依次為/home/redis/redisdata2、/home/redis/redisdata3... 。
  • 第1個叢集redis伺服器端口為20001,哨兵端口為20002;第2、3...個叢集的redis伺服器端口及哨兵端口依次為20003、20004,20005、20006... ,第n個叢集的redis伺服器端口和哨兵端口分别為20000 + 2*n - 1、20000 + 2*n。
  • 需要提供開發人員的資訊是:叢集名稱、密碼和三個哨兵執行個體的IP、端口。

        在103.244.233.166上建立/root/create_redis_cluster.sh檔案,内容如下:

maxdir=`ls -l /home/redis | grep "redisdata" | awk '{print $9}' | sort -k1.10n | tail -n1`

maxnum=`expr ${maxdir:9} + 1`

datadir='/home/redis/redisdata'${maxnum}

clustername='redis'${maxnum}

redis_port=$((20000+maxnum*2-1))

sentinel_port=$((20000+maxnum*2))

mkdir ${datadir}

cp /home/redis/redis.conf.templet ${datadir}/redis.conf

cp /home/redis/sentinel.conf.templet ${datadir}/sentinel.conf

sed -i "s/20001/$redis_port/g" ${datadir}/redis.conf

sed -i "s/redisdata1/redisdata$maxnum/g" ${datadir}/redis.conf

sed -i "s/20002/$sentinel_port/g" ${datadir}/sentinel.conf

sed -i "s/20001/$redis_port/g" ${datadir}/sentinel.conf

sed -i "s/redis1/$clustername/g" ${datadir}/sentinel.conf

sed -i "s/redisdata1/redisdata$maxnum/g" ${datadir}/sentinel.conf

chown -R redis:redis ${datadir}

chmod 775 ${datadir}

chmod 664 ${datadir}/*

sudo -u redis /home/redis/redis-3.2.3/src/redis-server ${datadir}/redis.conf

sudo -u redis /home/redis/redis-3.2.3/src/redis-sentinel ${datadir}/sentinel.conf > ${datadir}/sentinel.log 2>&1 &

ssh [email protected] /root/create_redis_cluster.sh

ssh [email protected] /root/create_redis_cluster.sh

info="叢集名稱:${clustername}  |哨兵:103.244.233.166 ${sentinel_port}, 103.244.233.167 ${sentinel_port}, 103.244.233.168 ${sentinel_port} |密碼:123456"

echo ${info} | sed 's/|/\n    /g'

        在103.244.233.167、103.244.233.168上建立/root/create_redis_cluster.sh檔案,内容如下:

maxdir=`ls -l /home/redis | grep "redisdata" | awk '{print $9}' | sort -k1.10n | tail -n1`

maxnum=`expr ${maxdir:9} + 1`

datadir='/home/redis/redisdata'${maxnum}

clustername='redis'${maxnum}

redis_port=$((20000+maxnum*2-1))

sentinel_port=$((20000+maxnum*2))

mkdir ${datadir}

cp /home/redis/redis.conf.templet ${datadir}/redis.conf

cp /home/redis/sentinel.conf.templet ${datadir}/sentinel.conf

sed -i "s/20001/$redis_port/g" ${datadir}/redis.conf

sed -i "s/redisdata1/redisdata$maxnum/g" ${datadir}/redis.conf

sed -i "s/20002/$sentinel_port/g" ${datadir}/sentinel.conf

sed -i "s/20001/$redis_port/g" ${datadir}/sentinel.conf

sed -i "s/redis1/$clustername/g" ${datadir}/sentinel.conf

sed -i "s/redisdata1/redisdata$maxnum/g" ${datadir}/sentinel.conf

chown -R redis:redis ${datadir}

chmod 775 ${datadir}

chmod 664 ${datadir}/*

sudo -u redis /home/redis/redis-3.2.3/src/redis-server ${datadir}/redis.conf

sudo -u redis /home/redis/redis-3.2.3/src/redis-sentinel ${datadir}/sentinel.conf > ${datadir}/sentinel.log 2>&1 &

        在103.244.233.166(master)上用root使用者執行:

ssh-keygen -t rsa

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

        編輯/etc/sudoers檔案,注釋以下行,三台都執行:

# Defaults    requiretty           

chmod 755 /root/create_redis_cluster.sh           

        三台都執行。

        至此所有配置已經完成。每次執行103.244.233.166上的/root/create_redis_cluster.sh檔案,就會自動建立一個新的redis叢集,一鍵式秒建。

原文位址

https://blog.csdn.net/wzy0623/article/details/81746264

繼續閱讀