NoSQL--Redis集群6节点

环境准备

6台服务器、启用集群功能

[root@host51 ~]# yum -y install gcc 
[root@host51 ~]# tar -xf redis-4.0.8.tar.gz 
[root@host51 ~]# cd redis-4.0.8/
[root@host51 ~]# make && make install
[root@host51 ~]# ./utils/install_server.sh  遇到提示就回车
[root@host51 ~]# /etc/init.d/redis_6379  stop
[root@host51 ~]# vim /etc/redis/6379.conf 
bind 192.168.88.51 
port 6379
cluster-enabled yes #启用集群功能
cluster-config-file nodes-6379.conf #保存集群信息的配置文件
cluster-node-timeout 5000  #集群中主机的连接超时时间
[root@host51 ~]#            
[root@host51 ~]# /etc/init.d/redis_6379  start
[root@host51 ~]# netstat  -utnlp  | grep redis-server
tcp        0      0 192.168.88.51:16379      0.0.0.0:*               LISTEN      4249/redis-server 1 
tcp        0      0 192.168.88.51:6379      0.0.0.0:*               LISTEN      4249/redis-server 1 

  工作原理

hash solt

redis采用hash槽的方式来进行数据存储的。
redis定义了16384个虚拟的哈希槽,将这16384个槽分配带集群各个节点上,然后多key通过crc16算法得到一个值,然后对16384取模,得到0到16383之间的一个数字。然后就会将key存储到对应数字的节点上。

通过CRC16算法匹配不同的slot 来决定在哪个服务器上存储.

存储数据和查询数据时 调用集群算法 集群算法会计算出1个数字, 数字

在哪个主服务占用的槽范围内 ,就连接对应的主服务器存储数据或查询数据。

部署管理主机

部署ruby脚本运行环境

创建管理集群脚本redis-trib.rb

]#yum  -y  install  ruby 
]#gem  install  redis-3.2.1.gem
]#mkdir  /root/bin                 //创建命令检索目录
]#tar -xf redis-4.0.8.tar.gz
]#cp  redis-4.0.8/src/redis-trib.rb   /root/bin/      
]#chmod  +x   /root/bin/redis-trib.rb  //设置执行权限
]#redis-trib.rb   help   (能看到帮助信息为成功)

创建集群

redis-trib.rb create --replicas 数字 ip地址:端口 ip地址:端口 ip地址:端口 ....

--replicas 从服务器的台数(指定每个主服务器有几台从服务器)

按顺序前三个主,后三个为slave

[root@mgm57 ~]# redis-trib.rb create --replicas 1  192.168.88.51:6379  192.168.88.52:6379 192.168.88.53:6379 192.168.88.54:6379 192.168.88.55:6379 192.168.88.56:6379
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.88.51:6379
192.168.88.52:6379
192.168.88.53:6379
Adding replica 192.168.88.55:6379 to 192.168.88.51:6379
Adding replica 192.168.88.56:6379 to 192.168.88.52:6379
Adding replica 192.168.88.54:6379 to 192.168.88.53:6379
M: 0eb3b7aa0493a19189cba35b0c658202cc20884b 192.168.88.51:6379
   slots:0-5460 (5461 slots) master
M: a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441 192.168.88.52:6379
   slots:5461-10922 (5462 slots) master
M: f2c1bdb78d8d224c3666fa6440bdf80ba563c581 192.168.88.53:6379
   slots:10923-16383 (5461 slots) master
S: bdba77868965371680fa825badff59bf8ef95a81 192.168.88.54:6379
   replicates f2c1bdb78d8d224c3666fa6440bdf80ba563c581
S: 11510f42bfd9cf667bab5f31c01476d94984200a 192.168.88.55:6379
   replicates 0eb3b7aa0493a19189cba35b0c658202cc20884b
S: fe572ce003ee634c52adc4b42d92d15f847937d7 192.168.88.56:6379
   replicates a9cb8ccd31bf3eb70433c00906c9f1a99b5e8441
Can I set the above configuration? (type 'yes' to accept): yes 同意 
....
....
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.  #创建成功的提示

查看集群信息

查看集群统计信息

redis-trib.rb info 192.168.88.51:6351

查看集群详细

redis-trib.rb check 192.168.88.51:6379

在任意一台redis服务器本机,查看集群信息

[root@host51 ~]# redis-cli  -h 192.168.88.51 -p 6379
192.168.88.51:6379> cluster info       //查看集群信息
cluster_state:ok
……
……
cluster_known_nodes:6
cluster_size:3
192.168.88.51:6351> cluster  nodes   //查看集群节点信息
d9634ba0aa5c1a07193da4a013da6051c1515922 192.168.88.54:6354@16379 slave 9e44139cffb8ebd7ed746aabbf4bcea9bf207645 0 1561357552212 4 connected
894dd0008053f6fb65e9e4a36b755d9351607500 192.168.88.56:6356@16379 slave 324e05df3f143ef97e50d09be0328a695e655986 0 1561357554216 6 connected
d9f8fe6d6d9dd391be8e7904501db1535e4d17cb 192.168.88.51:6351@16379 myself,master - 0 1561357545000 1 connected 0-5460
324e05df3f143ef97e50d09be0328a695e655986 192.168.88.52:6352@16379 master - 0 1561357553214 2 connected 5461-10922
9e44139cffb8ebd7ed746aabbf4bcea9bf207645 192.168.88.53:6353@16379 master - 0 1561357554216 3 connected 10923-16383
2d343a9df48f6f6e207949e980ef498466a44dad 192.168.88.55:6355@16379 slave d9f8fe6d6d9dd391be8e7904501db1535e4d17cb 0 1561357553716 5 connected
192.168.88.51:6379>

访问集群

连接集群中的任意一台服务器都可以查询数据和存储数据)

-c 连接集群中的主机 使用集群算法存储数据

集群算法每次只有一个计算结果,向集群中的主机存储数据一次只能存储一个变量

 redis-cli -c -h redis服务器的ip -p 端口号

测试集群功能

测试服务高可用

        master宕机后对应的slave自动被选举为master,原master修好后做当前master的slave

测试数据自动备份

        连接服务器查看数据 keys *

        slave服务器只读

添加服务器

  • 部署新redis服务器
  • 添加master角色主机到集群里
  • 添加slave角色主机到集群里
]#yum -y  install gcc
]#tar -xf redis-4.0.8.tar.gz
]#cd redis-4.0.8/
]#make
]#make install
]#./utils/install_server.sh
]# /etc/init.d/redis_6379  stop
vim /etc/redis/6379.conf
        bind 192.168.88.58
        port 6379
        cluster-enabled  yes                         //启用集群
        cluster-config-file  nodes-6379.conf      //存储集群信息文件
        cluster-node-timeout  5000
]# /etc/init.d/redis_6379  start

redis-trib.rb add-node 192.168.88.58:6379 192.168.88.51:6379

重新分配hash槽(reshard)

[root@mgm57 ~]# redis-trib.rb  reshard   192.168.88.53:6379  
How many slots do you want to move (from 1 to 16384)?4096   //拿出4096个hash 槽给主机192.168.4.58
What is the receiving node ID?  c5e0da48f335c46a2ec199faa99b830f537dd8a0   //主机192.168.4.58的id值
Source node #1:all      //从当前所有master服务器获取hash槽
Do you want to proceed with the proposed reshard plan (yes/no)?yes //同意以上配置
...

 添加slave角色主机到集群里

]#yum -y  install gcc
]#tar -xf redis-4.0.8.tar.gz
]#cd redis-4.0.8/
]#make
]#make install
]#./utils/install_server.sh
]# /etc/init.d/redis_6379  stop
vim /etc/redis/6379.conf
        bind 192.168.88.59
        port 6379
        cluster-enabled  yes                         //启用集群
        cluster-config-file  nodes-6379.conf      //存储集群信息文件
        cluster-node-timeout  5000
]# /etc/init.d/redis_6379  start

 在管理主机,添加slave角色主机

redis-trib.rb add-node --slave 192.168.88.59:6379 192.168.88.51:6379 //执行添加命令

redis-trib.rb info 192.168.88.51:6379 //查看信息

移除服务器

  • 移除slave角色服务器 del-node
  • 移除master角色服务器 del-node

1. redis-trib.rb check 192.168.88.51:6379 | grep 192.168.88.59  查找要删除对应的主机的id

1.redis-trib.rb del-node 192.168.88.51:6379 7f3fa4f20c8c516d5b412ecc22550ed8e7bb8d7a

2. 释放占用的hash槽

 redis-trib.rb  reshard 192.168.88.51:6379
//移除4096个数槽
How many slots do you want to move (from 1 to 16384)?4096 
//接收槽master主机ID
What is the receiving node ID?  bc5c4e082a5a3391b634cf433a6486c867cfc44b 
//192.168.88.58的ID
Source node #1: c5e0da48f335c46a2ec199faa99b830f537dd8a0
Source node #2:done           //设置完毕

redis-trib.rb info 192.168.88.51:6379 此时查看集群信息只有0个槽

3.移除master

redis-trib.rb check 192.168.88.51:6379 | grep 192.168.88.58

redis-trib.rb del-node 192.168.88.51:6379 4fe1fa467ad237802021f5aac5f1d5b3e0db47ef    //删除谁+删除的id

在管理主机,查看集群信息

redis-trib.rb info 192.168.88.51:6351 此时就删除了

你需要知道

1 阐述redis集群存取数据工作原理。

当客户端存储数据到集群主机时,获取变量名与CRC16算法做hash计算,然后用计算结果与16384做取余运算,再根据余数值,把数据存储到对应的master 服务器。

2 阐述redis配置文件中,下列配置项的作用 。

bind IP地址 Redis服务IP地址

port xxxx Redis服务端口号

cluster-enabled yes 启用集群功能

cluster-config-file nodes-xxxx.conf 保存集群信息文件

cluster-node-timeout 5000 与主服务器建立连接超时时间(单位毫秒)

3 简述访问集群命令格式?

redis-cli -c -h 192.168.4.53 -p 6353

-c 集群模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small white poplar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值