bei 发表于 2018-11-3 13:35:21

redis3-itboy的博客园

  前言:
  参考文档
  Redis官方集群指南:Redis cluster tutorial a“ Redis
  Redis官方集群规范:Redis Cluster Specification a“ Redis
  Redis集群指南(中文翻译,紧供参考):集群教程 — Redis 命令参考
  Redis集群规范(中文翻译,紧供参考):Redis 集群规范
  1、安装步骤
  1、依赖包
  yum install -y gcc tcl
  2、安装
  cd /usr/local/
  cp /tmp/redis-3.2.9.tar.gz .
  tar -zxvf redis-3.2.9.tar.gz
  make && make install
  mkdir -p /data/service/redis/redis_cluster/
  cd /data/service/redis/redis_cluster/
  mkdir -p 7111 7112 7113 7114 7115 7116
  mkdir /data/service/redis/redis_cluster/7111/log/
  mkdir /data/service/redis/redis_cluster/dumps
  3、修改配置文件,将配置文件拷贝到每个目录。
  port 7111
  pidfile "/data/service/redis/redis_cluster/7111/redis_7111.pid"
  loglevel verbose
  logfile "/data/service/redis/redis_cluster/log/redis_7111.log"
  daemonize yes
  databases 16
  timeout 0
  #客户端连接超时时间,0表示关闭
  tcp-backlog 511
  #确定tcp连接中已完成队列的长度。
  tcp-keepalive 60
  #检测客户端健康状态的时间,建议60s,单位是s。
  #maxmemory 8gb
  #使用内存最大值,多余的使用swap
  cluster-enabled yes
  cluster-config-file "/data/service/redis/redis_cluster/7111/nodes.conf"
  cluster-node-timeout 5000
  dir "/data/service/redis/redis_cluster/dumps"
  appendonly yes
  #aof重写
  appendfilename "7111.aof"
  appendfsync everysec
  #每秒写入一次,最优。
  no-appendfsync-on-rewrite no
  #在在aof-rewrite期间,不暂缓appendfsync文件同步。
  auto-aof-rewrite-percentage 100
  #当前写入日志文件的大小超过上一次rewrite之后的文件大小的百分之100时就是2倍时触发Rewrite
  auto-aof-rewrite-min-size 512mb
  #当aof大于512m 才写入硬盘。
  #aof-rewrite-incremental-fsyn yes
  #aof rewrite 过程,默认文件是增量同步策略。
  lua-time-limit 5000
  #一个Lua脚本最长的执行时间,单位为毫秒,默认是5000
  #notify-keyspace-events ""
  #按键通知事件,默认关闭
  bind 10.32.5.63
  protected-mode no
  masterauth "$1$9a$A3v2uy9"
  requirepass "$1$9a$A3v2uy9"
  cluster-migration-barrier 1
  slowlog-log-slower-than 10000
  slowlog-max-len 128
  hash-max-ziplist-entries 512
  hash-max-ziplist-value 64
  list-max-ziplist-entries 512
  list-max-ziplist-value 64
  set-max-intset-entries 512
  zset-max-ziplist-entries 128
  zset-max-ziplist-value 64
  activerehashing yes
  client-output-buffer-limit normal 0 0 0
  client-output-buffer-limit slave 256mb 64mb 60
  client-output-buffer-limit pubsub 32mb 8mb 60
  hz 10
  4、创建集群
  yum -y install ruby
  yum install ruby rubygems
  gem install redis
  修改密码文件
  /usr/lib/ruby/gems/1.8/gems/redis-3.3.3/lib/redis/client.rb
  # :password => nil,
  :password => '$1$9a$A3v2uy9',
  cd /usr/local/redis/src
  ./redis-trib.rb create --replicas 1 10.32.5.63:7111 10.32.5.63:7112 10.32.5.63:7113 10.32.5.63:7114 10.32.5.63:7115 10.32.5.63:7116 10.32.5.63:7117 10.32.5.63:7118 10.32.5.63:7119 10.32.5.64:7121 10.32.5.64:7122 10.32.5.64:7123 10.32.5.64:7124 10.32.5.64:7125 10.32.5.64:7126 10.32.5.64:7127 10.32.5.64:7128 10.32.5.64:7129
  5、创建启动脚本
  6、登录
  redis-cli -c -h 10.32.5.63 -p 7111 -a '$1$9a$A3v2uy9'
  7、集群客户端
  10.32.5.64:7124> GET foo
  "bar"
  10.32.5.64:7122>
  # redis-cli -c -h 10.32.5.63 -p 7111 -a '$1$9a$A3v2uy9'
  10.32.5.63:7111> get foo
  -> Redirected to slot located at 10.32.5.64:7124
  "bar"
  8、重新划分100个槽位,到本节点。
  ./redis-trib.rb reshard 10.32.5.63:7111
  9、计数器
  计数器的值只能增加,不能减少。
  10、故障转移测试。
  1、查看主节点
  # redis-cli -h 10.32.5.63 -p 7111 -a '$1$9a$A3v2uy9' cluster nodes |grep master
  9a731c78db51c7d9af039c9e1b8240b2bc6174d5 10.32.5.63:7111 myself,master - 0 0 1 connected 1820-3640
  16cd1198a3317d32682e0b17edcd842bc61306ef 10.32.5.63:7112 master - 0 1499051510616 2 connected 5461-7281
  de651d85822eb2caaa0054b72bb765e950ec66d9 10.32.5.64:7121 master - 0 1499051511617 10 connected 0-1819
  ef2d23168a9e4856ef94e19074fa55f239b880ad 10.32.5.64:7123 master - 0 1499051511718 12 connected 7282-9101
  851818450b44a179fa25a0ed0667de5f0e618cd3 10.32.5.63:7113 master - 0 1499051511717 3 connected 9102-10922
  7b226249af22cfa67bfb15e676c8934e6e4c691d 10.32.5.64:7124 master - 0 1499051511718 13 connected 10923-12742
  166116e0e76a2699d4471319306dfc99e246f760 10.32.5.64:7125 master - 0 1499051510115 14 connected 14564-16383
  a83ec82fd0e3053e0882337a72c7affb70563d8a 10.32.5.63:7114 master - 0 1499051511117 4 connected 12743-14563
  4c402d2324a94228d3cd63235c0acd4ba3547d03 10.32.5.64:7122 master - 0 1499051510617 11 connected 3641-5460
  2、关闭一个主节点
  # redis-cli -c -h 10.32.5.63 -p 7112 -a '$1$9a$A3v2uy9' debug segfault
  Error: Server closed the connection
  3、检查主节点
  # redis-cli -h 10.32.5.63 -p 7111 -a '$1$9a$A3v2uy9' cluster nodes |grep master
  9a731c78db51c7d9af039c9e1b8240b2bc6174d5 10.32.5.63:7111 myself,master - 0 0 1 connected 1820-3640
  53494b5e18c726b8f75001c069940e740c6dcb6d 10.32.5.64:7127 master - 0 1499051716944 19 connected 5461-7281
  16cd1198a3317d32682e0b17edcd842bc61306ef 10.32.5.63:7112 master,fail - 1499051659552 1499051657348 2 disconnected
  de651d85822eb2caaa0054b72bb765e950ec66d9 10.32.5.64:7121 master - 0 1499051717946 10 connected 0-1819
  ef2d23168a9e4856ef94e19074fa55f239b880ad 10.32.5.64:7123 master - 0 1499051718446 12 connected 7282-9101
  851818450b44a179fa25a0ed0667de5f0e618cd3 10.32.5.63:7113 master - 0 1499051718446 3 connected 9102-10922
  7b226249af22cfa67bfb15e676c8934e6e4c691d 10.32.5.64:7124 master - 0 1499051718948 13 connected 10923-12742
  166116e0e76a2699d4471319306dfc99e246f760 10.32.5.64:7125 master - 0 1499051718948 14 connected 14564-16383
  a83ec82fd0e3053e0882337a72c7affb70563d8a 10.32.5.63:7114 master - 0 1499051717445 4 connected 12743-14563
  4c402d2324a94228d3cd63235c0acd4ba3547d03 10.32.5.64:7122 master - 0 1499051718948 11 connected 3641-5460
  #
  从节点升级为主节点。启动7112,发现7112变成从节点。
  # redis-cli -h 10.32.5.63 -p 7111 -a '$1$9a$A3v2uy9' cluster nodes
  53494b5e18c726b8f75001c069940e740c6dcb6d 10.32.5.64:7127 master - 0 1499052056521 19 connected 5461-7281
  53494b5e18c726b8f75001c069940e740c6dcb6d 0 1499052058824 19 connected
  cluster nodes 命令的输出有点儿复杂, 它的每一行都是由以下信息组成的:

[*]  节点>3fc783611028b1707fd65345e763befb36454d73 。
[*]  ip:port :节点的 IP 地址和端口号, 例如 127.0.0.1:7000 , 其中 :0 表示的是客户端当前连接的 IP 地址和端口号。
[*]  flags :节点的角色(例如 master 、 slave 、 myself )以及状态(例如 fail ,等等)。
[*]  如果节点是一个从节点的话, 那么跟在 flags 之后的将是主节点的节点>127.0.0.1:7002 的主节点的节点>3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 。
[*]  集群最近一次向节点发送 PING 命令之后, 过去了多长时间还没接到回复。
[*]  节点最近一次返回 PiNG 回复的时间。
[*]  节点的配置纪元(configuration epoch):详细信息请参考 Redis 集群规范 。
[*]  本节点的网络连接情况:例如 connected 。
[*]  节点目前包含的槽:例如 127.0.0.1:7001 目前包含号码为 5960 至 10921 的哈希槽。
  11、添加节点到集群
  1、配置启动新节点
  2、添加主节点
  /redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7111
  3、添加作为从节点,作为随机的从节点。
./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000  4、指定做为从节点
./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000  5、新添加节点为空主机,使用replicate复制到副本中。如果丐姐蒂娜是从属节点,但是要将其作为不通的主节点的副本移动。此功能也起作用。
  添加从节点:
redis 127.0.0.1:7006> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912eredis-cli -p 7000 cluster nodes | grep slave | grep 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e  
f093c80dde814da99c5cf72a7dd01590792b783b 127.0.0.1:7006 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617702 3 connected
  
2938205e12de373867bf38f1ca29d31d0ddb3e46 127.0.0.1:7002 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617198 3 connected
  12、删除节点:
    1、删除从节点  
       ./redis-trib del-node 127.0.0.1:7000 ``
  2、删除主节点
  1、减少主节点数量,先把主节点变成为空节点
  2、删除主节点的另一种方法是在其从站之一上执行手动故障切换,并在将节点变为新主节点的从属节点后将其删除
  13、副本迁移。
CLUSTER REPLICATE   14、升级Redis群集中的节点
  15、迁移到Redis群集


页: [1]
查看完整版本: redis3-itboy的博客园