设为首页 收藏本站
查看: 783|回复: 0

[经验分享] IX redis(2)

[复制链接]

尚未签到

发表于 2018-11-4 11:21:07 | 显示全部楼层 |阅读模式
  IX redis(2)集群
  redis是一个开源的,使用C语言编写、支持网络交互、可基于内存也可持久化的key-value数据库,sina微博使用redis集群;
  redis.io;
  redisdoc.com;
  redis和memcached对比:
  memcached
  redis
  类型
  key-value DB
  key-value DB
  过期策略
  支持
  支持
  数据类型
  单一数据类型
  五种数据类型
  持久化
  不支持
  支持
  主从复制
  不支持
  支持
  虚拟内存
  不支持
  支持
DSC0000.jpg

  memcached用于session;
  redis用于购物车;
  redis集群(客户端分片;proxy;rediscluster(客户端缺失);codis;codisproxy-codis-server(dashboard));
  #vim /etc/sysctl.conf
  net.core.somaxconn = 2048
  vm.overcommit_memory = 1
  #sysctl -p
  #cat /sys/kernel/mm/transparent_hugepage/enabled
  [always] madvise never
  #echo never > /sys/kernel/mm/transparent_hugepage/enabled   #(redis3.0.7需调整,否则启动时会警告)
  #cat /sys/kernel/mm/transparent_hugepage/enabled
  always madvise [never]
  #vim /etc/rc.local
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
  [root@test1 ~]# cd /usr/local/src
  [root@test1 src]# tar xf redis-3.0.7.tar.gz
  [root@test1 src]# cd redis-3.0.7
  [root@test1 redis-3.0.7]# less README
  [root@test1 redis-3.0.7]# make PREFIX=/usr/local/redis install   #(生产环境中编译时要确定已安装gcc环境,#yum -y install gcc,否则会报错如下:
  /bin/sh: cc: command not found
  make[1]: *** [adlist.o] Error 127
  make[1]: Leaving directory`/ane/redis-3.0.7/src'
  make: *** [install] Error 2)
  [root@test1 redis-3.0.7]# cp utils/redis_init_script /etc/init.d/redis
  [root@test1 redis-3.0.7]# chmod 755 !$
  chmod 755 /etc/init.d/redis
  [root@test1 redis-3.0.7]# vim !$
  vim /etc/init.d/redis
  # chkconfig: 2345  56 44
  # description: redis daemon
  EXEC=/usr/local/redis/bin/redis-server
  CLIEXEC=/usr/local/redis/bin/redis-cli
  [root@test1 redis-3.0.7]# chkconfig --add redis
  [root@test1 redis-3.0.7]# chkconfig --list redis
  redis               0:off 1:off 2:on 3:on 4:on 5:on 6:off
  [root@test1 redis-3.0.7]# mkdir /etc/redis
  [root@test1 redis-3.0.7]# cp redis.conf/etc/redis/6379.conf
  [root@test1 redis-3.0.7]# vim /etc/redis/6379.conf
  daemonize yes
  pidfile /var/run/redis_6379.pid   #(与启动脚本/etc/init.d/redis相同)
  dbfilename dump_6379.rdb
  dir /usr/local/redis/6379/
  [root@test1 redis-3.0.7]# mkdir /usr/local/redis/6379
  [root@test1 redis-3.0.7]# service redis start
  Starting Redis server...
  [root@test1 redis-3.0.7]# netstat -tnulp | grep redis
  tcp       0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      119100/redis-server
  tcp       0      0 :::6379                     :::*                        LISTEN      119100/redis-server
  [root@test1 redis-3.0.7]# /usr/local/redis/bin/redis-cli
  127.0.0.1:6379> exit
  [root@test1 redis-3.0.7]# /etc/init.d/redis stop
  Stopping ...
  Waiting for Redis to shutdown ...
  Redis stopped
  redis数据类型:
  类型不能嵌套,不能混;各类型有各自的命令;
  string字符串类型(SET、GET、DEL、APPEND、STRLEN、MGET、MSET、INCR、INCRBY、DECR、DECRBY、INCRBYFLOAT),SET是王炸,任何类型只要用SET都会变为string类型;
  hash散列类型:
  HSET key field value
  HGET key field
  HMSET key field value [field values……]
  HMGET key field [field……]
  HGETALL key
  HDEL key field
  HEXISTS key field
  EXISTS key;
  list列表类型(时间复杂度O(1)):
  LPUSH key value [value……]   #(left)
  RPUSH key value [value……]   #(right)
  LPOP key
  RPOP key
  LRANGE key START STOP
  LREM key count value   #(remove)
  LLEN key
  LINDEX key INDEX
  LTRIM key INDEX_START INDEX_STOP   #(只保留指定的范围,常用于写日志,一边写一边出)
  SET集合类型:
  SADD key member [member……]
  SREM key member [member……]
  SMEMBERS key
  SISMEMBER key member
  SDIFF key [key……]   #(差集)
  SINTER key [key……]   #(交集)
  SUNION key [key……]   #(并集)
  sortedset有序集合:
  ZADD key score member   #(增加元素)
  ZSCORE key member   #(获得元素的分数)
  ZRANGE key START STOP [WITH SCORES]
  ZRANGEBYSCORE key min max
  redis,pub/sub:
  #redis-cli
  >SUBSCRIBE channel1
  >PUBLISH channel1 test_string1   #(在另一终端上执行)
  redis,transaction:
  >MULTI
  > execute sentence……
  >……
  >……
  >EXEC
  redis,在线改配置:
  >CONFIG SET ……
  redis持久化(RDB、AOF):
  类似oracle的逻辑备库,mysql的binlog;
  RDB:
  save 900 1
  save 300 10
  save 60 10000
  dbfilename dump_6379.rdb
  dir /usr/local/redis/6379/
  AOF:
  appendonly yes
  appendfilename "appendonly.aof"
  redis主从复制(6379为主,6380为从):
  [root@test1 ~]# cd /etc/redis/
  [root@test1 redis]# cp 6379.conf 6380.conf
  [root@test1 redis]# ll
  total 88
  -rw-r--r--. 1 root root 41592 Nov 14 19:266379.conf
  -rw-r--r--. 1 root root 41592 Nov 14 21:426380.conf
  [root@test1 redis]# vim 6380.conf
  :%s/6379/6380/g
  [root@test1 redis]# mkdir /usr/local/redis/6380/
  [root@test1 redis]# /usr/local/redis/bin/redis-server 6379.conf
  [root@test1 redis]# netstat -tnulp | grep redis
  tcp       0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      126880/redis-server
  tcp       0      0 0.0.0.0:6380                0.0.0.0:*                   LISTEN      126967/redis-server
  tcp       0      0 :::6379                     :::*                        LISTEN      126880/redis-server
  tcp       0      0 :::6380                     :::*                        LISTEN      126967/redis-server
  [root@test1 redis]# /usr/local/redis/bin/redis-cli -h 192.168.23.129 -p 6379
  192.168.23.129:6379> info
  ……
  # Replication
  role:master
  connected_slaves:0
  master_repl_offset:0
  repl_backlog_active:0
  repl_backlog_size:1048576
  repl_backlog_first_byte_offset:0
  repl_backlog_histlen:0
  ……
  192.168.23.129:6379> exit
  [root@test1 redis]# /usr/local/redis/bin/redis-cli -h 192.168.23.129 -p 6380
  192.168.23.129:6380> info
  ……
  # Replication
  role:master
  connected_slaves:0
  master_repl_offset:0
  repl_backlog_active:0
  repl_backlog_size:1048576
  repl_backlog_first_byte_offset:0
  repl_backlog_histlen:0
  ……
  192.168.23.129:6380> slaveof 192.168.23.129 6379   #(在作为从的服务器上执行此条命令,或直接写到6380的配置文件中)
  OK
  192.168.23.129:6380> info
  ……
  # Replication
  role:slave
  master_host:192.168.23.129
  master_port:6379
  master_link_status:up
  master_last_io_seconds_ago:3
  master_sync_in_progress:0
  slave_repl_offset:1
  slave_priority:100
  slave_read_only:1
  connected_slaves:0
  master_repl_offset:0
  repl_backlog_active:0
  repl_backlog_size:1048576
  repl_backlog_first_byte_offset:0
  repl_backlog_histlen:0
  ……
  测试:
  [root@test1 ~]# /usr/local/redis/bin/redis-cli -h 192.168.23.129 -p 6379
  192.168.23.129:6379> keys *
  (empty list or set)
  192.168.23.129:6379> set key1 value1   #(在主上创建)
  OK
  192.168.23.129:6379> keys *
  1) "key1"
  192.168.23.129:6380> keys *   #(在从上查看)
  1) "key1"
  192.168.23.129:6380> get key1
  "value1"
  [root@test1 ~]# /usr/local/redis/bin/redis-cli -p 6379 shutdown
  [root@test1 ~]# /usr/local/redis/bin/redis-cli -p 6380 shutdown
  redis集群:
  http://redisdoc.com/topic/cluster-tutorial.html
  方案有:
  客户端分片;
  proxy,twemproxy;
  redis cluster,无中心;
  豌豆荚codis;
  Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation);Redis 集群不支持那些需要同时处理多个键的 Redis 命令,因为执行这些命令需要在多个 Redis 节点之间移动数据,并且在高负载的情况下,这些命令将降低 Redis集群的性能,并导致不可预测的行为;Redis 集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求;
  Redis 集群提供了以下两个好处:将数据自动切分(split)到多个节点的能力;当集群中的一部分节点失效或者无法进行通讯时,仍然可以继续处理命令请求的能力;
  Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现:一个 Redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个键都属于这 16384 个哈希槽的其中一个,集群使用公式 CRC16(key) % 16384 来计算键key属于哪个槽,其中 CRC16(key) 语句用于计算键key的CRC16 校验和;
  集群中的每个节点负责处理一部分哈希槽,举个例子,一个集群可以有三个哈希槽,其中:
  节点 A 负责处理 0 号至 5500 号哈希槽,
  节点 B 负责处理 5501 号至 11000 号哈希槽,
  节点 C 负责处理 11001 号至 16384 号哈希槽,
  这种将哈希槽分布到不同节点的做法使得用户可以很容易地向集群中添加或者删除节点,比如说:如果用户将新节点D添加到集群中,那么集群只需要将节点A、B、C中的某些槽移动到节点 D 就可以了;与此类似,如果用户要从集群中移除节点A,那么集群只需要将节点A中的所有哈希槽移动到节点B和节点C,然后再移除空白(不包含任何哈希槽)的节点 A 就可以了;因为将一个哈希槽从一个节点移动到另一个节点不会造成节点阻塞,所以无论是添加新节点还是移除已存在节点,又或者改变某个节点包含的哈希槽数量,都不会造成集群下线;
  为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下,仍然可以正常运作,Redis集群对节点使用了主从复制功能:集群中的每个节点都有1个至N个复制品(replica),其中一个复制品为主节点(master),而其余的 N-1 个复制品为从节点(slave);
  在之前列举的节点A、B、C的例子中,如果节点B下线了,那么集群将无法正常运行,因为集群找不到节点来处理 5501号至11000号的哈希槽;另一方面,假如在创建集群的时候(或者至少在节点B下线之前),我们为主节点B添加了从节点B1,那么当主节点B下线的时候,集群就会将B1设置为新的主节点,并让它代替下线的主节点B,继续处理 5501 号至11000号的哈希槽,这样集群就不会因为主节点B的下线而无法正常运作了;不过如果节点B和B1 都下线的话,Redis 集群还是会停止运作;
  Redis集群不保证数据的强一致性(strong consistency):在特定条件下,Redis 集群可能会丢失已经被执行过的写命令;
  使用异步复制(asynchronous replication)是Redis集群可能会丢失写命令的其中一个原因,考虑以下这个写命令的例子:
  客户端向主节点B发送一条写命令,
  主节点B执行写命令,并向客户端返回命令回复,
  主节点B将刚刚执行的写命令复制给它的从节点B1、B2和B3,
  如你所见,主节点对命令的复制工作发生在返回命令回复之后,因为如果每次处理命令请求都需要等待复制操作完成的话,那么主节点处理命令请求的速度将极大地降低,我们必须在性能和一致性之间做出权衡;
  如果真的有必要的话,Redi集群可能会在将来提供同步地(synchronous)执行写命令的方法,Redis集群另外一种可能会丢失命令的情况是,集群出现网络分裂(network partition),并且一个客户端与至少包括一个主节点在内的少数(minority)实例被孤立;
  举个例子,假设集群包含A、B、C、A1、B1、C1六个节点,其中A、B、C为主节点,而A1、B1、C1分别为三个主节点的从节点,另外还有一个客户端 Z1,假设集群中发生网络分裂,那么集群可能会分裂为两方,大多数(majority)的一方包含节点A、C、A1、B1和C1,而少数(minority)的一方则包含节点B和客户端Z1,在网络分裂期间,主节点B仍然会接受 Z1发送的写命令,如果网络分裂出现的时间很短,那么集群会继续正常运行;但是,如果网络分裂出现的时间足够长,使得大多数一方将从节点B1设置为新的主节点,并使用B1来代替原来的主节点B,那么Z1发送给主节点 B的写命令将丢失;
  注意,在网络分裂出现期间,客户端Z1可以向主节点B发送写命令的最大时间是有限制的,这一时间限制称为节点超时时间(node timeout),是Redis集群的一个重要的配置选项:对于大多数一方来说,如果一个主节点未能在节点超时时间所设定的时限内重新联系上集群,那么集群会将这个主节点视为下线,并使用从节点来代替这个主节点继续工作;
  对于少数一方,如果一个主节点未能在节点超时时间所设定的时限内重新联系上集群,那么它将停止处理写命令,并向客户端报告错误;
  操作:
  集群中有7001、7002、7003、7004、7005、7006,其中7004、7005、7006分别为7001、7002、7003的从;
  [root@test1 ~]# cd /opt
  [root@test1 opt]# mkdir `seq 7001 7008`
  [root@test1 opt]# ls
  7001 7002  7003  7004 7005  7006  7007 7008  rh
  [root@test1 opt]# cp /etc/redis/6379.conf /opt/7001/7001.conf
  [root@test1 opt]# vim /opt/7001/7001.conf
  daemonize yes
  pidfile /var/run/redis_7001.pid
  port 7001
  logfile "/opt/7001/7001.log"
  dbfilename dump_7001.rdb
  dir /opt/7001/
  cluster-enabled yes
  cluster-config-filenodes-7001.conf
  cluster-node-timeout 15000
  [root@test1 opt]# sed 's/7001/7002/g'/opt/7001/7001.conf >> /opt/7002/7002.conf
  [root@test1 opt]# sed 's/7001/7003/g'/opt/7001/7001.conf >> /opt/7003/7003.conf
  [root@test1 opt]# sed 's/7001/7004/g'/opt/7001/7001.conf >> /opt/7004/7004.conf
  [root@test1 opt]# sed 's/7001/7005/g'/opt/7001/7001.conf >> /opt/7005/7005.conf
  [root@test1 opt]# sed 's/7001/7006/g'/opt/7001/7001.conf >> /opt/7006/7006.conf
  [root@test1 opt]# fori in `seq 7001 7006` ; do /usr/local/redis/bin/redis-server /opt/$i/$i.conf ;done
  [root@test1 opt]# netstat -tnulp | grep redis
  tcp       0      0 0.0.0.0:17003               0.0.0.0:*                   LISTEN      129644/redis-server
  tcp       0      0 0.0.0.0:17004               0.0.0.0:*                   LISTEN      129646/redis-server
  tcp       0      0 0.0.0.0:17005               0.0.0.0:*                   LISTEN      129654/redis-server
  tcp       0      0 0.0.0.0:17006               0.0.0.0:*                   LISTEN      129658/redis-server
  tcp       0      0 0.0.0.0:7001                0.0.0.0:*                   LISTEN      129640/redis-server
  tcp       0      0 0.0.0.0:7002                0.0.0.0:*                   LISTEN      129642/redis-server
  tcp       0      0 0.0.0.0:7003                0.0.0.0:*                   LISTEN      129644/redis-server
  tcp       0      0 0.0.0.0:7004                0.0.0.0:*                   LISTEN     129646/redis-server
  tcp       0      0 0.0.0.0:7005                0.0.0.0:*                   LISTEN      129654/redis-server
  tcp       0      0 0.0.0.0:7006                0.0.0.0:*                   LISTEN      129658/redis-server
  tcp       0      0 0.0.0.0:17001               0.0.0.0:*                   LISTEN      129640/redis-server
  tcp       0      0 0.0.0.0:17002               0.0.0.0:*                   LISTEN      129642/redis-server
  tcp       0      0 :::17003                    :::*                        LISTEN      129644/redis-server
  tcp       0      0 :::17004                    :::*                        LISTEN      129646/redis-server
  tcp       0      0 :::17005                    :::*                        LISTEN      129654/redis-server
  tcp       0      0 :::17006                    :::*                        LISTEN      129658/redis-server
  tcp       0      0 :::7001                     :::*                        LISTEN      129640/redis-server
  tcp       0      0 :::7002                     :::*                        LISTEN      129642/redis-server
  tcp       0      0 :::7003                     :::*                        LISTEN      129644/redis-server
  tcp        0     0 :::7004                    :::*                        LISTEN      129646/redis-server
  tcp       0      0 :::7005                     :::*                        LISTEN      129654/redis-server
  tcp       0      0 :::7006                     :::*                        LISTEN      129658/redis-server
  tcp       0      0 :::17001                    :::*                        LISTEN      129640/redis-server
  tcp       0      0 :::17002                    :::*                        LISTEN      129642/redis-server
  使用redis-trib.rb,ruby脚本管理集群,要先安装ruby环境,再安装ruby与redis的接口;
  [root@test1 opt]# yum -y install ruby rubygems [ruby-devel] #(安装ruby环境;RubyGems,简称 gems,是一个用于对 Ruby组件进行打包的Ruby打包系统,它提供一个分发Ruby程序和库的标准格式,还提供一个管理程序包安装的工具,RubyGems的功能类似于Linux下的apt-get,使用它可以方便第从远程服务器下载并安装Rails)
  [root@test1 opt]# gem install redis   #(安装ruby与redis的接口)
  Successfully installed redis-3.3.1
  1 gem installed
  Installing ri documentation forredis-3.3.1...
  Installing RDoc documentation forredis-3.3.1...
  [root@test1 opt]# ln -sv /usr/local/src/redis-3.0.7/src/redis-trib.rb /usr/local/bin/
  `/usr/local/bin/redis-trib.rb' ->`/usr/local/src/redis-3.0.7/src/redis-trib.rb'
  注:
  #gem list
  #gem sources -l
  #gem sources --add https://gems.ruby-china.org/  --remove http://rubygems.org/
  #gem uninstall redis --version 3.3.1
  #gem install redis --version 3.0.7
  [root@test1 opt]# redis-trib.rb help
  Usage: redis-trib  
  add-node        new_host:new_portexisting_host:existing_port
  --master-id
  --slave
  check           host:port
  help            (show this help)
  call            host:port commandarg arg .. arg
  del-node        host:port node_id
  reshard         host:port
  --from
  --timeout
  --pipeline
  --yes
  --slots
  --to
  create          host1:port1 ... hostN:portN
  --replicas
  import          host:port
  --from
  --copy
  --replace
  set-timeout     host:portmilliseconds
  rebalance       host:port
  --timeout
  --pipeline
  --simulate
  --use-empty-masters
  --weight
  --threshold
  --auto-weights
  fix             host:port
  --timeout
  info            host:port
  For check, fix, reshard, del-node,set-timeout you can specify the host and port of any working node in thecluster.
  [root@test1 opt]# redis-trib.rb create --replicas 1 192.168.23.129:7001 192.168.23.129:7002 192.168.23.129:7003192.168.23.129:7004 192.168.23.129:7005 192.168.23.129:7006   #(依次按顺序创建,主为7001、7002、7003,7004、7005、7006分别为7001、7002、7003的从,注意分配的ID,靠ID来识别)
  >>> Creating cluster
  >>> Performing hash slotsallocation on 6 nodes...
  Using 3 masters:
  192.168.23.129:7001
  192.168.23.129:7002
  192.168.23.129:7003
  Adding replica 192.168.23.129:7004 to192.168.23.129:7001
  Adding replica 192.168.23.129:7005 to192.168.23.129:7002
  Adding replica 192.168.23.129:7006 to192.168.23.129:7003
  M: 908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001
  slots:0-5460 (5461 slots) master
  M: 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002
  slots:5461-10922 (5462 slots) master
  M: 9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003
  slots:10923-16383 (5461 slots) master
  S: 56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004
  replicates 908ff036d9ff445b74098ed9870566292c3dddeb
  S: e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005
  replicates 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c
  S: 84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006
  replicates 9d0f64162132dc02416f1217e60ae35b28d71274
  Can I set the above configuration? (type'yes' to accept): yes
  >>> Nodes configuration updated
  >>> Assign a different configepoch to each node
  >>> Sending CLUSTER MEET messagesto join the cluster
  Waiting for the cluster to join.....
  >>> Performing Cluster Check(using node 192.168.23.129:7001)
  M: 908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001
  slots:0-5460 (5461 slots) master
  M: 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002
  slots:5461-10922 (5462 slots) master
  M: 9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003
  slots:10923-16383 (5461 slots) master
  M: 56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004
  slots: (0 slots) master
  replicates 908ff036d9ff445b74098ed9870566292c3dddeb
  M: e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005
  slots: (0 slots) master
  replicates 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c
  M: 84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006
  slots: (0 slots) master
  replicates 9d0f64162132dc02416f1217e60ae35b28d71274
  [OK] All nodes agree about slotsconfiguration.
  >>> Check for open slots...
  >>> Check slots coverage...
  [OK] All 16384 slots covered.
  [root@test1 opt]# /usr/local/redis/bin/redis-cli -c -h 192.168.23.129 -p 7001
  192.168.23.129:7001> info
  ……
  # Replication
  role:master
  connected_slaves:1
  slave0:ip=192.168.23.129,port=7004,state=online,offset=449,lag=0
  master_repl_offset:449
  repl_backlog_active:1
  repl_backlog_size:1048576
  repl_backlog_first_byte_offset:2
  repl_backlog_histlen:448
  ……
  192.168.23.129:7001> cluster nodes
  204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002 master - 0 1479195195214 2 connected 5461-10922
  9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003 master - 0 1479195197228 3 connected 10923-16383
  56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004 slave 908ff036d9ff445b74098ed9870566292c3dddeb 01479195191182 4 connected
  908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001 myself,master - 0 0 1connected 0-5460
  84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006 slave 9d0f64162132dc02416f1217e60ae35b28d71274 01479195194205 6 connected
  e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005 slave 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c 01479195196221 5 connected
  192.168.23.129:7001> cluster info
  cluster_state:ok
  cluster_slots_assigned:16384
  cluster_slots_ok:16384
  cluster_slots_pfail:0
  cluster_slots_fail:0
  cluster_known_nodes:6
  cluster_size:3
  cluster_current_epoch:6
  cluster_my_epoch:1
  cluster_stats_messages_sent:850
  cluster_stats_messages_received:850
  添加新node(主为7007,7008为7007的从):
  [root@test1 opt]# sed 's/7001/7007/g'/opt/7001/7001.conf > /opt/7007/7007.conf
  [root@test1 opt]# sed 's/7001/7008/g'/opt/7001/7001.conf > /opt/7008/7008.conf
  [root@test1 opt]# for i in `seq 7007 7008`; do /usr/local/redis/bin/redis-server /opt/$i/$i.conf ; done
  [root@test1 opt]# netstat -tnlp | egrep '7007|7008'
  tcp       0      0 0.0.0.0:17007               0.0.0.0:*                   LISTEN      1442/redis-server *
  tcp       0      0 0.0.0.0:17008               0.0.0.0:*                   LISTEN      1444/redis-server *
  tcp       0      0 0.0.0.0:7007                0.0.0.0:*                   LISTEN      1442/redis-server *
  tcp       0      0 0.0.0.0:7008                0.0.0.0:*                   LISTEN      1444/redis-server *
  tcp       0      0 :::17007                    :::*                        LISTEN      1442/redis-server *
  tcp       0      0 :::17008                    :::*                        LISTEN      1444/redis-server *
  tcp       0      0 :::7007                     :::*                        LISTEN      1442/redis-server *
  tcp       0      0 :::7008                     :::*                        LISTEN      1444/redis-server *
  [root@test1 opt]# redis-trib.rb add-node 192.168.23.129:7007 192.168.23.129:7001   #(192.168.23.129:7007为新node,192.168.23.129:7001为集群中存在的node可以是7001-7006中的任何一个)
  >>> Adding node 192.168.23.129:7007to cluster 192.168.23.129:7001
  >>> Performing Cluster Check(using node 192.168.23.129:7001)
  M: 908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001
  slots:0-5460 (5461 slots) master
  1additional replica(s)
  M: 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002
  slots:5461-10922 (5462 slots) master
  1additional replica(s)
  M: 9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003
  slots:10923-16383 (5461 slots) master
  1additional replica(s)
  S: 56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004
  slots: (0 slots) slave
  replicates 908ff036d9ff445b74098ed9870566292c3dddeb
  S: 84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006
  slots: (0 slots) slave
  replicates 9d0f64162132dc02416f1217e60ae35b28d71274
  S: e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005
  slots: (0 slots) slave
  replicates 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c
  [OK] All nodes agree about slotsconfiguration.
  >>> Check for open slots...
  >>> Check slots coverage...
  [OK] All 16384 slots covered.
  >>> Send CLUSTER MEET to node192.168.23.129:7007 to make it join the cluster.
  [OK] New node added correctly.
  [root@test1 opt]# /usr/local/redis/bin/redis-cli -h 192.168.23.129 -p 7001
  192.168.23.129:7001> cluster nodes   #(新添的node,7007没有slots将无法写入)
  204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002 master - 0 1479195859314 2 connected 5461-10922
  9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003 master - 0 1479195855276 3 connected 10923-16383
  56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004 slave 908ff036d9ff445b74098ed9870566292c3dddeb 01479195860323 4 connected
  908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001 myself,master - 0 0 1 connected 0-5460
  84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006 slave 9d0f64162132dc02416f1217e60ae35b28d71274 01479195861332 6 connected
  c1b66f955d9831a30516b1ad7dc5529b5e37ea8d192.168.23.129:7007 master - 0 1479195860827 0 connected
  e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005 slave 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c 01479195858303 5 connected
  192.168.23.129:7001> exit
  [root@test1 opt]# /usr/local/redis/bin/redis-cli -h 192.168.23.129 -p 7001
  192.168.23.129:7001> cluster nodes
  204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002 master - 0 1479195859314 2 connected 5461-10922
  9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003 master - 0 1479195855276 3 connected 10923-16383
  56d6adfd7eda1049ef1ba79d6d505df61b979d45 192.168.23.129:7004 slave 908ff036d9ff445b74098ed9870566292c3dddeb 0 1479195860323 4 connected
  908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001 myself,master - 0 0 1 connected 0-5460
  84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006 slave 9d0f64162132dc02416f1217e60ae35b28d71274 01479195861332 6 connected
  c1b66f955d9831a30516b1ad7dc5529b5e37ea8d192.168.23.129:7007 master - 0 1479195860827 0 connected
  e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005 slave 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c 01479195858303 5 connected
  192.168.23.129:7001> exit
  [root@test1 opt]# redis-trib.rb reshard 192.168.23.129:7007   #(输入要迁出的哈希槽的数目;输入迁入哈希槽的目的节点ID;输入迁出哈希槽的源节点ID,可以是all;脚本会根据填入的信息自动执行迁移计划)
  >>> Performing Cluster Check(using node 192.168.23.129:7007)
  M: c1b66f955d9831a30516b1ad7dc5529b5e37ea8d192.168.23.129:7007
  slots: (0 slots) master
  0additional replica(s)
  M: 908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001
  slots:0-5460 (5461 slots) master
  1additional replica(s)
  S: 84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006
  slots: (0 slots) slave
  replicates 9d0f64162132dc02416f1217e60ae35b28d71274
  M: 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002
  slots:5461-10922 (5462 slots) master
  1additional replica(s)
  S: 56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004
  slots: (0 slots) slave
  replicates 908ff036d9ff445b74098ed9870566292c3dddeb
  M: 9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003
  slots:10923-16383 (5461 slots) master
  1additional replica(s)
  S: e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005
  slots: (0 slots) slave
  replicates 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c
  [OK] All nodes agree about slotsconfiguration.
  >>> Check for open slots...
  >>> Check slots coverage...
  [OK] All 16384 slots covered.
  How many slots do you want to move (from 1to 16384)? 4000

  What is the receiving node>
  Please enter all the source node>  Type 'all' to use all the nodes as source nodes for the hash slots.

  Type 'done' once you entered all the source nodes>  Source node #1:all
  ……
  Moving slot 12250 from 9d0f64162132dc02416f1217e60ae35b28d71274
  Moving slot 12251 from 9d0f64162132dc02416f1217e60ae35b28d71274
  Moving slot 12252 from 9d0f64162132dc02416f1217e60ae35b28d71274
  Moving slot 12253 from 9d0f64162132dc02416f1217e60ae35b28d71274
  Moving slot 12254 from 9d0f64162132dc02416f1217e60ae35b28d71274
  Moving slot 12255 from 9d0f64162132dc02416f1217e60ae35b28d71274
  Do you want to proceed with the proposedreshard plan (yes/no)? yes
  ……
  [root@test1 opt]# redis-trib.rb add-node 192.168.23.129:7008 192.168.23.129:7001   #(先将7008加入到集群中)
  ……
  [root@test1 opt]#/usr/local/redis/bin/redis-cli -h 192.168.23.129 -p 7001
  192.168.23.129:7001> cluster nodes
  204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002 master - 0 1479197010157 2 connected 6795-10922
  9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003 master - 0 1479197011167 3 connected 12256-16383
  56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004 slave 908ff036d9ff445b74098ed9870566292c3dddeb 01479197009148 4 connected
  908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001 myself,master - 0 0 1 connected 1333-5460
  84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006 slave 9d0f64162132dc02416f1217e60ae35b28d71274 01479197008138 6 connected
  932fe08667f7d1e2c3c2062721cdfdd467a87200192.168.23.129:7008 master - 0 1479197012177 0 connected
  c1b66f955d9831a30516b1ad7dc5529b5e37ea8d192.168.23.129:7007 master - 0 1479197009148 7 connected 0-1332 5461-679410923-12255
  e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005 slave 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c 01479197007633 5 connected
  192.168.23.129:7001> exit

  [root@test1 opt]# /usr/local/redis/bin/redis-cli -h 192.168.23.129 -p 7008   #(将7008设为7007的从,clusterreplicate 7007's>  192.168.23.129:7008> cluster nodes
  c1b66f955d9831a30516b1ad7dc5529b5e37ea8d 192.168.23.129:7007 master - 0 1479197224856 7 connected 0-1332 5461-6794 10923-12255
  204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002 master - 0 1479197228888 2 connected 6795-10922
  84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006 slave 9d0f64162132dc02416f1217e60ae35b28d71274 01479197227881 3 connected
  932fe08667f7d1e2c3c2062721cdfdd467a87200192.168.23.129:7008 myself,master - 0 0 0 connected
  9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003 master - 0 1479197229896 3 connected 12256-16383
  56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004 slave 908ff036d9ff445b74098ed9870566292c3dddeb 01479197225866 1 connected
  e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005 slave 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c 01479197228888 2 connected
  908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001 master - 0 1479197226872 1 connected 1333-5460
  192.168.23.129:7008> cluster replicate c1b66f955d9831a30516b1ad7dc5529b5e37ea8d
  OK
  192.168.23.129:7008> cluster nodes
  c1b66f955d9831a30516b1ad7dc5529b5e37ea8d192.168.23.129:7007 master - 0 1479197446839 7 connected 0-1332 5461-679410923-12255
  204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c192.168.23.129:7002 master - 0 1479197442801 2 connected 6795-10922
  84f715fdf90dcd6a060dc63387204eb9396e3470192.168.23.129:7006 slave 9d0f64162132dc02416f1217e60ae35b28d71274 01479197441790 3 connected
  932fe08667f7d1e2c3c2062721cdfdd467a87200192.168.23.129:7008 myself,slave c1b66f955d9831a30516b1ad7dc5529b5e37ea8d 0 0 0connected
  9d0f64162132dc02416f1217e60ae35b28d71274192.168.23.129:7003 master - 0 1479197447849 3 connected 12256-16383
  56d6adfd7eda1049ef1ba79d6d505df61b979d45192.168.23.129:7004 slave 908ff036d9ff445b74098ed9870566292c3dddeb 0 14791974488591 connected
  e4a3c90127e6573200a55448d122b457839e5d51192.168.23.129:7005 slave 204b6b8a7fb15f000a0e75c5224b6d4aa774ba6c 01479197445829 2 connected
  908ff036d9ff445b74098ed9870566292c3dddeb192.168.23.129:7001 master - 0 1479197443810 1 connected 1333-5460
  192.168.23.129:7008> exit
  [root@test1 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.23.129 -p 7001   #(要使用-c,支持集群模式,Enablecluster mode (follow -ASK and -MOVED redirections))
  192.168.23.129:7001> keys *
  (empty list or set)
  注:
  #./redis-trib.rb check 192.168.23.129:7001   #(检查集群)
  #./redis-cli -c -h 172.17.101.60 -p 7008
  >cluster replicate c1b66f955d9831a30516b1ad7dc5529b5e37ea8d   #(将7008设为7007的从)
  >cluster saveconfig
  redis工具:
  phpredisadmin
  [root@test1 ~]# yum -y install httpd php php-pecl-redis  #(Package php-redis is obsoleted by php-pecl-redis)
  [root@test1 ~]# cd /var/www/html
  [root@test1 html]# which git
  /usr/bin/git
  [root@test1 html]# git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git
  Initialized empty Git repository in/var/www/html/phpRedisAdmin/.git/
  remote: Counting objects: 598, done.
  remote: Total 598 (delta 0), reused 0(delta 0), pack-reused 598
  Receiving objects: 100% (598/598), 176.34KiB | 163 KiB/s, done.
  Resolving deltas: 100% (362/362), done.
  [root@test1 html]# cd phpRedisAdmin/
  [root@test1 phpRedisAdmin]# git clone https://github.com/nrk/predis.git vendor
  Initialized empty Git repository in/var/www/html/phpRedisAdmin/vendor/.git/
  remote: Counting objects: 22351, done.
  remote: Total 22351 (delta 0), reused 0(delta 0), pack-reused 22351
  Receiving objects: 100% (22351/22351), 4.84MiB | 275 KiB/s, done.
  Resolving deltas: 100% (15366/15366), done.
  [root@test1 phpRedisAdmin]# cd includes/
  [root@test1 includes]# ls
  common.inc.php              config.sample.inc.php  functions.inc.php  login.inc.php
  config.environment.inc.php  footer.inc.php         header.inc.php     page.inc.php
  [root@test1 includes]# cp config.sample.inc.php config.inc.php
  [root@test1 includes]# vim config.inc.php
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-630596-1-1.html 上篇帖子: redis.conf参数配置文件详解 下篇帖子: Redis单机版安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表