初学乍练 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 如下:

10.10.10.1(master)
10.10.10.2(slave)
10.10.10.3(slave)

二、安装 Redis

        以下操作步骤均在三台机器上执行。

1. 安装 gcc

yum install gcc

2. 创建 redis 用户

useradd redis
passwd redis
su - redis

3. 解压并编译

tar -zxvf redis-3.2.3.tar.gz
cd redis-3.2.3/src/ && make

4. 限制 redis 用户登录

        用 root 用户编辑 /etc/passwd 文件,将 redis 用户的登录 shell 改为 /sbin/nologin:

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

三、建立配置文件模板

1. master 模板

        在 10.10.10.1 上创建 redis.conf.templet 文件,内容如下:

rename-command flushAll ""
daemonize yes
port 20001
dir "/redisdata1"
pidfile "/redisdata1/redis.pid"
logfile "/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

2. slave 模板

        在 10.10.10.2、10.10.10.3 上创建 redis.conf.templet 文件,内容如下:

rename-command flushAll ""
daemonize yes
port 20001
dir "/redisdata1"
pidfile "/redisdata1/redis.pid"
logfile "/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 10.10.10.1 20001

        slave 的模板文件比 master 的模板文件只是多了最后一行。

3. 哨兵模板

        在全部三台机器上创建 sentinel.conf.templet 文件,内容如下:

port 20002
protected-mode no
dir "/redisdata1"

sentinel monitor redis1 10.10.10.1 20001 2
sentinel auth-pass redis1 123456
sentinel down-after-milliseconds redis1 5000
sentinel failover-timeout redis1 10000

        说明:

  • 一个集群最少需要三个单实例的 redis-server 和三个哨兵实例。
  • 第 1 个集群名称为 redis1,第2、3...个集群的集群名称依次为 redis2、redis3... 。
  • 第 1 个集群的数据目录为 /redisdata1,第2、3...个集群的数据目录依次为 /redisdata2、/redisdata3... 。
  • 第 1 个集群 redis-server 端口为 20001,哨兵端口为 20002;第 2、3...个集群的 redis-server 端口及哨兵端口依次为 20003、20004,20005、20006... ,第 n 个集群的 redis-server 端口和哨兵端口分别为 20000 + 2*n - 1、20000 + 2*n。
  • 需要提供给开发人员的信息是:集群名称、口令和三个哨兵实例的 IP、端口。

四、编写创建集群的shell脚本

1. master

        在 10.10.10.1 上创建 create_redis_cluster.sh 文件,内容如下:

#!/bin/bash

maxdir=`ls -l /home/redis | grep "redisdata" | awk '{print $9}' | sort -k1.10n | tail -n1`
maxnum=`expr ${maxdir:9} + 1`
datadir='/redisdata'${maxnum}
clustername='redis'${maxnum}
redis_port=$((20000+maxnum*2-1))
sentinel_port=$((20000+maxnum*2))

mkdir ${datadir}
cp redis.conf.templet ${datadir}/redis.conf
cp 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 redis-server ${datadir}/redis.conf
sudo -u redis redis-sentinel ${datadir}/sentinel.conf > ${datadir}/sentinel.log 2>&1 &

ssh root@10.10.10.2 create_redis_cluster.sh
ssh root@10.10.10.3 create_redis_cluster.sh

info="集群名称:${clustername}  |哨兵:10.10.10.1 ${sentinel_port}, 10.10.10.2 ${sentinel_port}, 10.10.10.3 ${sentinel_port} |口令:123456"

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

2. slave

        在 10.10.10.2、10.10.10.3 上创建 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='/redisdata'${maxnum}
clustername='redis'${maxnum}
redis_port=$((20000+maxnum*2-1))
sentinel_port=$((20000+maxnum*2))

mkdir ${datadir}
cp redis.conf.templet ${datadir}/redis.conf
cp 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 redis-server ${datadir}/redis.conf
sudo -u redis redis-sentinel ${datadir}/sentinel.conf > ${datadir}/sentinel.log 2>&1 &

五、其它准备

1. 配置SSH登录无密码验证

        在 10.10.10.1(master)上用 root 用户执行:

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.3

2. 禁用 requiretty

        用 root 用户编辑 /etc/sudoers 文件,注释以下行,三台都执行:

# Defaults    requiretty

3. 将 create_redis_cluster.sh 改为可执行

chmod 755 /root/create_redis_cluster.sh

        三台都执行。

        至此所有配置已经完成。每次执行 10.10.10.1 上的 create_redis_cluster.sh 文件,就会自动创建一个新的哨兵模式 Redis 集群,一键式秒建。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值