第1集 Redis集群搭建这回事
简介:Redis集群搭建实战,赠送Redis图文搭建教程
-
安装redis
- 处理步骤
cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
tar -zxvf redis-4.0.6.tar.gz
cd redis-4.0.6
make && make install
-
新建集群文件夹
- 处理步骤
cd /usr/local/
mkdir redis_cluster
cd redis_cluster
mkdir 7000 7001 7002 7003 7004 7005
cp /usr/local/redis-4.0.6/redis.conf /usr/local/redis_cluster/7000
-
修改redis_cluster/7000到redis_cluster/7005文件夹下面的Redis.conf
- 处理步骤
daemonize yes //redis后台运行
port 7000 //端口7000,7002,7003
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
bind 127.0.0.1 172.16.244.144(此处为自己内网的ip地址,centos7下面采用ip addr来查看,其他系统试一下ifconfig查看,ip为)
-
在其他节点也修改完Redis.conf
- 处理步骤
cp /usr/local/redis_cluster/7000/redis.conf /usr/local/redis_cluster/7001
cp /usr/local/redis_cluster/7000/redis.conf /usr/local/redis_cluster/7002
cp /usr/local/redis_cluster/7000/redis.conf /usr/local/redis_cluster/7003
cp /usr/local/redis_cluster/7000/redis.conf /usr/local/redis_cluster/7004
cp /usr/local/redis_cluster/7000/redis.conf /usr/local/redis_cluster/7005
-
启动所有redis节点cd redis-server所在的路径
- 处理步骤
cp /usr/local/redis-4.0.6/src/redis-server/usr/local/ redis-cluster
cd /usr/local/redis_cluster/7000
../redis-server ./redis.conf
cd /usr/local/redis-cluster/7001
../redis-server ./redis.conf
cd /usr/local/redis-cluster/7002
../redis-server ./redis.conf
cd /usr/local/redis-cluster/7003
../redis-server ./redis.conf
cd /usr/local/redis-cluster/7004
../redis-server ./redis.conf
cd /usr/local/redis-cluster/7005
../redis-server ./redis.conf
-
创建集群
- 前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb(/usr/local/redis-4.0.6/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执 行,它是用ruby写的一个程序,所以我们还得安装ruby.
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
- 如果gem install redis发现报错
curl -L get.rvm.io | bash -s stable
source /usr/local/rvm/scripts/rvm
rvm list known
rvm install 2.3.3
rvm use 2.3.3
ruby --version
gem install redis
- 开启集群工作
cd /usr/local/redis-4.0.6/src
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
- 测试集群是否正常,-c按照cluster方式启动
./redis-cli -c -p 7000
- 如果搭建失败,请用此命令将所有启动的redis server一个个关闭掉
./redis-cli -p 7000 shutdown
第2集 Redis集群不得不说的这点事
简介:Redis集群特点介绍
- Redis 集群的数据分片
* 概念:Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,
* 举个例子,比如当前集群有3个节点,那么:
* 节点 A 约包含 0 到 5500号哈希槽.
* 节点 B 约包含5501 到 11000 号哈希槽.
* 节点 C 约包含11001 到 16384号哈希槽.
* 查看集群信息redis-cli -p 7000 cluster nodes | grep master
查看集群
* 这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我想移除节点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.
* 从Redis宕机讲解分布式锁执行的异常场景流程
* 从Server服务宕机讲解分布式锁执行的异常场景流程
-
Redis 集群的主从复制模型
- 为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品. 在我们例子中具有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用.Redis集群做主从备份解决了这个问题
-
Redis 一致性保证
- 主节点对命令的复制工作发生在返回命令回复之后, 因为如果每次处理命令请求都需要等待复制操作完成的话, 那么主节点处理命令请求的速度将极大地降低 —— 我们必须在性能和一致性之间做出权衡。 注意:Redis 集群可能会在将来提供同步写的方法。 Redis 集群另外一种可能会丢失命令的情况是集群出现了网络分区, 并且一个客户端与至少包括一个主节点在内的少数实例被孤立。
-
手把手测试故障转移
redis-cli -p 7000 debug segfault
redis-cli -p 7001 cluster nodes | grep master
测试故障转移
第3集 Redis集群分片重哈希
简介:玩转Redis集群节点分片重哈希
-
采用SSH连接远程服务器
-
集群重新分片
手动处理solt节点槽重新分片
- ./redis-trib.rb reshard 127.0.0.1:7000
- 你想移动多少个槽( 从1 到 16384)? all
比较移动前和移动后(两个槽位各移动了50个节点):
移动前 移动后- 添加一个新的主节点
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
添加完节点后,其节点是没有数据的:
新添加的节点没有数据
还需要rehash一下才可以,选中添加1000个节点,填写接收的节点值:
rehash节点
完成之后我们看到7006节点有1000个槽数据:
添加后的节点数据
- 添加一个新的从节点
./redis-trib.rb add-node --slave 127.0.0.1:7007 127.0.0.1:7000
我们看到7007成为7006的从节点,原来7006没有从节点:
添加的从节点自动选择主节点
-
移除一个节点
./redis-trib.rb del-node 127.0.0.1:7000
<node-id>
第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址。
* 移除主节点【先确保节点里面没有slot】
* 使用同样的方法移除主节点,不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的,需要将这个节点的数据重新分片到其他主节点上.
* 替代移除主节点的方法是手动执行故障恢复,被移除的主节点会作为一个从节点存在,不过这种情况下不会减少集群节点的数量,也需要重新分片数据.
* 移除从节点 直接移除成功
移除7005有数据的主节点则会报错
第4集 Redis集群整合Springboot实战
简介:Redis集群整合springboot讲解
-
介绍
- 大多数用户可能会使用RedisTemplate它及其相应的包org.springframework.data.redis.core- 由于其丰富的功能集,该模板实际上是Redis模块的中心类。该模板为Redis交互提供了高级抽象。虽然RedisConnection提供了接受和返回二进制值(byte数组)的低级方法,但模板负责序列化和连接管理,使用户无需处理这些细节。
-
引入spring-data-redis pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
-
引入redistemplate
- 引入bean redisTemplate的使用,类型于:monogoTemplate、jdbcTemplate数据库连接工具
- 编写redisTemplate类,设置redisConnectFactory
-
配置yml配置文件(局域网IP需要保证IP在一个网段)
配置文件
网友评论