初學乍練:一鍵部署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