redis常用操作命令学习笔记

1、查看redis实例路径
   cd /usr/local/server/redis (3.0之前的版本)
   cd /usr/local/server/redis_cluster (3.0以后的版本)

2、启动redis实例方式
   如:./8001/script/start.sh (多個端口重複執行)

3、查看已运行的redis
   ps auxf | grep redis-server
   ps -ef |grep redis

4、查看端口占用情况
   netstat -tunlp|grep 端口号

===========================================================================================================================
创建集群
create命令可选replicas参数,replicas表示需要有几个slave。

 0个slave,配置如下:
/usr/local/src/redis-3.0.2/src/redis-trib.rb create --replicas 0 127.0.0.1:1001 127.0.0.1:1002 127.0.0.1:1003 127.0.0.1:1004

 1个slave,配置如下
/usr/local/src/redis-3.0.2/src/redis-trib.rb create --replicas 1 127.0.0.1:1001 127.0.0.1:1002 127.0.0.1:1003 127.0.0.1:1004
 
 具体创建流程:
  1、为每个节点创建ClusterNode对象,检查每个节点是否为独立且db为空的节点,执行load_info方法导入节点信息。
  2、检查传入的master节点数量是否大于等于3(大于3个节点才能组成集群)。
  3、计算每个master需要分配的slot数量,以及给master分配slave。
  4、打印出分配信息,并提示用户输入“yes”确认是否按照打印出来的分配方式创建集群。
  5、输入“yes”后,会执行flush_nodes_config操作,该操作执行前面的分配结果,给master分配slot,让slave复制master,对于还没有握手(cluster meet)的节点,slave复制操作无法完成,不过没关系,flush_nodes_config操作出现异常会很快返回,后续握手
后会再次执行flush_nodes_config。
  6、给每个节点分配epoch,遍历节点,每个节点分配的epoch比之前节点大1。
  7、节点间开始相互握手,握手的方式为节点列表的其他节点跟第一个节点握手。
  8、然后每隔1秒检查一次各个节点是否已经消息同步完成,使用ClusterNode的get_config_signature方法,检查的算法为获取每个节点cluster nodes信息,排序每个节点,组装成node_id1:slots|node_id2:slot2|...的字符串。如果每个节点获得字符串都相同,即
认为握手成功。
  9、此后会再执行一次flush_nodes_config,这次主要是为了完成slave复制操作。
  10、最后再执行check_cluster,全面检查一次集群状态。包括和前面握手时检查一样的方式再检查一遍。确认没有迁移的节点。确认所有的slot都被分配出去了。
  11、至此完成了整个创建流程,返回[OK] All 16384 slots covered.。
===========================================================================================================================
检查集群
检查集群状态的命令,没有其他参数,只需要选择一个集群中的一个节点即可。执行命令以及结果如下:
$ruby redis-trib.rb check 127.0.0.1:1001 (路径如:cd /usr/local/bin/src/redis-3.0.3/src)

新增节点加入集群
add-node命令可以将新节点加入集群,节点可以为master,也可以为某个master节点的slave。
格式如下:
add-node    new_host:new_port existing_host:existing_port
          --slave
          --master-id <arg>
add-node有两个可选参数:
  --slave:设置该参数,则新节点以slave的角色加入集群
  --master-id:这个参数需要设置了--slave才能生效,--master-id用来指定新节点的master节点。如果不设置该参数,则会随机为节点选择master节点。
add-node流程如下:
  1、通过load_cluster_info_from_node方法转载集群信息,check_cluster方法检查集群是否健康。
  2、如果设置了--slave,则需要为该节点寻找master节点。设置了--master-id,则以该节点作为新节点的master,如果没有设置--master-id,则调用get_master_with_least_replicas方法,寻找slave数量最少的master节点。如果slave数量一致,则选取
load_cluster_info_from_node顺序发现的第一个节点。load_cluster_info_from_node顺序的第一个节点是add-node设置的existing_host:existing_port节点,后面的顺序根据在该节点执行cluster nodes返回的结果返回的节点顺序。
  3、连接新的节点并与集群第一个节点握手。
  4、如果没设置–slave就直接返回ok,设置了–slave,则需要等待确认新节点加入集群,然后执行cluster replicate命令复制master节点。
  5、至此,完成了全部的增加节点的流程。

给新加入节点分配空间槽
执行命令ruby redis-trib.rb reshard 127.0.0.1:1001

删除集群中的节点
del-node可以把某个节点从集群中删除。del-node只能删除没有分配slot的节点。删除命令传递两个参数:
  host:port:从该节点获取集群信息。
  node_id:需要删除的节点id。
  del-node执行结果示例如下:
$ruby redis-trib.rb del-node 10.180.157.199:6379 d5f6d1d17426bd564a6e309f32d0f5b96962fe53
>>> Removing node d5f6d1d17426bd564a6e309f32d0f5b96962fe53 from cluster 10.180.157.199:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
del-node流程如下:
  1、通过load_cluster_info_from_node方法转载集群信息。
  2、根据传入的node id获取节点,如果节点没找到,则直接提示错误并退出。
  3、如果节点分配的slot不为空,则直接提示错误并退出。
  4、遍历集群内的其他节点,执行cluster forget命令,从每个节点中去除该节点。如果删除的节点是master,而且它有slave的话,这些slave会去复制其他master,调用的方法是get_master_with_least_replicas,与add-node没设置--master-id寻找master的方法一
样。
  5、然后关闭该节点

参考内容:https://blog.csdn.net/huwei2003/article/details/50973967
          https://blog.csdn.net/xxssyyyyssxx/article/details/72831909
          https://blog.csdn.net/woshimike/article/details/56479773
实例操作:

[root@vms-jskf-114 src]# /usr/local/src/redis-3.0.3/src/redis-trib.rb create --replicas 0 127.0.0.1:1001 127.0.0.1:1002 127.0.0.1:1003
>>> Creating cluster
Connecting to node 127.0.0.1:1001: OK
Connecting to node 127.0.0.1:1002: OK
Connecting to node 127.0.0.1:1003: OK
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
127.0.0.1:1001
127.0.0.1:1002
127.0.0.1:1003
M: d45eb066fb7ee0e80d61d3dee8d37df28b916a47 127.0.0.1:1001
   slots:0-5460 (5461 slots) master
M: ac1961b4af6a2ce55cfe29b855e6db97a57a12ac 127.0.0.1:1002
   slots:5461-10922 (5462 slots) master
M: ed007566014020e9cb152a88fb4c54b717f77176 127.0.0.1:1003
   slots:10923-16383 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 127.0.0.1:1001)
M: d45eb066fb7ee0e80d61d3dee8d37df28b916a47 127.0.0.1:1001
   slots:0-5460 (5461 slots) master
M: ac1961b4af6a2ce55cfe29b855e6db97a57a12ac 127.0.0.1:1002
   slots:5461-10922 (5462 slots) master
M: ed007566014020e9cb152a88fb4c54b717f77176 127.0.0.1:1003
   slots:10923-16383 (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
 

猜你喜欢

转载自blog.csdn.net/gaoxilong526/article/details/81233261
今日推荐