Redis集群配置

Redis-使用redis-trib构建集群
redis-cluster集群
1、配置
redis是C语言写的编译时先装gcc
解包——进入redis目录——make——make install
初始化 ./utils/install_server.sh
要启用redis-cluster集群,需要先修改redis配置文件集群配置部分的内容
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000
port 7000 //端口7000
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志

查看服务信息
ss -ntupl | grep redis-server

查看集群信息
redis-cli -h 192.168.4.61 -p 6361

cluster info

cluster nodes
cat /var/lib/redis/6379/nodes-6361.conf
==============================
################################################
2、创建集群
官方提供了一个工具:redis-trib.rb看后缀就知道不能直接执行 ,它是用ruby写的一个程序,所以还得安装ruby.
yum -y install ruby ruby-devel rubygems rpm-build
再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包.
#gem install redis

cd redis-4.0.8/src

#mkdir /root/bin
#cp redis-trib.rb /root/bin
#chmod 755 /root/bin/redis-trib.rb
#redis-trib.rb create --replicas 1 192.168.4.61:6361 192.168.4.62:6362 192.168.4.63:6363 192.168.4.64:6364 192.168.4.65:6365 192.168.4.66:6366
–replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)
运行中,提示Can I set the above configuration? (type ‘yes’ to accept): yes //输入yes —no是停止

[OK] All 16384 slots covered. (成功)

报错
/usr/local/share/gems/gems/redis-3.2.1/lib/redis/client.rb:113:in `call’: ERR Slot 5282 is already busy (Redis::CommandError) (hash槽被占用)
ls /var/lib/redis/6379/ (存放集群信息)
dump.rdb nodes-6361.conf
rm -rf /var/lib/redis/6379/nodes-6361.conf
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
然后在执行一次

再查看任意台机

redis-cli -h 192.168.4.62 -p 6362

cluster nodes //查看集群节点信息
cluster info //查看集群信息
info replication //查看主从
#########################################################

3.测试
50客户端登陆任意台机测试
#redis-cli -h 192.168.4.61 -p 6361 -c
set a t
get a
Redis的主从复制配置和使用都比较简单,通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。
从服务器只能读,不能写。
Redis主从复制特点:
1、master可以拥有多个slave。
2、多个slave可以连接同一个master外,还可以连接到其他的slave。(当master宕机后,相连的slave转变为master)
3、主从复制不会阻塞master,再同步数据时,master可以继续处理client请求。
4、提高了系统的可伸缩性。
说明,redis集群有16384个slot组成,通过分片分布到多个节点上,读写都发生在master节点。(0-16383)
Redis集群中有16384个hash slots,为了计算给定的key应该在哪个hash slot上,我们简单地用这个key的CRC16值来对16384取模。(即:key的CRC16 % 16384)
Redis集群中的每个节点(master 主)负责一部分hash slots

============================
redis
支持的操作如下:

  1. create:创建集群
  2. check:检查集群
  3. info:查看集群信息
  4. fix:修复集群
  5. reshard:在线迁移slot
  6. rebalance:平衡集群节点slot数量
  7. add-node:添加新节点
  8. del-node:删除节点
  9. set-timeout:设置节点的超时时间
  10. call:在集群所有节点上执行命令
  11. import:将外部redis数据导入集群
    ==============================

允许添加和删除集群节点。
增加一个新的节点D,那么久需要从A、B、C节点上删除一些hash slot给到D。
【添加时不指定主机角色,默认master】
#redis-trib.rb add-node 192.168.4.67:6367 192.168.4.61:6361
分配hash
#redis-trib.rb reshard 192.168.4.61:6361
How many slots do you want to move (from 1 to 16384)? 4096 (16384/4)
What is the receiving node ID? ##接收的id
Source node #1:all (所有平均分)
添加slave 68

redis-trib.rb add-node --slave 192.168.4.68:6368 192.168.4.61:6361

同样地,从集群中删除节点A,那么会将A上面的hash slots移动到B和C,当节点A上是空的时候就可以将其从集群中完全删除。
先从集群删slave
#redis-trib.rb del-node 192.168.4.61:6361 + 从id

Removing node b050551d33b80d78d8045d13b2cfcd83d2bd42a1 from cluster 192.168.4.61:6361
Sending CLUSTER FORGET messages to the cluster…
SHUTDOWN the node (自动停服务)

再删master
1.释放占用hash槽
#redis-trib.rb reshard 192.168.4.61:6361
How many slots do you want to move (from 1 to 16384)? 4096 (16384/4)
What is the receiving node ID? ##接收的id
Source node #1:释放的id
2.再删master
redis-trib.rb del-node 127.0.0.1:7006 (加主机的id)7c7b7f68bc56bf24cbb36b599d2e2d97b26c5540

3.把修复的redis服务器再添加到集群里

rm -rf /var/lib/redis/6379/nodes-xxzz.conf
/etc/init.d/redis_6379 stop
start
status

===================================================
redis cluster状态
127.0.0.1:8001> cluster info
cluster_state:ok
如果当前redis发现有failed的slots,默认为把自己cluster_state从ok个性为fail, 写入命令会失败。如果设置cluster-require-full-coverage为no,则无此限制。
cluster_slots_assigned:16384 #已分配的槽
cluster_slots_ok:16384 #槽的状态是ok的数目
cluster_slots_pfail:0 #可能失效的槽的数目
cluster_slots_fail:0 #已经失效的槽的数目
cluster_known_nodes:6 #集群中节点个数
cluster_size:3 #集群中设置的分片个数
cluster_current_epoch:15 #集群中的currentEpoch总是一致的,currentEpoch越高,代表节点的配置或者操作越新,集群中最大的那个node epoch
cluster_my_epoch:12 #当前节点的config epoch,每个主节点都不同,一直递增, 其表示某节点最后一次变成主节点或获取新slot所有权的逻辑时间.
cluster_stats_messages_sent:270782059
cluster_stats_messages_received:270732696

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值