Установка APACHE CASSANDRA

Thank you for reading this post, don't forget to subscribe!

Apache Cassandra - это база дан­ных NoSQL с откры­тым исход­ным кодом без еди­ной точ­ки отка­за, обес­пе­чи­ва­ю­щая линей­ную мас­шта­би­ру­е­мость и высо­кую доступ­ность без ущер­ба для про­из­во­ди­тель­но­сти. В Cassandra запи­си струк­ту­ри­ро­ва­ны ана­ло­гич­но реля­ци­он­ной базе дан­ных с таб­ли­ца­ми, стро­ка­ми и столб­ца­ми. Apache Cassandra исполь­зу­ет­ся рядом орга­ни­за­ций, вклю­чая Apple, NetFlix, eBay и Easou.

УСТАНОВКА APACHE CASSANDRA

 

Нуж­но отклю­чить или настро­ить SELinux:

Реко­мен­ду­е­мый спо­соб уста­нов­ки Apache Cassandra в CentOS 7 - уста­нов­ка паке­та rpm из офи­ци­аль­но­го репо­зи­то­рия Apache Cassandra.

На момент напи­са­ния этой ста­тьи послед­няя вер­сия Apache Cassandra была 3.11 и долж­на быть уста­нов­ле­на ​​в систе­ме OpenJDK 8.

Что­бы уста­но­вить OpenJDK , в вашей систе­ме введите:

Про­верь­те уста­нов­ку Java, выпол­нив сле­ду­ю­щую коман­ду, кото­рая выве­дет вер­сию Java:

Вывод дол­жен выгля­деть при­мер­но так:

Теперь, когда Java уста­нов­ле­на, сле­ду­ю­щим шагом явля­ет­ся добав­ле­ние хра­ни­ли­ща Apache Cassandra.

Открой­те выбран­ный вами редак­тор и создай­те сле­ду­ю­щий файл репозитория:

Вставь­те сле­ду­ю­щее содер­жи­мое в файл:

/etc/yum.repos.d/cassandra.repo

После того, как хра­ни­ли­ще будет вклю­че­но, уста­но­ви­те послед­нюю вер­сию Apache Cassandra, набрав:

Запу­сти­те и вклю­чи­те служ­бу Cassandra:

Убе­ди­тесь, что Cassandra запу­ще­на, набрав:

Вы долж­ны уви­деть что-то похо­жее на это:

На этом эта­пе Apache Cassandra уста­нов­лен на вашем сер­ве­ре CentOS.

НАСТРОЙКА APACHE CASSANDRA

Дан­ные Apache Cassandra хра­нят­ся в /var/lib/cassandra ката­ло­ге, фай­лы кон­фи­гу­ра­ции нахо­дят­ся в нем, /etc/cassandra и в /etc/default/cassandra фай­ле мож­но настро­ить пара­мет­ры запус­ка Java .

По умол­ча­нию Cassandra настро­е­на на про­слу­ши­ва­ние толь­ко на локаль­ном хосте. Если кли­ент, под­клю­ча­ю­щий­ся к базе дан­ных, так­же рабо­та­ет на том же хосте, вам не нуж­но изме­нять файл кон­фи­гу­ра­ции по умолчанию.

Для вза­и­мо­дей­ствия с Cassandra через CQL (язык запро­сов Cassandra) вы може­те исполь­зо­вать ути­ли­ту команд­ной стро­ки с име­нем, cqlsh кото­рая постав­ля­ет­ся вме­сте с паке­том Cassandra.

ПЕРЕИМЕНОВАНИЕ КЛАСТЕРА APACHE CASSANDRA

По умол­ча­нию кла­стер Cassandra назы­ва­ет­ся «Тесто­вый кла­стер». Сле­дуй­те при­ве­ден­ным ниже инструк­ци­ям, если вы хоти­те изме­нить имя кластера:

  1. Вой­ди­те в CQL-тер­ми­нал Cassandra с помо­щью cqlsh:

    Сле­ду­ю­щая коман­да изме­нит имя кла­сте­ра на «Linuxize Cluster»:

    Заме­ни­те «Linuxize Cluster» на жела­е­мое имя. После того, как сде­ла­но, вве­ди­те exit для выхо­да из консоли.

  2. Отре­дак­ти­руй­те cassandra.yaml файл кон­фи­гу­ра­ции и вве­ди­те новое имя кла­сте­ра.
    /etc/cassandra/default.conf/cassandra.yaml

  3. Выпол­ни­те сле­ду­ю­щую коман­ду, что­бы очи­стить систем­ный кеш:

  4. Нако­нец пере­за­пу­сти­те сер­вис Cassandra:

===================================================

Настройка Apache Cassandra кластера в Unix/Linux

Име­ет­ся сле­ду­ю­щие дан­ные о серверах:

  • 192.168.13.163 — Apache_Cassandra_01 (centos 6)
  • 192.168.13.145 — Apache_Cassandra_02 (kali linux 2)
  • 192.168.13.147 — Apache_Cassandra_03 (Debian 8)

Далее редак­ти­ру­ем кон­фи­ги на каж­дой их нод.

-===НОДА_1===-

Редак­ти­ру­ем кон­фи­ги на нодах буду­ще­го кла­сте­ра на 192.168.13.163:

vim /etc/cassandra/conf/cassandra.yaml

В дан­ном кон­фи­ги нуж­но изме­нить (про­пи­сать) следующее:

  • cluster_name — Имя кластера 
    cluster_name: 'cassandra_cluster'
  • seeds — Про­пи­сы­ва­ем адре­са нод кластера 
    seeds: "192.168.13.163, 192.168.13.145, 192.168.13.147"
  • listen_address — адрес самой ноды 
    listen_address: 192.168.13.163
  • rpc_address — адрес самой ноды 
    rpc_address: 192.168.13.163

Выпол­ня­ем настрой­ку сле­ду­ю­ще­го файла:

vim /etc/cassandra/conf/cassandra-topology.properties

# Cassandra Node IP=Data Center:Rack
192.168.13.163=dc1:rac1
192.168.13.145=dc1:rac1
192.168.13.147=dc1:rac1

# default for unknown nodes
default=DC1:r1

И пере­хо­дим к дру­гим нодам.

-===НОДА_2===-

Редак­ти­ру­ем кон­фи­ги на нодах буду­ще­го кла­сте­ра на 192.168.13.145:

# vim /etc/cassandra/cassandra.yaml

В дан­ном кон­фи­ги нуж­но изме­нить (про­пи­сать) следующее:

  • cluster_name — Имя кластера 
    cluster_name: 'cassandra_cluster'
  • seeds — Про­пи­сы­ва­ем адре­са нод кластера 
    seeds: "192.168.13.163, 192.168.13.145, 192.168.13.147"
  • listen_address — адрес самой ноды 
    listen_address: 192.168.13.145
  • rpc_address — адрес самой ноды 
    rpc_address: 192.168.13.145

Выпол­ня­ем настрой­ку сле­ду­ю­ще­го файла:

# vim /etc/cassandra/cassandra-topology.properties

И про­пи­сы­ва­ем в него:
# Cassandra Node IP=Data Center:Rack
192.168.13.163=dc1:rac1
192.168.13.145=dc1:rac1
192.168.13.147=dc1:rac1
# default for unknown nodes
default=DC1:r1

И пере­хо­дим к дру­гим нодам.

-===НОДА_3===-

Редак­ти­ру­ем кон­фи­ги на нодах буду­ще­го кла­сте­ра на 192.168.13.147:

# vim /etc/cassandra/cassandra.yaml

В дан­ном кон­фи­ги нуж­но изме­нить (про­пи­сать) следующее:

  • cluster_name — Имя кластера 
    cluster_name: 'cassandra_cluster'
  • seeds — Про­пи­сы­ва­ем адре­са нод кластера 
    seeds: "192.168.13.163, 192.168.13.145, 192.168.13.147"
  • listen_address — адрес самой ноды 
    listen_address: 192.168.13.147
  • rpc_address — адрес самой ноды 
    rpc_address: 192.168.13.147

Выпол­ня­ем настрой­ку сле­ду­ю­ще­го файла:

# vim /etc/cassandra/cassandra-topology.properties

И про­пи­сы­ва­ем в него:

# Cassandra Node IP=Data Center:Rack
192.168.13.163=dc1:rac1
192.168.13.145=dc1:rac1
192.168.13.147=dc1:rac1
# default for unknown nodes
default=DC1:r1
И пере­хо­дим к дру­гим нодам если они имеются.

Тестирование Cassandra кластера

Все ноды настро­е­ны и объ­еди­не­ны в кла­стер и для запус­ка, мож­но исполь­зо­вать сле­ду­ю­щий вариант:

$ cassandra

Дан­ное дей­ствие необ­хо­ди­мо выпол­нить на всех узлах кластера!

Что­бы про­ве­рить ста­тус создан­но­го кла­сте­ра, есть коман­да, кото­рую сто­ит запустить:

$ nodetool status

Полу­чил ошибку:

nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'.

Исправ­ле­ни­ем слу­жит сле­ду­ю­щие дей­ствия…. Нахо­дим файл cassandra-env.sh и нуж­но его отредактировать:

# vim /etc/cassandra/conf/cassandra-env.sh
PS: мож­но заю­зать locate для поис­ка это­го файла

Нахо­дим в нем:

# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>"
И при­во­дим к виду ( пример):
JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=192.168.13.163"

И так на каж­дой из нод.

На одной из нод, полу­чил еще ошибку:

ERROR 13:20:47 Fatal configuration error
org.apache.cassandra.exceptions.ConfigurationException: Cannot change the number of tokens from 256 to 255
at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:896) ~[apache-cassandra-2.2.8.jar:2.2.8]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:647) ~[apache-cassandra-2.2.8.jar:2.2.8]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:518) ~[apache-cassandra-2.2.8.jar:2.2.8]
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:310) [apache-cassandra-2.2.8.jar:2.2.8]
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:532) [apache-cassandra-2.2.8.jar:2.2.8]
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:641) [apache-cassandra-2.2.8.jar:2.2.8]
WARN 13:20:47 No local state, state is in silent shutdown, or node hasn't joined, not announcing shutdown

Реше­ние:

# nodetool flush

Потом:

# service cassandra stop
# rm -rf /var/lib/cassandra/data/system/*

Запус­ка­ем кас­сан­дру и выпол­ня­ем сно­во проверку:

$ nodetool status

Полу­ча­ем:

[codesyntax lang="php"]

[/codesyntax]

И, если исполь­зу­ет­ся IPtables, то настро­ить его:

$ iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 7199 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 9160 -j ACCEPT

Основы работы с cqlsh и языком CQL

Выпол­ня­ем под­клю­че­ние на одну из нод:

$ cqlsh 192.168.13.145
Нач­нем с того, что созда­дим ДБ, но пра­виль­ней все­го — сто­ит назы­вать —  keyspace:
cqlsh> create keyspace example with replication ={'class':'SimpleStrategy','replication_factor':2};
cqlsh> use example;
Дан­ны­ми дей­стви­я­ми, я создал кей­с­пейс с назва­ни­ем example. И сей­час, созда­ем неко­то­рую струк­ту­ру таблиц:
cqlsh:example> create table my_table ( id int primary key, description text );
Запол­ня­ем дан­ны­ми для тестов:
cqlsh:example> insert into my_table (id, description) values (1,'Item 1');
cqlsh:example> insert into my_table (id, description) values (2,'Item 2');
cqlsh:example> insert into my_table (id, description) values (3,'Item 3');
Созда­ли, а теперь про­ве­рим что получилось:

[codesyntax lang="php"]

[/codesyntax]

В кас­сан­дре нель­зя выбрать стро­ку по опи­са­нию ( как в мускуле):
cqlsh:example> select id from my_table where description = 'Item 1';
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes
on the restricted columns support the provided operators: "
Стро­им вто­рич­ный индекс:
cqlsh:example> create index on my_table (description);
Вот теперь можно:

[codesyntax lang="php"]

[/codesyntax]

Мож­но вкл\выкл трас­си­ров­ку запросов:

cqlsh:example> tracing on;
Now Tracing is enabled
cqlsh:example> tracing off;
Disabled Tracing.

Что­бы полу­чить инфу о вашем кей­с­пей­се или таб­ли­це, используйте:

cqlsh:example> desc table my_table;
skiped
cqlsh:example> desc keyspace example;
skiped
Что­бы уда­лить стро­ку, используем:
cqlsh:example> delete from my_table where id = 1;
Что­бы уда­лить таб­ли­цу, используем:
cqlsh:example> drop table my_table;
Что­бы уда­лить кей­с­пейс, используем:
cqlsh:example> drop keyspace example;
Для выхо­да, используем:
cqlsh:example> exit

Или:
cqlsh:example> quit