标签:rdb 之间 remove time failover ali check ems 取数据
生产环境中的redis绝大多数是以集群形态运行的,这篇博文简要介绍分布式集群的原理、优势,然后描述配置过程。
redis集群的原理简要介绍如下
这里用6个实际来搭建集群,分为三组,每组包含一个主节点和一个从节点。搭建过程如下
yum install ruby rubygems -y ##使用国内源,移除原生源 gem sources -a http://mirrors.aliyun.com/rubygems/ gem sources --remove https://rubygems.org/ ##安装redis集群插件 gem install redis -v 3.3.3
准备6个节点,端口号分别为6391---6396,一个个vim太麻烦,所以写了一个脚本
[root@redis scripts]# cat create_redis_conf.sh #!/bin/bash port=$1 if [ ! -d /data/redis/$port ];then mkdir /data/redis/$port fi cat >/data/redis/${port}/redis.conf <<-EOF port ${port} daemonize yes pidfile /data/redis/${port}/redis.pid loglevel notice logfile "/data/redis/${port}/redis.log" dbfilename dump.rdb dir /data/redis/${port} protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes EOF
看看生成的配置文件内容吧
cat /data/redis/6391/redis.conf port 6391 daemonize yes pidfile /data/redis/6391/redis.pid loglevel notice logfile "/data/redis/6391/redis.log" dbfilename dump.rdb dir /data/redis/6391 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
然后用脚本生成6个节点的配置文件
sh create_redis_conf.sh 6391 sh create_redis_conf.sh 6392 sh create_redis_conf.sh 6393 sh create_redis_conf.sh 6394 sh create_redis_conf.sh 6395 sh create_redis_conf.sh 6396
启动节点并验证
##启动节点 redis-server /data/redis/6391/redis.conf redis-server /data/redis/6392/redis.conf redis-server /data/redis/6393/redis.conf redis-server /data/redis/6394/redis.conf redis-server /data/redis/6395/redis.conf redis-server /data/redis/6396/redis.conf ##验证,可以看到cluster关键字 ps -ef|grep redis root 46075 1 0 18:17 ? 00:00:00 redis-server *:6391 [cluster] root 46079 1 0 18:17 ? 00:00:00 redis-server *:6392 [cluster] root 46083 1 0 18:17 ? 00:00:00 redis-server *:6393 [cluster] root 46087 1 0 18:17 ? 00:00:00 redis-server *:6394 [cluster] root 46091 1 0 18:17 ? 00:00:00 redis-server *:6395 [cluster] root 46095 1 0 18:17 ? 00:00:00 redis-server *:6396 [cluster]
还可以连接到主节点后,写入数据,从本身节点或相应的从节点读取,来验证各个节点的可用性。
redis-trib.rb create --replicas 1 127.0.0.1:6391 127.0.0.1:6392 127.0.0.1:6393 127.0.0.1:6394 127.0.0.1:6395 127.0.0.1:6396 ##--replicas 1表示为每个主节点配置一个从节点 ##执行语句后,会有互动性操作,根据提示,键入yes,然后enter确认即可
这里有几条命令,作用如下表,每条命令中只需要指定集群中任意一个节点就行
命令 | 作用说明 |
redis-cli -p 6391 cluster nodes | grep master | 查看集群主节点状态 |
redis-cli -p 6391 cluster nodes | grep slave | 查看集群从节点状态 |
redis-trib.rb check 127.0.0.1:6391 | 打印集群中所有节点的id、槽位和主从信息 |
redis-trib.rb info 127.0.0.1:6391 | 打印集群中所有主节点的基本信息,包含key数量、槽位信息和从节点数量 |
6391掉线后,6394切换为主节点;6391重启后,作为6394的从节点继续运行。
这里以添加一主一从两个节点为例,其中添加主节点涉及到重新分配槽位的操作,意思就是将集群所有的槽位重新分配。
###准备两个新的节点 sh create_redis_conf.sh 6397 sh create_redis_conf.sh 6398 redis-server /data/redis/6397/redis.conf redis-server /data/redis/6398/redis.conf ###添加主节点 redis-trib.rb check 127.0.0.1:6397 ###查看主节点状态,这时新加的节点槽位数为0 redis-cli -p 6391 cluster nodes|grep master 67adb78e575232aebaf2c645d45a50e43d8a1df9 127.0.0.1:6397 master - 0 1554636369693 0 connected db83ce3e3f67714eb1db7285cc293acac1421834 127.0.0.1:6394 master - 0 1554636370196 7 connected 0-5460 771488ef6f90180b7bcb1968329d6847055ad926 127.0.0.1:6392 master - 0 1554636369693 2 connected 5461-10922 eb3965cc6ea8b0ff8f134a545fcefe5c102fa2d6 127.0.0.1:6393 master - 0 1554636371204 3 connected 10923-16383 ###重新分配槽位,先计算一下,所有节点均匀分配的话,每个节点槽位数应该是4096 ###重新分配槽位的操作需要交互式配置,根据提示操作即可,这里贴出需要人工输入的部分,标红的就是需要输入的内容 redis-trib.rb reshard 127.0.0.1:6391 How many slots do you want to move (from 1 to 16384)? 4096 ### 移动槽位的数量 What is the receiving node ID? 67adb78e575232aebaf2c645d45a50e43d8a1df9 ### 接受槽位的master节点id Please enter all the source node IDs. Type ‘all‘ to use all the nodes as source nodes for the hash slots. Type ‘done‘ once you entered all the source nodes IDs. Source node #1:all ### 从哪些节点移出槽位,all表示从之前所有的节点平均移出槽位到目标节点 Do you want to proceed with the proposed reshard plan (yes/no)? yes ### 确认槽位移动
redis-trib.rb add-node --slave --master-id 67adb78e575232aebaf2c645d45a50e43d8a1df9 127.0.0.1:6398 127.0.0.1:6391
这里以删除上面添加的两个节点为例,删除节点也需要重新分配槽位,可以将目标节点的槽位分配给某一个节点,然后删除主从两个节点即可。
重新分配目标节点的槽位:
redis-trib.rb reshard 127.0.0.1:6391 How many slots do you want to move (from 1 to 16384)? 4096 What is the receiving node ID? 771488ef6f90180b7bcb1968329d6847055ad926 Please enter all the source node IDs. Type ‘all‘ to use all the nodes as source nodes for the hash slots. Type ‘done‘ once you entered all the source nodes IDs. Source node #1:67adb78e575232aebaf2c645d45a50e43d8a1df9 Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes
删除主从节点
redis-trib.rb del-node 127.0.0.1:6397 67adb78e575232aebaf2c645d45a50e43d8a1df9 redis-trib.rb del-node 127.0.0.1:6398 dfe712916c932fe54b5ca1f3d223aedc98c8ad2e
删除后按照前文的方法,验证集群状态
标签:rdb 之间 remove time failover ali check ems 取数据
原文地址:https://www.cnblogs.com/Go-Spurs-Go/p/10666810.html