一、需求
三台128G内存的物理机,目标为在其上构建多套一主两从的redis集群。要求根据业务需要,能够快速创建新集群。三台服务器IP如下:
103.244.233.166(master)
103.244.233.167(slave)
103.244.233.168(slave)
二、安装redis
以下操作步骤均在三台机器上执行。
1. 安装gcc
yum install gcc
2. 建redis用户
useradd redis
su - redis
3. 解压并编译
tar -zxvf redis-3.2.3.tar.gz
cd redis-3.2.3/src/ && make
4. 限制redis用户登录
编辑/etc/passwd文件,将redis用户的登录shell改为/sbin/nologin:
redis:x:8002:8002::/home/redis:/sbin/nologin
三、建立配置文件模板
1. master模板
在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
2. slave模板
在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的模板文件只是多了最后一行。
3. 哨兵模板
在全部三台机器上创建/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、端口。
四、编写创建集群的shell脚本
1. master
在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 root@103.244.233.167 /root/create_redis_cluster.sh
ssh root@103.244.233.168 /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'
2. slave
在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 &
五、其它准备
1. 配置SSH登录无密码验证
在103.244.233.166(master)上用root用户执行:
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@103.244.233.167
ssh-copy-id -i /root/.ssh/id_rsa.pub root@103.244.233.168
2. 禁用requiretty
编辑/etc/sudoers文件,注释以下行,三台都执行:
# Defaults requiretty
3. 将create_redis_cluster.sh改为可执行
chmod 755 /root/create_redis_cluster.sh
三台都执行。
至此所有配置已经完成。每次执行103.244.233.166上的/root/create_redis_cluster.sh文件,就会自动创建一个新的redis集群,一键式秒建。
- 还没有人评论,欢迎说说您的想法!