Redis分布式集群

[b]1.Redis分布式缓存的实现模式[/b]

Redis一开始并不支持分布式的,从Redis3.0后才开始支持Redis分布式缓存。可以从三种不同的方式来搭建Redis分布式缓存系统。
[b]1)客户端分片[/b]
这种方案将分片工作放在业务程序端,程序代码根据预先设置的路由规则,直接对多个Redis实例进行分布式访问。它的好处是实现方法和代码都自己可控,可随时调整,不足之处是这实际上是一种静态分片技术。Redis实例的增减,都得手工调整分片程序。
[b]2)代理分片[/b]
这种方案,将分片工作交给专门的代理程序来做。代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给 业务程序。这种机制下,一般会选用第三方代理程序(而不是自己研发),因为后端有多个Redis实例,所以这类程序又称为分布式中间件。目前有一些框架专门来做代理分片的,如国内的Codis。
[b]3)Redis Cluster(Redis 3.0 以上的版本才支持)[/b]
在这种机制下,没有中心节点(和代理模式的重要不同之处)。 Redis Cluster将所有Key映射到16384个Slot中,集群中每个Redis实例负责一部分,业务程序通过集成的Redis Cluster客户端进行操作。客户端可以向任一实例发出请求,如果所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。

[b]2.Redis分布式缓存基础[/b]

[b]1.TCP Ports[/b]
每个Redis节点使用两个端口,一个提供对外服务端口,默认6379,另一个用于集群间同步数据通知,端口号是在对外服务端口上加10000,即默认为16379. 每一个节点都需要知道其他节点的情况,这里就包括其他节点负责处理哪些键值对。这也就是客户端向任一实例发出请求,如果所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。
[b]2.数据分片(Sharding)[/b]
所有key 分布在16384个hash slot上,数据分组及迁移都是以hash slot为单位。使用CRC16算法计算一个key应该落在哪个hash slot上。
Redis集群采用的是hash slot分片来完成的。例如:
Node A contains hash slots from 0 to 5500.
Node B contains hash slots from 5501 to 11000.
Node C contains hash slots from 11001 to 16384.
[b]3.主从模式(Master-Salve)[/b]
Redis cluster的拓扑结构,由3个以上Master节点形成数据分片集群,覆盖所有16384个hash slots, 数据只能在Master节点间以slot为单位迁移。
每个Master可以有多个replica节点(即slave), 以防灾备,当master宕机时,集群会通过选举晋升这个master的一个slave节点变为master, 继续提供服务。master宕机可能会丢失写的数据。因为master在接收请求处理完后会立即返回客户端,master如果在同步到slave之前就down了,就会lose write.(机制决定,不可避免)。
[b]4.Redis Cluster失效[/b]
在下面的两种情况下,Redis Cluster就失败,即不对外提供服务了。
1)如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态。
2)如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态。
[b]5.Redis Cluster 数据迁移[/b]
Redis支持在线进行数据迁移。Redis默认的slave节点是不支持写操作的,我们需要修改它的配置
#slave-read-only yes
slave-read-only no
创建一个新的Redis的实例,执行命令salveof redis节点IP地址,即开始进行数据同步了。通过查询命令info来查询同步是否完成,完成之后,就可以将其提升为Master节点了。
[b]6.客户端框架[/b]
从官方网站上看,Redis目前有很多客户端框架,在Java中,目前用得比较多的是Spring Data Redis和Jedis。

[b]3.安装步骤[/b]

[b]1)安装依赖包[/b]
yum -y install gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel gcc-c++ automake autoconf

上面的包必须在之前就安装好,否则安装ruby,rubygem时就会报错(即安装ruby,rubygem时依赖上面的包)。

下载ruby, rubygem的源码包并安装它们。
tar -xvzf ruby-2.2.1.tar.gz
cd ruby-2.2.1
./configure -prefix=/usr/local/ruby
make
make install
cp ruby /usr/local/bin

tar -xvzf rubygems-2.4.6.tgz
cd rubygems-2.4.6
ruby setup.rb
cp bin/gem /usr/local/bin

下载redis-3.2.1.gem(这个是用于创建redis集群时用到),然后执行下面的命令:
gem install -l ./redis-3.2.1.gem (在官网上打不开链接,可以到百度上去搜索下载的地方)

至此,所有的基础环境就安装好,下面就是安装Redis源码包了。

[b]2)安装Redis-3.0.4[/b]

下载redis的源码包: wget http://download.redis.io/releases/redis-3.0.4.tar.gz
解压源码包: tar xzvf redis-3.0.4.tar.gz
编译: make
安装:make install (root权限下安装)

安装完后,对redis.conf进行配置(redis.conf就是在解压redis包下可以找到)
按照官网的示例来配置(http://www.redis.io/topics/cluster-tutorial)

[b]port 7000 //每个Redis实例的商品必须是唯一的
cluster-enabled yes //支持集群
cluster-config-file nodes.conf //nodes.conf这个文件不用我们去编辑
cluster-node-timeout 5000
appendonly yes[/b]

[b]3)创建多个Redis实例[/b]

上面的步骤只是创建了一个Redis实例,我们需要创建Redis多个实例,即是集群。
#这里仅在一个VM中建立多个实例。
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

上面安装的目录是在7000下,后面的工作就是将7000目录下的redis实例复制到7001,7002,7003,7004,7005目录下。唯一要改的就是redis.conf中的port,分别改成7001,7002,7003,7004,7005。

进入到7000~7005目录下,启动Redis实例:redis-server ./redis.conf
通过查看redis实例进程,可以发现它们都启动了。


现在真正来创建Redis集群了,通过下面的的命令来完成:
./redis-trib.rb create --replicas 1 172.30.2.74:7000 172.30.2.74:7001 172.30.2.74:7002 172.30.2.74:7003 172.30.2.74:7004 172.30.2.74:7005

其中:--replicas 1 表示每个实例都有一个Salve节点,在这里,是3个Master节点,3个Salve节点。


Redis分布式集群创建好了,下面进行测试。这里通过redis-cli 客户端命令进行测试。
可以连接任何一个Redis节点,如果想存放一个数据,如果此时它存储的地方并不是当前节点上,它会自动引导到对应的redis节点上存储,此时会发送一个重定向的命令。
<think>好的,我需要帮助用户在Linux环境下搭建Redis分布式集群。首先,我得回想一下Redis集群的基本概念。根据引用[1],Redis集群Redis分布式运行模式,通过分片实现数据自动分区和管理,提高可用性和扩展性。用户需要的是部署与配置的具体步骤,所以应该分步骤说明。 首先,环境准备。用户需要在多台服务器或虚拟机上有Linux系统,并且安装Redis。可能需要提到安装Redis的步骤,比如通过源码编译或者包管理器安装。确保所有节点的Redis版本一致,引用[2]提到使用5.0.9版本,所以最好建议用户使用相同或兼容版本。 接下来是修改配置文件。每个节点需要不同的配置文件,设置端口、集群模式、持久化文件等。需要指导用户编辑redis.conf,开启集群模式,设置cluster-config-file,这部分需要具体参数示例,比如port 6379,cluster-enabled yes等。 然后是启动所有节点的Redis服务。用户需要逐个启动每个实例,或者用脚本批量启动。这里可能需要给出启动命令的例子,比如redis-server /path/to/redis.conf。 之后是创建集群。引用[2]中提到了使用redis-cli --cluster create命令,并带有具体的IP和端口,以及副本数。需要解释命令中的参数,比如--cluster-replicas 1表示每个主节点有一个从节点。用户需要替换示例中的IP和端口为自己的实际地址,同时注意防火墙设置,确保节点间通信。 创建完成后,验证集群状态。使用redis-cli --cluster check命令检查节点是否正常,主从关系是否正确。引用[4]提到在从服务器执行info replication查看角色,所以可能需要指导用户如何验证主从配置。 最后,可能还需要说明如何删除集群,比如引用[3]提到的关闭服务并删除相关文件,但用户当前的问题可能不需要这部分,不过可以放在注意事项里。 需要注意的问题包括:端口开放、配置文件正确、版本一致、数据目录权限等。可能还要提醒用户备份数据,处理可能出现的错误,比如节点无法加入集群时的排查步骤。 现在需要将以上步骤结构化,用清晰的中文分步骤说明,并确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,不过在这个问题中可能数学公式较少,但如果有变量或代码示例需要正确格式化。代码块需要用三个反引号包裹,并注明语言。同时,生成相关问题,参考用户提供的示例中的问题形式,比如关于性能优化、节点故障处理等。</think>### Linux Redis分布式集群部署与配置教程 #### 一、环境准备 1. **服务器要求**:至少6台Linux服务器(或虚拟机),3台为主节点,3台为从节点(最小集群配置)[^1]。 2. **安装Redis**:在所有节点安装相同版本的Redis(建议≥5.0,示例使用5.0.9[^2]): ```bash wget http://download.redis.io/releases/redis-5.0.9.tar.gz tar xzf redis-5.0.9.tar.gz cd redis-5.0.9 make && make install ``` #### 二、配置文件修改 1. **创建配置目录**: ```bash mkdir -p /opt/redis/cluster/700{0..5} # 示例端口7000-7005 ``` 2. **编辑配置文件**(以7000端口为例): ```conf port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes daemonize yes ``` 其他节点需修改`port`和`cluster-config-file`名称。 #### 三、启动Redis服务 在所有节点执行: ```bash redis-server /opt/redis/cluster/700X/redis.conf # X为端口号 ``` 验证进程: ```bash ps -ef | grep redis ``` #### 四、创建集群 使用`redis-cli`命令创建集群(需替换实际IP): ```bash redis-cli --cluster create \ 192.168.1.10:7000 192.168.1.11:7001 192.168.1.12:7002 \ 192.168.1.13:7003 192.168.1.14:7004 192.168.1.15:7005 \ --cluster-replicas 1 ``` - `--cluster-replicas 1`:表示每个主节点有1个从节点。 #### 五、验证集群状态 1. **检查集群节点**: ```bash redis-cli -h 192.168.1.10 -p 7000 cluster nodes ``` 2. **查看主从关系**(从节点执行)[^4]: ```bash redis-cli -p 7003 info replication ``` #### 六、注意事项 1. **防火墙开放端口**:需开放Redis端口(如7000-7005)和集群总线端口(Redis端口+10000,如17000-17005)。 2. **数据持久化**:配置文件已开启`appendonly`,数据会写入`appendonly.aof`和`dump.rdb`[^3]。 3. **删除集群方法**:关闭所有节点服务后,删除`nodes-*.conf`、`appendonly.aof`和`dump.rdb`文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值