设为首页 收藏本站
查看: 1993|回复: 1

[经验分享] redis3.0.2集群部署文档

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-5 09:49:55 | 显示全部楼层 |阅读模式
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。redis3.0.2开始支持了群集架构。

目前redis支持的cluster特性(已测试):

1):节点自动发现

2):slave->master 选举,集群容错

3):Hot resharding:在线分片

4):集群管理:cluster xxx

5):基于配置(nodes-port.conf)的集群管理

6):ASK 转向/MOVED 转向机制.


群集架构如图所示,为类似P2P的结构:

QQ截图20150805094919.png

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value



redis-cluster选举:容错


QQ截图20150805094938.png

(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail)?

    a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

    b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

  ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误


部署步骤:

2台服务器:10.10.0.1和10.10.0.2

redis集群每个机子都需要配置:

#wget http://download.redis.io/releases/redis-3.0.2.tar.gz
#tar -zxvf redis-3.0.2.tar.gz
#cd redis-3.0.2
#make
#make install
#echo vm.overcommit_memory = 1 >> /etc/sysctl.conf    修改内存检测方式允许使用所有物理内存,防止高负载时性能严重下降
#echo vm.dirty_bytes=33554432 >>  /etc/sysctl.conf    为了解决aof导致的busy问题,让系统从内存往硬盘刷数据的大小由默认的内存的10%减小到32M
#echo never > /sys/kernel/mm/transparent_hugepage/enabled   关闭巨透明页,centos6以上版本需要,如果改了需要重启,否则不用重启
#sysctl -p                                                                            立刻生效
#vim /etc/profile                                                                配置环境变量,方便快捷调用命令
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/src
#source /etc/profile                                                            立刻生效
#mv /root/redis-3.0.2 /usr/local/redis
#cp  /usr/local/redis/redis{.conf,7000.conf}     复制成集群需要的端口号命名的conf,需要复制多份,注意用端口号区分,一台上起7000,7001,7002  3个redis实例
#vim /usr/local/redis/redis7000.conf 以其中一个配置文件为例,其他的conf就是改里面的端口号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
daemonize yes                  修改作为后台服务启动
pidfile /var/run/redis7000.pid  单独的pid
port  7000                   集群时改成不同的端口号
bind  本机ip                    监听本机ip
tcp-keepalive 60                 改成官方建议值
logfile /var/log/redis7000.log   日志存放位置,以端口号命名
dbfilename   dump7000.db        快照文件名,改为以端口命名
dir  /usr/local/redis/          快照绝对路径
maxmemory 5000mb                 限制单redis最大内存,视情况改,要给系统留出4G左右的空余
maxmemory-policy volatile-lru   到达最大内存后的删除缓存策略为删除过期key
appendonly yes             开启AOF同步模式,类似于mysql的binlog
appendfilename "appendonly7000.aof" 同步文件名
cluster-enabled yes            开启集群
cluster-config-file /usr/local/redis/nodes-7000.conf 集群节点配置文件绝对路径,以端口号命名,由redis自动维护
cluster-node-timeout 5000        节点超时时间



#vim /etc/rc.local开机自动启动
1
2
3
4
echo never > /sys/kernel/mm/transparent_hugepage/enabled
/usr/local/redis/src/redis-server /usr/local/redis/redis7000.conf
/usr/local/redis/src/redis-server /usr/local/redis/redis7001.conf
/usr/local/redis/src/redis-server /usr/local/redis/redis7002.conf



#shutdown -r 0                                             如果设置了大页面,则需要重启

#yum install ruby rubygems -y                    安装创建群集命令依赖的ruby环境

#wget http://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem

#gem install -l ./redis-3.2.1.gem


在任意一台机子上创建用集群的命令:

#/usr/local/redis/src/redis-trib.rb create --replicas 1 10.10.0.1:7000 10.10.0.1:7001 10.10.0.1:7002 10.10.0.2:7000 10.10.0.2:7001 10.10.0.2:7002
在任意一个节点上运行上面的命令创建集群,其中--replicas 1的意思是1主有1从,一共随机创建3主3从
运行成功会有提示预览主从状态,并等待输入yes
输入yes后会出现 [OK] All 16384 slots covered.  表示集群运行成功


日常维护:
#/usr/local/redis/src/redis-trib.rb check 10.10.0.1:7000                         查看集群状态,任意节点上看就行
#redis-cli -h 10.10.0.1 -p 7000 cluster nodes | grep master |sort -k2    看主节点状态
#redis-cli -h 10.10.0.1 -p 7000 info                                                           可以查看这个实例信息,可用于监控
动态调整redis参数:

#redis-cli -h 10.10.0.1  -p 7000                                连接进redis实例
>config get *                                                                查询所有可设置的项目和值
>config set x y                                        设置要改的项目x为值y

redis基准性能测试:
#redis-benchmark -q -h 10.10.0.1 -p 7000 -c 500 -n 100000
500个并发连接,100000个请求,检测host为10.10.0.1端口为7000的redis实例性能

如果要重新创建群集:
只要把各个nodesxxxx.conf文件删掉就可以,注意重新创建的群集要都为空,清空已有数据进redis各个实例里运行flushall,然后再用创建群集的命令就可以重新创建。

需要扩容主节点和从节点的步骤略过,请参见官方文档





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94314-1-1.html 上篇帖子: window的PHP开发(wamp)下安装redis扩展实录 下篇帖子: Redis3.0.3集群安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表