redis集群搭建

Redis集群安装

  • 架构图
  • 服务器信息
  • 安装
  • 测试
  • 总结

1、架构图

本次安装参考自redis官方文档:https://redis.io/documentation

测试环境部署一套redis集群:
16384个hash slots,三个主节点,三个从节点,易于扩展与缩减

redis路径:/app/redissource/
集群路径:/app/redis/600x
db路径:/app/redis/db/600x

架构图如下:

2、服务器信息

ip 内存 系统
192.168.109.133 2c8g centos7.4
192.168.109.134 2c8g centos7.4
192.168.109.135 2c8g centos7.4

3、安装

截至17年12月22日,redis最新版本4.0.6。为保持和线上环境一致,本次安装采用稳定的旧版本,redis-3.2.9

遇过的坑:ruby自带的redis工具,gem-redis。如果redis是4.0版本,那么对ruby的版本要求也高,需要手动升级ruby版本,才能用redis4.0的工具

每台机器上:

setenforce 0

mkdir -p /app/redissource && cd /app/redissource
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar zxvf redis-3.2.9.tar.gz
mkdir -p /app/redis

编译:
cd /app/redissource/redis-3.2.9 && make
新环境可能遇到的错误

报错:/bin/sh: cc: command not found
解决:
缺少gcc
yum install gcc -y
报错:jemalloc/jemalloc.h: No such file or directory
解决:
make时添加参数
make MALLOC=lib
echo $? 
显示0,编译成功

继续安装:

cd /app/redis

mkdir 6000 6001 
另外两台创建 6002 6003 6004 6005,下面同理

scp /app/redissource/redis-3.2.9/redis.conf /app/redis/6000/
scp /app/redissource/redis-3.2.9/redis.conf /app/redis/6001/

修改一些必要的参数,可自行决定,以修改6004为例,贴出我修改的:

sed -i "s/bind 127.0.0.1/#bind 127.0.0.1/g" /app/redis/6004/redis.conf
sed -i "s/protected-mode yes/protected-mode no/g" /app/redis/6004/redis.conf


sed -i "s/port 6379/port 6004/g" /app/redis/6004/redis.conf
sed -i "s/daemonize no/daemonize yes/g" /app/redis/6004/redis.conf

sed -i "s/pidfile \/var\/run\/redis_6379.pid/pidfile \/var\/run\/redis_6004.pid/g" /app/redis/6004/redis.conf

sed -i 's/logfile \"\"/logfile \"\/app\/redis\/db\/6004\/redis.log\"/g' /app/redis/6004/redis.conf
sed -i "s/dir \.\//dir \"\/app\/redis\/db\/6004\"/g" /app/redis/6004/redis.conf

sed -i "s/appendonly no/#appendonly no/g" /app/redis/6004/redis.conf
sed -i "s/appendfilename \"appendonly.aof\"/#appendfilename \"appendonly.aof\"/g" /app/redis/6004/redis.conf
sed -i "s/appendfsync everysec/#appendfsync everysec/g" /app/redis/6004/redis.conf
sed -i "s/# cluster-enabled yes/cluster-enabled yes/g" /app/redis/6004/redis.conf
sed -i "s/# cluster-config-file nodes-6379.conf/cluster-config-file nodes-6004.conf/g" /app/redis/6004/redis.conf
sed -i "s/# cluster-node-timeout 15000/cluster-node-timeout 5000/g" /app/redis/6004/redis.conf
sed -i "s/# cluster-slave-validity-factor 10/cluster-slave-validity-factor 0/g" /app/redis/6004/redis.conf

sed -i "s/# cluster-require-full-coverage yes/cluster-require-full-coverage no/g" /app/redis/6004/redis.conf

##protected-mode no:保护模式是禁止公网ip访问redis,开启的条件有两个,1是没有bind任何ip,2是没有设置密码。我是设置了密码,所以关掉保护模式
##cluster-slave-validity-factor <factor>:用于限定slave于master的失联时长的倍数;如果设置为0,slave总是尝试failover,不管master与slave之间的链接断开多久(即只要slave无法与master通讯,都会尝试进行failover;Cluster有选举机制,有可能会被否决)
##daemonize yes: 后台模式打开
##appendonly no:关闭append持久化模式,采用另一种
##cluster-enabled:打开redis cluster的一些设置

创建存放db的目录

mkdir -p /app/redis/db/6000 (6000到6005都要创建)
启动redis
/app/redissource/redis-3.2.9/src/redis-server /app/redis/6000/redis.conf (6000到6005都要启动)
安装ruby

yum install ruby -y
gem install redis --version 3.2.0
/app/redissource/redis-3.2.9/src/redis-trib.rb create --replicas 1 1.1.1.24:6001 1.1.1.23:6003 1.1.1.23:6002 1.1.1.25:6004 1.1.1.25:6005 1.1.1.24:6000

4、测试

进入集群,查看节点状态,6个已知节点,并设置密码

/app/redissource/redis-3.2.9/src/redis-cli -c -p 6000
cluster info
config set masterauth   pwd
config set requirepass   pwd
auth pwd
config rewrite

redis丢失数据案例
背景介绍:
我们的一台redis服务器,硬件配置为4核,4G内存。redis持久话方案是RDB。前面几个月redis使用的
内存在1G左右。在一次重启之后,redis只恢复了部分数据,这时查看redis.log文件。看见了如下的错误
[23635] 25 Jul 08:30:54.059 * 10000 changes in 60 seconds. Saving...
[23635] 25 Jul 08:30:54.059 # Can't save in background: fork: Cannot allocate memory
这时,想起了redis启动时的警告
WARNING overcommit_memory is set to 0!
Background save may fail under low memory condition.
To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and
then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
翻译
警告:过量使用内存设置为0!在低内存环境下,后台保存可能失败。为了修正这个问题,
请在/etc/sysctl.conf 添加一项 'vm.overcommit_memory

5、总结

redis集群就搭建完成了,下面应该进行性能测试和宕机模拟,再加上监控

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容