Centos 6.5 redis cluster集群搭建
Posted _wangjianfeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos 6.5 redis cluster集群搭建相关的知识,希望对你有一定的参考价值。
Centos 6.5 redis cluster集群搭建
参考文章:Redis 学习笔记(十四)Redis Cluster介绍与搭建
前言
对于redis
集群的创建,总体来说可以分为两种方式:
1.
使用redis replication
功能对redis
进行复制,同时对于主从进行读写分离。使用redis sentinel
保证redis
集群的高可用性。
这种方式有以下优点:
- 可支持横向扩容,当吞吐量峰值更高时,可以通过扩容
slave
节点,能支撑更高的读QPS
但是也有以下缺点:
- 通常情况下是一个
master
节点,即便做了读写分离,最多只能支撑几万的写QPS
(简单的数据结构情况下,更复杂的数据可能更低) - 做读写分离的时候,
redis
客户端(比如jedis
)对于这方面的读写分离支持不足。可能需要拓展和封装,或者修改源码 - 做横向扩容的时候,需要注意不能采取星状机构,需要采取树状结构(星状结构会导致
master
节点挂载很多slave
节点,做数据复制的时候对master
节点压力大) - 需要维护一套
sentinel
集群来达到高可用目的
2.
redis 3.0
版本推出了redis cluster
。有效解决了redis
分布式方面的需求。redis cluster
集合了replication,sentinel
功能,同时支持多master
的横向扩容。可以很好的解决流量瓶颈方面的问题。使用redis cluster
可以突破流量瓶颈。
相对来说,redis cluster
是一个分布式解决方案。但是也有以下的功能限制:
key
批量操作支持有限。目前只支持具有相同slot
值的key
执行批量操作key
事务操作支持有限,支持在同一个节点上的事务操作,不支持多个节点的事务。
本篇文章对于redis cluster
的一些基础知识进行介绍以及如何搭建一个redis cluster
集群。
数据分布理论
分布式数据库首要解决把数据按照某种规则映射到多个节点的问题,每个节点负责整个数据的一个子集。常见的分区有哈希分区和顺序分区。redis cluster
采取哈希分区规则。常见的哈希分区有以下几种:
- 节点取余分区
- 一致性哈希分区
- 虚拟槽分区
redis cluster
采用了虚拟槽分区,所有的键根据哈希函数映射到0-16383
个slot
中,计算公式为:slot = CRC16(key)&16383
.每个节点负责维护一部分slot
以及slot
所映射的键值数据。
搭建redis cluster
环境
CentOs 6.5
Redis 4.0.9
(2018/4/10最新版本)
节点
redis cluster
集群一般由多个节点组成,节点数量为6个以上才能保证高可用的集群。
这里列出一个节点的配置
复制redis
目录下的utils/redis_init_script
为redis_7000
:
修改以下内容:
REDISPORT=7000
然后把该文件拷贝到/etc/init.d/
目录下。
拷贝redis
目录下的redis.conf
到/etc/redis/7000.conf
,修改以下内容:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
daemonize yes
pidfile /var/run/redis_7000.pid
dir /var/reids/7000
logfile /var/log/redis/7000.log
bind 192.168.1.103 //本机IP地址
appendonly yes
然后创建以下文件夹:
/var/redis/7000
/var/log/redis/
然后去到/etc/init.d/
目录下面执行./redis_7000 start
命令启动一个redis
实例。通过查看/var/log/redis/7000.log
查看是否启动成功。
按照上面的方法部署6个实例。如果6个实例都在不同的机器上的话,直接复制配置文件过去即可。如果一台机器跑2个或以上的实例,则需要注意修改端口号。
假如你用于测试,所有的节点都跑在同一台机器上面,配置文件可以改成下面这样:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 39.10X.XX.XX //自己服务器IP
cluster-announce-port 7000
cluster-announce-bus-port 17000
daemonize yes
pidfile /var/run/redis_7000.pid
dir /var/reids/7000
logfile /var/log/redis/7000.log
appendonly yes
将6个redis
实例跑起来之后就可以了。目前redis
的集群已经跑起来,但是还无法工作。
创建集群
创建集群使用ruby
相关的工具,则需要执行以下命令安装ruby
:
yum install -y ruby
yum install -y rubygems
gem install redis
在执行gem install redis
是时候如果爆出如下错误:
gem install redis
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.
这是由于系统为centos 6.5
默认安装的Ruby
版本为1.8.7
所以需要升级到2.2.2
以上。
执行以下命令:
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
source /usr/local/rvm/scripts/rvm
# 查看可用的ruby版本
rvm list known
# 安装2.3.4版本
rvm install 2.3.4
# 设置默认版本
rvm use 2.3.4
gem install redis
这样就可以成功安装了。安装完了之后,复制redis
目录下的src/redis-trib.rb
文件到/usr/local/bin
中。
然后使用如下方式创建集群:
redis-trib.rb create --replicas 1 192.168.1.103:7000 \\
192.168.1.103:7001 192.168.1.104:7002 192.168.1.104:7003 \\
192.168.1.105:7004 192.168.1.105:7005
执行过程中会询问你是否可以分配slot
,输入yes
.
其中参数--replicas
表示每个master
有一个slave
,如果没有什么意外的话,redis
集群以及搭建完毕。可以通过以下命令检查集群的状态:
redis-trib.rb check 192.168.1.103:7001
以上是关于Centos 6.5 redis cluster集群搭建的主要内容,如果未能解决你的问题,请参考以下文章