четверг, 18 апреля 2013 г.

Пост 24. Добавление новых узлов в кластер. Увеличение колличества шардов.

Доброго времени суток!
Сегодня хотел бы рассказать как происходит процесс добавления новых узлов в кластер  Oracle NoSQL Database. А точнее как происходит наращивание шардов. Это поможет нам решить 2 задачи:
- Увеличит емкость базы данных
- Увеличит пропускную способность на запись (мы помним, что один шард - один мастер, который пишет).

Предположим у нас есть двухшардовая конфигурация состоящая из 6 серверов  (2х3), которая была раздеплоена следующим образом:


kv-> configure -name "FilDB"
kv-> plan deploy-datacenter -name "FilDC" -rf 3 -wait
kv-> plan deploy-sn -dc dc1 -host datanode1 -port 5011 -wait
kv-> plan deploy-admin -sn sn1 -port 5001 -wait
kv-> plan deploy-sn -dc dc1 -host datanode2 -port 5012 -wait
kv-> plan deploy-sn -dc dc1 -host datanode3 -port 5013 -wait
kv-> plan deploy-sn -dc dc1 -host datanode4 -port 5014 -wait
kv-> plan deploy-sn -dc dc1 -host datanode5 -port 5015 -wait
kv-> plan deploy-sn -dc dc1 -host datanode6 -port 5016 -wait
kv-> pool create -name FilPool
kv-> pool join -name FilPool -sn sn1
kv-> pool join -name FilPool -sn sn2
kv-> pool join -name FilPool -sn sn3
kv-> pool join -name FilPool -sn sn4
kv-> pool join -name FilPool -sn sn5
kv-> pool join -name FilPool -sn sn6
kv-> topology create -name topo -pool FilPool -partitions 300
kv-> plan deploy-topology -name topo -wait

Визуально это будет выглядеть как то так:


Если есть желание посмотреть подобное состояние из командной строки надо набрать команду ping из kvadmin:

[root@datanode1 ~]# kvadmin
kv-> ping
Pinging components of store FilDB based upon topology sequence #315
FilDB comprises 300 partitions and 6 Storage Nodes
Storage Node [sn1] on datanode1:5011    Datacenter: FilDC [dc1]    Status: RUNNING   Ver: 11gR2.2.0.26 2013-01-28 12:19:21 UTC  Build id: 99ef986805a3
        Rep Node [rg1-rn1]      Status: RUNNING,MASTER at sequence number: 321 haPort: 8101
Storage Node [sn2] on datanode2:5012    Datacenter: FilDC [dc1]    Status: RUNNING   Ver: 11gR2.2.0.26 2013-01-28 12:19:21 UTC  Build id: 99ef986805a3
        Rep Node [rg1-rn2]      Status: RUNNING,REPLICA at sequence number: 321 haPort: 8200
Storage Node [sn3] on datanode3:5013    Datacenter: FilDC [dc1]    Status: RUNNING   Ver: 11gR2.2.0.26 2013-01-28 12:19:21 UTC  Build id: 99ef986805a3
        Rep Node [rg1-rn3]      Status: RUNNING,REPLICA at sequence number: 321 haPort: 8300
Storage Node [sn4] on datanode4:5014    Datacenter: FilDC [dc1]    Status: RUNNING   Ver: 11gR2.2.0.26 2013-01-28 12:19:21 UTC  Build id: 99ef986805a3
        Rep Node [rg2-rn1]      Status: RUNNING,MASTER at sequence number: 321 haPort: 8400
Storage Node [sn5] on datanode5:5015    Datacenter: FilDC [dc1]    Status: RUNNING   Ver: 11gR2.2.0.26 2013-01-28 12:19:21 UTC  Build id: 99ef986805a3
        Rep Node [rg2-rn2]      Status: RUNNING,REPLICA at sequence number: 321 haPort: 8500
Storage Node [sn6] on datanode6:5016    Datacenter: FilDC [dc1]    Status: RUNNING   Ver: 11gR2.2.0.26 2013-01-28 12:19:21 UTC  Build id: 99ef986805a3
        Rep Node [rg2-rn3]      Status: RUNNING,REPLICA at sequence number: 321 haPort: 8600

kv->


Теперь возникла необходимость увеличить емкость базы данных путем добавления новых серверов.
Нет ничего проще для этого надо выполнить ряд команд в админской консоли (добавление серверов в пул и перебалансировка):

kv-> pool join -name FilPool -sn sn7
kv-> pool join -name FilPool -sn sn8
kv-> pool join -name FilPool -sn sn9
kv-> topology clone -current -name toponew
kv-> topology redistribute -name toponew  -pool FilPool
kv-> plan deploy-topology -name toponew  -wait

После чего начнется перебалансировка партиций (тех самых число которых не меняется).

То есть первоначально я создал 2 шарда и 300 партиций. Они равномерно распределились между партициями. Теперь я добавил 3 шард. Произошла перебалансировка партиций - у каждого шарда осталось по 100 партиций.

Для того что бы убедиться можно дать следующую команду:

kv-> show topology
............................
............................
  shard=[rg1] num partitions=100
    [rg1-rn1] sn=sn1
    [rg1-rn2] sn=sn2
    [rg1-rn3] sn=sn3
  shard=[rg2] num partitions=100
    [rg2-rn1] sn=sn4
    [rg2-rn2] sn=sn5
    [rg2-rn3] sn=sn6
  shard=[rg3] num partitions=100
    [rg3-rn1] sn=sn7
    [rg3-rn2] sn=sn8
    [rg3-rn3] sn=sn9

kv->

Любите технологии, не бойтесь экспериментировать и если у вас появятся какие-либо вопросы касаемо этого поста - не стеснятесь их задавать!

Комментариев нет:

Отправить комментарий