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 , в вашей системе введите:
1 |
sudo yum install java-1.8.0-openjdk-devel |
Проверьте установку Java, выполнив следующую команду, которая выведет версию Java:
1 |
java -version |
Вывод должен выглядеть примерно так:
1 2 3 4 |
openjdk version "1.8.0_201" OpenJDK Runtime Environment (build 1.8.0_201-b09) OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode) |
Теперь, когда Java установлена, следующим шагом является добавление хранилища Apache Cassandra.
Откройте выбранный вами редактор и создайте следующий файл репозитория:
1 |
sudo nano /etc/yum.repos.d/webmin.repo |
Вставьте следующее содержимое в файл:
1 2 3 4 5 6 7 |
<span class="k">[cassandra]</span> <span class="na">name</span><span class="o">=</span><span class="s">Apache Cassandra</span> <span class="na">baseurl</span><span class="o">=</span><span class="s">https://www.apache.org/dist/cassandra/redhat/311x/</span> <span class="na">gpgcheck</span><span class="o">=</span><span class="s">1</span> <span class="na">repo_gpgcheck</span><span class="o">=</span><span class="s">1</span> <span class="na">gpgkey</span><span class="o">=</span><span class="s">https://www.apache.org/dist/cassandra/KEYS</span> |
После того, как хранилище будет включено, установите последнюю версию Apache Cassandra, набрав:
1 |
sudo yum install cassandra |
Запустите и включите службу Cassandra:
1 |
sudo systemctl enable cassandra</code><code class="terminal-line">sudo systemctl start cassandra |
Убедитесь, что Cassandra запущена, набрав:
1 |
nodetool status |
Вы должны увидеть что-то похожее на это:
1 2 3 4 5 6 7 |
Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 127.0.0.1 103.68 KiB 256 100.0% 129a9437-377d-415b-b6b2-5dc46b73a763 rack1 |
На этом этапе Apache Cassandra установлен на вашем сервере CentOS.
НАСТРОЙКА APACHE CASSANDRA
Данные Apache Cassandra хранятся в /var/lib/cassandra
каталоге, файлы конфигурации находятся в нем, /etc/cassandra
и в /etc/default/cassandra
файле можно настроить параметры запуска Java .
По умолчанию Cassandra настроена на прослушивание только на локальном хосте. Если клиент, подключающийся к базе данных, также работает на том же хосте, вам не нужно изменять файл конфигурации по умолчанию.
Для взаимодействия с Cassandra через CQL (язык запросов Cassandra) вы можете использовать утилиту командной строки с именем, cqlsh
которая поставляется вместе с пакетом Cassandra.
1 |
cqlsh |
1 2 3 4 5 |
Connected to Test Cluster at 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cqlsh> |
ПЕРЕИМЕНОВАНИЕ КЛАСТЕРА APACHE CASSANDRA
По умолчанию кластер Cassandra называется «Тестовый кластер». Следуйте приведенным ниже инструкциям, если вы хотите изменить имя кластера:
- Войдите в CQL-терминал Cassandra с помощью
cqlsh
:
1cqlsh
Следующая команда изменит имя кластера на «Linuxize Cluster»:1<span class="k">UPDATE</span> <span class="k">system</span><span class="p">.</span><span class="k">local</span> <span class="k">SET</span> <span class="n">cluster_name</span> <span class="o">=</span> <span class="s1">'</span><span class="s1">Linuxize Cluster</span><span class="s1">'</span> <span class="k">WHERE</span> <span class="k">KEY</span> <span class="o">=</span> <span class="s1">'</span><span class="s1">local</span><span class="s1">'</span><span class="p">;</span>Замените «Linuxize Cluster» на желаемое имя. После того, как сделано, введите
exit
для выхода из консоли. - Отредактируйте
cassandra.yaml
файл конфигурации и введите новое имя кластера./etc/cassandra/default.conf/cassandra.yaml1cluster_name<span class="p">:</span> <span class="s1">'Linuxize Cluster'</span> - Выполните следующую команду, чтобы очистить системный кеш:
1nodetool flush system
- Наконец перезапустите сервис Cassandra:
1sudo systemctl restart 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:
В данном конфиги нужно изменить (прописать) следующее:
- 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
И переходим к другим нодам.
-===НОДА_3===-
Редактируем конфиги на нодах будущего кластера на 192.168.13.147:
В данном конфиги нужно изменить (прописать) следующее:
- 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
Выполняем настройку следующего файла:
И прописываем в него:
Тестирование Cassandra кластера
Все ноды настроены и объединены в кластер и для запуска, можно использовать следующий вариант:
Данное действие необходимо выполнить на всех узлах кластера!
Чтобы проверить статус созданного кластера, есть команда, которую стоит запустить:
Получил ошибку:
Исправлением служит следующие действия…. Находим файл cassandra-env.sh и нужно его отредактировать:
Находим в нем:
И так на каждой из нод.
На одной из нод, получил еще ошибку:
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
Решение:
Потом:
Запускаем кассандру и выполняем сново проверку:
Получаем:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 |
Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 192.168.13.145 128.89 KB 256 62.4% 1a360230-95c7-44ec-a61f-f314e374da6e rack1 UN 192.168.13.163 89.97 KB 256 67.4% e92cc1f5-69e2-4fe0-bf4b-28c1bf5b0131 rack1 UN 192.168.13.147 147.77 KB 256 70.2% 27f5040b-072f-4ec7-bb7c-62021a454e39 rack1 |
[/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
Выполняем подключение на одну из нод:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 |
cqlsh:example> select * from my_table; id | description -----+------------- 1 | Item 1 2 | Item 2 3 | Item 3 (3 rows) |
[/codesyntax]
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes
on the restricted columns support the provided operators: "
[codesyntax lang="php"]
1 2 3 4 5 6 7 |
cqlsh:example> select id from my_table where description = 'Item 1'; id ----- 1 (1 rows) |
[/codesyntax]
Можно вкл\выкл трассировку запросов:
Чтобы получить инфу о вашем кейспейсе или таблице, используйте:
Или:
cqlsh:example> quit