0
点赞
收藏
分享

微信扫一扫

运维工具1-将单节点数据拷贝到集群

嚯霍嚯 2022-09-03 阅读 95

1启动所有节点redis

[root@db03 ~]# sh redis_shell.sh start 6380
[root@db03 ~]# sh redis_shell.sh start 6381
[root@db03 ~]# ps -ef|grep redis

 2安装工具:

[root@db01 ~]# rpm -qa  automake autoconf libtool bzip2 #检查依赖是否安装
[root@db01 ~]# yum -y install automake libtool autoconf bzip2 #安装依赖

[root@db01 ~]# cd /opt/redis_cluster/

[root@db01 redis_cluster]# git clone git://github.com/vipshop/redis-migrate-tool.git

[root@db01 redis_cluster]#  cd redis-migrate-tool/

[root@db01 redis-migrate-tool]# autoreconf -fvi

[root@db01 redis-migrate-tool]# ./configure 
[root@db01 redis-migrate-tool]# make && make install

3启动单节点:

[root@db01 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
[root@db01 ~]# redis-cli
127.0.0.1:6379>

4编写单节点创建数据脚本

[root@db01 ~]# vim input_key.sh

#!/bin/bash
for i in $(seq 1 1000)
do
redis-cli set 6379_${i} v_${i} && echo "set k_${i} is ok"
done

[root@db01 ~]# sh input_key.sh

发现集群有问题,调整如下:

A主从互换角色:

如果db01的6380是从,db02的6381是主,如果要使两者角色互换,操作如下:

[root@db01 ~]# redis-cli -c -h db01 -p 6380
db01:6380> cluster failover
OK
db01:6380> cluster nodes
74bdf79d95556ffd38c47b01d0c76f393706bbda 10.0.0.202:6380 master - 0 1618331006574 5 connected 5462-10922
2e616daa28ca6518b908148227edf562280a2d61 10.0.0.202:6381 slave 070b91942844a34c1871642eef2d24bd3e816403 0 1618331009593 4 connected
4c007a5e2d894aa4c6ce950467221f01fd50f645 10.0.0.201:6380 myself,master - 0 0 7 connected 0-5461 #变成主库了

B调整指针状态:

[root@db01 ~]# sh redis_shell.sh login 6380 #登录集群任意节点
10.0.0.201:6380> 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:2
cluster_current_epoch:16
cluster_my_epoch:16
cluster_stats_messages_sent:2003
cluster_stats_messages_received:1956
10.0.0.201:6380> cluster nodes #查看主从关系
26e0f427f67d91b4e431d0ab656723fd4f72741d 10.0.0.202:6380 master - 0 1618605354610 10 connected 1501
bcdf9b35de9d5766eaf25a1227715f79ada40fd6 10.0.0.201:6381 slave e0700c10140e25e7660fe9fae6a60ef5dc23
a1e21cae39584a1fd1136b1762ae360dad5b3cf5 10.0.0.202:6381 slave e0700c10140e25e7660fe9fae6a60ef5dc23
e0700c10140e25e7660fe9fae6a60ef5dc23bcb3 10.0.0.201:6380 myself,master - 0 0 16 connected 0-15016 1
c5356cc11b854eff71ca701ec33ec6c9680b8e70 10.0.0.203:6381 slave 26e0f427f67d91b4e431d0ab656723fd4f72
30c50f835e3153d09b54dc0a1061a707384173a0 10.0.0.203:6380 master - 0 1618605351589 11 connected #db03的6380
10.0.0.201:6380>
[root@db01 ~]# redis-cli -h db02 -p 6381
db02:6381> cluster replicate 30c50f835e3153d09b54dc0a1061a707384173a0 #调整指针让db02的6381指向db03的6380

C重新分配槽位:

[root@db01 src]# ./redis-trib.rb reshard 10.0.0.201:6380
>>> Performing Cluster Check (using node 10.0.0.201:6380)
M: e0700c10140e25e7660fe9fae6a60ef5dc23bcb3 10.0.0.201:6380
slots:5641-15016,15018-16383 (10742 slots) master
1 additional replica(s)
M: 26e0f427f67d91b4e431d0ab656723fd4f72741d 10.0.0.202:6380
slots:0-5640,15017 (5642 slots) master
1 additional replica(s)
S: bcdf9b35de9d5766eaf25a1227715f79ada40fd6 10.0.0.201:6381
slots: (0 slots) slave
replicates 26e0f427f67d91b4e431d0ab656723fd4f72741d
S: a1e21cae39584a1fd1136b1762ae360dad5b3cf5 10.0.0.202:6381
slots: (0 slots) slave
replicates 30c50f835e3153d09b54dc0a1061a707384173a0
S: c5356cc11b854eff71ca701ec33ec6c9680b8e70 10.0.0.203:6381
slots: (0 slots) slave
replicates e0700c10140e25e7660fe9fae6a60ef5dc23bcb3
M: 30c50f835e3153d09b54dc0a1061a707384173a0 10.0.0.203:6380
slots: (0 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 5461
What is the receiving node ID? 30c50f835e3153d09b54dc0a1061a707384173a0 #接收槽位的节点
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:e0700c10140e25e7660fe9fae6a60ef5dc23bcb3 #提供槽位的节点
Source node #2:done #完成操作

5编写把单节点的数据导入到集群里的配置文件:

[root@db01 ~]# vim redis_6379_to_6380.conf

[source]
type: single
servers:
- 10.0.0.201:6379
[target]
type: redis cluster
servers:
- 10.0.0.201:6380
[common]
listen: 0.0.0.0:8888
source_safe: true

记录一下小插曲:
我的问题是:
无法使用redis-cli -c -h db01 -p 6379登录数据库
但可以使用redis-cli登录,
原因:
配置文件里的bind多写了一个127.0.0.1,删除掉,退出重启redis就好了,出现这种情况初步分析是这个单节点配置文件和集群的配置文件不一样造成的
测试:

[root@db01 ~]# redis-cli -c -h db01 -p 6379
db01:6379>

 7将单节点rdb文件导入到集群:

(1)集群服务器和单节点要建立互信


把集群的ssh公钥文件安装到单节点主机db04对应的账户下:ssh-copy-id db02

(2)在单节点中添加集群和本机的域名解析:

[root@db04 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.201 db01
10.0.0.202 db02
10.0.0.203 db03
10.0.0.204 db04
[root@db04 ~]#

3单节点服务器要安装工具:

cd /opt/redis_cluster/
git clone https://github.com/vipshop/redis-migrate-tool.git
cd redis-migrate-tool/
autoreconf -fvi
./configure
make && make install

4在单节点中编写把单节点数据导入到集群的配置文件:

[root@db04 ~]# cat redis_6379_to_6380.conf
[source]
type: single
servers:
- 10.0.0.204:6379
[target]
type: redis cluster
servers:
- 10.0.0.203:6381
[common]
listen: 0.0.0.0:8888
source_safe: true
[root@db04 ~]#

5执行配置文件

redis-migrate-tool -c redis_6379_to_6380.conf

6去集群每个节点查询数据:

[root@db03 ~]# sh redis_shell.sh login 6380
10.0.0.203:6380> keys *

7单节点中检查复制过程:

[root@db04 ~]# redis-migrate-tool -c redis_6379_to_6380.conf -C redis_check
Check job is running...

Checked keys: 1000
Inconsistent value keys: 0
Inconsistent expire keys : 0
Other check error keys: 0
Checked OK keys: 1000

All keys checked OK!
Check job finished, used 0.193s
[root@db04 ~]#

 



举报

相关推荐

0 条评论