前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初学乍练redis:一键部署集群

初学乍练redis:一键部署集群

作者头像
用户1148526
发布2019-05-25 19:42:14
5050
发布2019-05-25 19:42:14
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1433157

目录

一、需求

二、安装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改为可执行


一、需求

代码语言:txt
复制
    三台128G内存的物理机,目标为在其上构建多套一主两从的redis集群。要求根据业务需要,能够快速创建新集群。三台服务器IP如下:
代码语言:javascript
复制
103.244.233.166(master)
103.244.233.167(slave)
103.244.233.168(slave)

二、安装redis

代码语言:txt
复制
    以下操作步骤均在三台机器上执行。

1. 安装gcc

代码语言:javascript
复制
yum install gcc

2. 建redis用户

代码语言:javascript
复制
useradd redis
su - redis

3. 解压并编译

代码语言:javascript
复制
tar -zxvf redis-3.2.3.tar.gz
cd redis-3.2.3/src/ && make

4. 限制redis用户登录

代码语言:txt
复制
    编辑/etc/passwd文件,将redis用户的登录shell改为/sbin/nologin:
代码语言:javascript
复制
redis:x:8002:8002::/home/redis:/sbin/nologin

三、建立配置文件模板

1. master模板

代码语言:txt
复制
    在103.244.233.166上创建/home/redis/redis.conf.templet文件,内容如下:
代码语言:javascript
复制
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模板

代码语言:txt
复制
    在103.244.233.167、103.244.233.168上创建/home/redis/redis.conf.templet文件,内容如下:
代码语言:javascript
复制
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
代码语言:txt
复制
    slave的模板文件比master的模板文件只是多了最后一行。

3. 哨兵模板

代码语言:txt
复制
    在全部三台机器上创建/home/redis/sentinel.conf.templet文件,内容如下:
代码语言:javascript
复制
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
代码语言:txt
复制
    说明:
  • 一个集群最少需要三个单实例的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

代码语言:txt
复制
    在103.244.233.166上创建/root/create\_redis\_cluster.sh文件,内容如下:
代码语言:javascript
复制
#!/bin/bash

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

代码语言:txt
复制
    在103.244.233.167、103.244.233.168上创建/root/create\_redis\_cluster.sh文件,内容如下:
代码语言:javascript
复制
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登录无密码验证

代码语言:txt
复制
    在103.244.233.166(master)上用root用户执行:
代码语言:javascript
复制
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

代码语言:txt
复制
    编辑/etc/sudoers文件,注释以下行,三台都执行:
代码语言:javascript
复制
# Defaults    requiretty

3. 将create_redis_cluster.sh改为可执行

代码语言:javascript
复制
chmod 755 /root/create_redis_cluster.sh
代码语言:txt
复制
    三台都执行。
代码语言:txt
复制
    至此所有配置已经完成。每次执行103.244.233.166上的/root/create\_redis\_cluster.sh文件,就会自动创建一个新的redis集群,一键式秒建。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、需求
  • 二、安装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改为可执行
                          相关产品与服务
                          云数据库 Redis
                          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档