1.实现目标
目标清单:
1)192.168.31.220、192.168.31.221和192.168.31.222为三台redis服务器的地址。初始状态下,所有服务器上6379端口的redis节点都为master,而6380端口的节点都为本机master的slave;
2)当某个master节点处于不可用时,则要求集群监控到后将某个slave(不一定是当前master主机上的slave)切换为新的master;
3)如果半数(及以上)节点挂掉,则整个集群进入fail状态。
2.实现过程
2.1安装Redis3.x
此步骤省略,可参考http://code727.iteye.com/blog/2251399
2.2安装cluster依赖工具
只需在任意一台主机上(如220)进行如下操作:
yum install ruby
yum install rubygems
gem install redis
2.3cluster配置
# 为Master和Slave节点拷贝两个配置文件到/etc/redis目录
cp /usr/local/redis/redis.conf /etc/redis/redis-6379.conf
cp /usr/local/redis/redis.conf /etc/redis/redis-6380.conf
2.3.1修改master节点配置
vi /ect/redis/redis-6379.conf
主要配置项如下:
# master节点服务端口
port 6379
# 开启集群
cluster-enabled yes
# master节点的配置文件
cluster-config-file nodes-6379.conf
# 集群节点互联超时时间(10秒)
cluster-node-timeout 10000
2.3.2修改slave节点配置
vi /ect/redis/redis-6380.conf
# slave节点服务端口
port 6380
# 开启集群
cluster-enabled yes
# slave节点的配置文件,名称与master的不一样
cluster-config-file nodes-6380.conf
# 集群节点互联超时时间(10秒)
cluster-node-timeout 10000
完成后,将redis-6379.conf和redis-6380.conf两个配置拷贝到所有主机的/etc/redis/目录下
2.3.2启动redis服务
在所有主机上进行如下操作:
# 进入redis-server目录
cd /usr/local/redis/src
# 启动master节点服务
./redis-server /etc/redis/redis-6379.conf
# 启动slave节点服务
./redis-server /etc/redis/redis-6380.conf
2.3.3创建集群环境
在2.2节中安装了cluster依赖工具的主机上进行如下操作:
cd /usr/local/redis/src
./redis-trib.rb create --replicas 1 192.168.31.220:6379 192.168.31.221:6379 192.168.31.222:6379 192.168.31.220:6380 192.168.31.221:6380 192.168.31.222:6380
创建集群环境的命令格式为./redis-trib.rb create --replicas <slaveCount> masterNode1,masterNode2,masterNodeN,slaveNode1,slaveNode2,slaveNodeN
Node的格式为"IP:port",slaveCount表示每个masterNode对应的slaveNode个数,在集群环境中可以没有slave(在命令中省略掉slaveNode部分即可)。但如果有slave,则命令中,前n中个节点都为master,后n个节点都为slave,第n个master节点对应的slave应该是第n个。在上面的创建命令中,各节点的顺序正好满足目标清单中的第1)条需求。
从上图可看出,六个节点都处于"OK"状态,并且前三个6379端口的都为master,而都三个6380端口的都为slave。此时出现提示,键入yes后,各节点将会进行互联操作
从上图可看出16384个哈希槽已均匀分配给了三个master节点,分别为:
192.168.31.220:6379(10923-16384)
192.168.31.221:6379(5461-10922)
192.168.31.222:6379(0-5460)
2.4定义服务
在所有的主机上进行如下操作:
2.4.1定义redis-6379服务
vi /etc/init.d/redis-6379
输入如下内容:
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/src/redis-server
REDIS_CLI=/usr/local/redis/src/redis-cli
CONF="/etc/redis/redis-6379.conf"
case "$1" in
start)
echo "Starting Redis-6379 server..."
$EXEC $CONF
sleep 1
echo "Redis-6379 is running..."
;;
stop)
echo "Stopping..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
sleep 1
echo "Redis-6379 stopped"
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis-6379 {start|stop|restart|force-reload}" >&2
exit 1
esac
chmod -R 755 /etc/rc.d/init.d/redis-6379
2.4.1定义redis-6380服务
vi /etc/init.d/redis-6380
输入如下内容:
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6380
EXEC=/usr/local/redis/src/redis-server
REDIS_CLI=/usr/local/redis/src/redis-cli
CONF="/etc/redis/redis-6380.conf"
case "$1" in
start)
echo "Starting Redis-6380 server..."
$EXEC $CONF
sleep 1
echo "Redis-6380 is running..."
;;
stop)
echo "Stopping..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
sleep 1
echo "Redis-6380 stopped"
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis-6380 {start|stop|restart|force-reload}" >&2
exit 1
esac
chmod -R 755 /etc/rc.d/init.d/redis-6380
2.5设置开机启动
在所有的主机上进行如下操作:
vi /etc/rc.d/rc.local
加入如下内容:
service redis-6379 start
service redis-6380 start
3.测试
3.1redis-cli连接
# 常规的连接命令
./redis-cli -h 192.168.31.220 -p 6379
# redis set命令
set name daniele
执行set命令后,将会返回MOVED错误,如下图:
这是因为键(name)应该映射到0-5460范围内,因此不能在220(10923-16384范围)上进行操作,将-h的后ip修改为222重新连接后再进行set操作将会成功处理。
3.2改良后的redis-cli连接
在redis-cli后加一个-c参数可以避免MOVED错误的发生,如下:
# 具备重定向功能的连接
./redis-cli -c -h 192.168.31.220 -p 6379
# redis set命令
set name daniele
执行set命令后,将会自动重定向,并返回正确的结果:
3.3宕机测试
1)kill掉222的master节点,再进行3.2节的操作,此时将不会再重定向到已不可用的222的master节点上
此时重定向到了221的master节点上。这是因为同样的一个键,此时的slot值为5789而不是先前的4808,因此它将存储到221的master节点范围5461-10922内,可以通过如下命令查看到各节点状态
# 查看220上node-6379.conf文件内容
./redis-cli -h 192.168.31.220 -p 6379 cluster nodes
或
# 查看220上node-6380.conf文件内容
./redis-cli -h 192.168.31.220 -p 6380 cluster nodes
上图展示的结果正好是220上node-6379.conf文件内容
有时在执行操作时会遇到“
(error) CLUSTERDOWN The cluster is down”错误,见下图:
在这种情况下,221是可连接的(否则上图中最后一行的转向地址信息不可能会出现),需要对221:6379节点进行修复:
# 格式为./redis-trib.rb fix 被损节点ip:port
./redis-trib.rb fix 192.168.31.221:6379
2)kill掉半数(当前架构为3个)节点,再进行3.2节的操作,将同样会出现“
(error) CLUSTERDOWN The cluster is down”错误:
见上图,最后一行的地址信息表明没有发生转向,说明整个集群环境down掉了。
3)重启被kill掉的节点,再进行3.2节的操作,此时又恢复了正常。
4.Jedis对Redis Cluster的支持
5.总结
在整个集群环境中,如果有半数的节点处于不可用状态时,会使整个集群系统都变为不可用,这是一个相当严重的问题。在上面章节的实施过程,都是人工值守的。对于可靠性高的系统来说,必须要加入自动检测恢复机制来实现,可以为每个节点加入keepalived来满足要求,当检测到某个redis节点不可用时,让它自动调用redis的重启脚本。
Redis Cluster目前不支持跨库操作,即在任意一个节点进行select操作是不允许的。个人认为,对于那种需要将数据按库进行分类的系统来说,还是采用Sentinel架构比较好,可参考
http://code727.iteye.com/blog/2251399
- 大小: 18.3 KB
- 大小: 20.7 KB
- 大小: 22.8 KB
- 大小: 2.3 KB
- 大小: 3 KB
- 大小: 4.6 KB
- 大小: 3 KB
- 大小: 15.3 KB
- 大小: 3.8 KB
- 大小: 2.8 KB
分享到:
相关推荐
### Redis 4.0.x 集群创建及问题处理 #### 一、集群搭建前提环境—Ruby Redis集群的搭建通常需要依赖于Ruby环境,这是因为集群管理工具往往基于Ruby编写。因此,在开始搭建Redis集群前,需要确保Ruby环境正确安装...
在部署Redis时,考虑集群模式也是重要的一步。Redis支持哨兵(Sentinel)系统,用于监控、故障检测和自动故障恢复。通过配置多个Sentinel节点,可以实现对主从节点的高可用性监控。此外,Redis Cluster是另一种集群...
Redis,全称Remote Dictionary Server,是一...总之,“Redis-x64-3.2.100”提供了在64位Windows系统上运行Redis所需的所有必要组件,无论是初学者还是经验丰富的开发者,都能快速地部署和使用这一强大的键值存储系统。
Redis 是一个高性能的键值对...综上所述,Redis-x64-3.0.504.zip 提供了一个完整的 Redis for Windows 安装包,包括一键启动和关闭脚本,方便用户快速部署和管理 Redis 服务。无论是开发还是生产环境,都能从中受益。
在实际部署和使用中,用户需要根据自己的需求配置`redis.windows.conf`,如端口设置、数据持久化策略、最大内存限制等。启动`redis-server.exe`后,可以通过`redis-cli.exe`连接并测试Redis服务器,进行数据的存取...
3. **启动集群**:使用命令行,通过`redis-server redis1.conf`依次启动每个节点。启动后,节点会自动尝试进行集群初始化,但为了确保所有节点都能正确连接,你可能需要手动执行`redis-cli --cluster create`命令,...
6. **集群部署**:若需搭建Redis集群,Windows版Redis同样支持,但配置过程相对复杂,需要正确配置节点间的通信和槽分配。 总的来说,`Redis-x64-5.0.14.msi`适合快速部署和简单管理,而`Redis-x64-5.0.14.zip`适合...
3. **Windows 安装与配置**:Redis 通常在 Linux 环境下运行,但通过社区提供的二进制包,也可以在 Windows 上部署。解压 "Redis-x64-3.2.100-稳定版" 压缩包后,包含可执行文件 `redis-server.exe` 和配置文件 `...
【Redis 使用及集群部署】 Redis 是一款高性能的键值存储数据库,广泛应用于缓存、消息队列、数据持久化等领域。本文将详细介绍 Redis 的安装、使用以及集群部署。 ### 一、Redis 安装 #### Windows 安装 1. 从 ...
2.x版本可能包含了对Redis集群的支持,提高了可扩展性和容错性。 3. **Spring 5.1**:这是Spring框架的一个重要版本,提供了对Java 11的兼容性,增强了反应式编程的支持,并引入了WebFlux,这是一种非阻塞的Web...
Redis,全称Remote Dictionary Server,是一款高性能的键值对存储系统,它以纯内存操作著称,能够提供极快的数据读写...通过下载并解压提供的"redis-3.0.503_x64"文件,用户可以快速体验和部署这一高效的数据存储系统。
通过Sentinel系统,Redis还能实现高可用性,监控并自动处理集群中的故障。 总的来说,Redis-x64-3.2.100.zip和redis-4.0.14.tar.gz分别是Windows和Unix/Linux平台的Redis实现,都包含了丰富的特性和功能。无论你是...
### Linux 下 Redis 集群部署详尽指南 #### 一、引言 随着业务规模的不断扩张,单一实例的数据库往往难以满足高并发、大数据量的存储需求。Redis 作为一款高性能的键值对存储系统,凭借其卓越的速度与灵活性,在...
总之,Redis-x64-5.0.14.1.msi安装包为Windows用户提供了简单易用的方式来部署Redis服务,利用其强大的数据结构和高性能特性,满足各种应用场景的需求,如缓存、队列、计数器、实时统计等。安装后,用户需要根据实际...
本资源提供的是Redis 3.0.502的Windows版本,适用于64位(x64)和32位(x86)操作系统。Redis 3.0.502是一个稳定版本,引入了许多改进和优化,旨在提高性能和稳定性。 在Windows环境下部署Redis,通常需要以下步骤...
在大规模应用中,为了提高可用性和数据冗余,通常会采用集群部署。"redis集群一键自动部署脚本.rar" 提供了一种便捷的方式来在 CentOS 7.X 操作系统上搭建 Redis 集群。以下是关于Redis集群、shell脚本以及CentOS的...
Redis是一款高性能的键值对数据库,它在内存中...总之,这个压缩包为Windows用户提供了全面的Redis支持,包括x64版本和源代码,对于开发者来说是一份宝贵的资源,无论是学习、开发还是部署Redis服务,都能从中受益。
Redis 和 Nginx 是两种非常重要的开源软件,广泛应用于现代...不过,对于大规模的生产部署,可能需要考虑使用更高级的集群方案,如 Redis Sentinel 或 Cluster,以及更现代的 Nginx 版本,以获得更好的扩展性和安全性。
3. **Windows x64支持**:Redis原生是为Linux设计的,但通过社区的努力,也有了Windows版本。在64位环境下运行,能够充分利用系统资源,提供更大的内存支持和更好的性能。 4. **压缩包内的文件**: - `redis....
为了搭建一个基本的 Redis 集群,需要至少 6 台服务器(这里采用伪分布式部署,即在一个物理机上模拟 6 个 Redis 实例)。集群通常包含 3 个主节点和 3 个对应的从节点。 ##### 2.1 准备环境 在 `/usr/local` 目录...