Redis Cluster в Debian Wheezy: миграция и решардинг
Sep 3, 2015 14:52 · 687 words · 4 minute read
В предыдущей статье мы успешно создали Redis Cluster из 3-х мастеров и 3-х слейвов, теперь давайте разберемся с миграцией и решардингом в кластере.
Миграция в Redis Cluster не представляет особых сложностей.
Например, для перемещения слота 12182 с третьей ноды на первую нужно выполнить следующие действия:
- подключаемся к первой ноде:
redis-cli -c -p 7000
- выполняем команду:
CLUSTER SETSLOT 12182 IMPORTING 5b901bb4fe5a783c9a63c7c084cdb6d5e6a9396a
Примечание. В данном примере 5b901bb4fe5a783c9a63c7c084cdb6d5e6a9396a — id третьей ноды (откуда импортируем слот)
- подключаемся к третьей ноде:
redis-cli -c -p 7002
- выполняем команду:
CLUSTER SETSLOT 12182 MIGRATING c1783119d172d55becfcea8ec10855bf79d17c83
Примечание. В данном примере c1783119d172d55becfcea8ec10855bf79d17c83 — id первой ноды (куда импортируем слот)
- после этого выполняем:
./redis-trib.rb fix 127.0.0.1:7000
Результат выполнения последней команды будет таким:
Connecting to node 127.0.0.1:7000: OK
Connecting to node 127.0.0.1:7005: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7003: OK
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: c1783119d172d55becfcea8ec10855bf79d17c83 127.0.0.1:7000
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 2043fdf0eaaf5fba69fd432a31d812720334e71f 127.0.0.1:7005
slots: (0 slots) slave
replicates 5b901bb4fe5a783c9a63c7c084cdb6d5e6a9396a
M: 5b901bb4fe5a783c9a63c7c084cdb6d5e6a9396a 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 6140050dc706b4d73362968316e6d5ddce184a10 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: cd50fe4e614a030ebfd31702f64b5c807ddf5e6d 127.0.0.1:7004
slots: (0 slots) slave
replicates 6140050dc706b4d73362968316e6d5ddce184a10
S: 5367ea30f9db7e42bd3304ed4d7df56a541d6cb8 127.0.0.1:7003
slots: (0 slots) slave
replicates c1783119d172d55becfcea8ec10855bf79d17c83
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7000 has slots in importing state (12182).
[WARNING] Node 127.0.0.1:7002 has slots in migrating state (12182).
[WARNING] The following slots are open: 12182
>>> Fixing open slot 12182
Set as migrating in: 127.0.0.1:7002
Set as importing in: 127.0.0.1:7000
Moving slot 12182 from 127.0.0.1:7002 to 127.0.0.1:7000: .
>>> Check slots coverage...
[OK] All 16384 slots covered.
Убедиться, что после проведенной миграции слот 12182 действительно находится на первой ноде можно так:
- подключаемся к третьей ноде:
redis-cli -c -p 7002
- выполняем команду:
127.0.0.1:7002> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7000
"bar"
Решардинг (Resharding the cluster) — перемещение части слотов с одной ноды на другую.
В Redis Cluster для решардинга выполняем следующие шаги:
- запускаем скрипт
redis-trib
с командойreshard
:
./redis-trib.rb reshard 127.0.0.1:7000
Connecting to node 127.0.0.1:7000: OK
Connecting to node 127.0.0.1:7005: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7003: OK
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: c1783119d172d55becfcea8ec10855bf79d17c83 127.0.0.1:7000
slots:0-5460,12182 (5462 slots) master
1 additional replica(s)
S: 2043fdf0eaaf5fba69fd432a31d812720334e71f 127.0.0.1:7005
slots: (0 slots) slave
replicates 5b901bb4fe5a783c9a63c7c084cdb6d5e6a9396a
M: 5b901bb4fe5a783c9a63c7c084cdb6d5e6a9396a 127.0.0.1:7002
slots:10923-12181,12183-16383 (5460 slots) master
1 additional replica(s)
M: 6140050dc706b4d73362968316e6d5ddce184a10 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: cd50fe4e614a030ebfd31702f64b5c807ddf5e6d 127.0.0.1:7004
slots: (0 slots) slave
replicates 6140050dc706b4d73362968316e6d5ddce184a10
S: 5367ea30f9db7e42bd3304ed4d7df56a541d6cb8 127.0.0.1:7003
slots: (0 slots) slave
replicates c1783119d172d55becfcea8ec10855bf79d17c83
[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)? 200
- вводим id ноды, на которую хотим переместить слоты:
What is the receiving node ID? 6140050dc706b4d73362968316e6d5ddce184a10
- вводим id нод, с каких хотим переместить слоты (можно выбрать несколько нод):
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:c1783119d172d55becfcea8ec10855bf79d17c83
Source node #2:done
- смотрим предложенный план перемещения и соглашаемся:
Ready to move 200 slots.
Source nodes:
M: c1783119d172d55becfcea8ec10855bf79d17c83 127.0.0.1:7000
slots:0-5460,12182 (5462 slots) master
1 additional replica(s)
Destination node:
M: 6140050dc706b4d73362968316e6d5ddce184a10 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
Resharding plan:
Moving slot 0 from c1783119d172d55becfcea8ec10855bf79d17c83
Moving slot 1 from c1783119d172d55becfcea8ec10855bf79d17c83
...
Moving slot 199 from c1783119d172d55becfcea8ec10855bf79d17c83
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Результат перемещения слотов:
Moving slot 0 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 1 from 127.0.0.1:7000 to 127.0.0.1:7001:
...
Moving slot 198 from 127.0.0.1:7000 to 127.0.0.1:7001:
Moving slot 199 from 127.0.0.1:7000 to 127.0.0.1:7001:
Убедиться, что решардинг прошел успешно и слоты перемещены можно запустив команду:
redis-cli -p 7000 cluster nodes | grep master
Результат выполнения будет следующий:
5b901bb4fe5a783c9a63c7c084cdb6d5e6a9396a 127.0.0.1:7002 master - 0 1440157951939 3 connected 10923-12181 12183-16383
6140050dc706b4d73362968316e6d5ddce184a10 127.0.0.1:7001 master - 0 1440157953942 8 connected 0-199 5461-10922
c1783119d172d55becfcea8ec10855bf79d17c83 127.0.0.1:7000 myself,master - 0 0 7 connected 200-5460 12182