Page_c76a3fcf https://linux-notes.org Unix/ Linux блог, на котором можно найти полезную информацию по настройке ОС и ПО. Thu, 06 Dec 2018 23:20:03 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 Page_c76a3fcf https://linux-notes.org/ustanovka-solr-v-unix-linux/ https://linux-notes.org/ustanovka-solr-v-unix-linux/#respond Tue, 14 Nov 2017 14:40:13 +0000 http://linux-notes.org/?p=12651 Установка Solr в Unix/Linux Solr (произносится «солар») — ПО для полнотекстового поиска. Данная утилита имеет открытый исходный код на JAVA, и имеет Apache Lucene. Основные функции Solr: Полнотекстовый поиск, Подсветка результатов, Распределенная индексация, Балансировка нагрузки, Фасетный поиск, Динамическая кластеризация, Интеграция с базами данных, Обработка документов со сложным форматом (например, Word, PDF), Автоматическое восстановление после отказа и […]

The post Установка Solr в Unix/Linux first appeared on linux-notes.org.]]>

Установка Solr в Unix/Linux

Solr (произносится «солар») — ПО для полнотекстового поиска. Данная утилита имеет открытый исходный код на JAVA, и имеет Apache Lucene.

Основные функции Solr:

  • Полнотекстовый поиск,
  • Подсветка результатов,
  • Распределенная индексация,
  • Балансировка нагрузки,
  • Фасетный поиск,
  • Динамическая кластеризация,
  • Интеграция с базами данных,
  • Обработка документов со сложным форматом (например, Word, PDF),
  • Автоматическое восстановление после отказа и восстановление данных,
  • Имеет централизованное управление конфигурацией.

Т.к в солре есть репликация и распределенный поиск, данная тулза отлично маштабируется.

Так как в Solr есть возможность распределенного поиска и репликации, Solr хорошо масштабируем. По состоянию на май 2016 года Solr является вторым по популярности поисковым движком. У Solr есть HTTP/XML и JSON API, что делает возможным использовать Solr из всех популярных языков программирования. Также Solr можно очень гибко настраивать и подключать к нему внешние модули.

Установка Solr в CentOS/Fedora/RedHat

Сейчас я, выполню установку и настройку базовую конфигурацию Apache Solr на CentOS 7.

Первое что необходимо сделать перед установкой солара — установить JAVA. Я описывал процесс установки в своих статьях:

Установка JAVA (JDK) на CentOS/RHEL/Fedora

Узнать размер Java Heap Memory Size

Установка переменных JAVA_HOME / PATH в Linux

И так, смотрим какая версия джавы имеется на ОС:

# java -version

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Сейчас необходимо скачать сам solr, по этому — выполняем команду:

# cd /usr/local/src && wget http://apache.org/dist/lucene/solr/7.1.0/solr-7.1.0.tgz

PS: На момент написания статьи, используеться самая новая версия ПО.

Выполняем расспаковку:

$ tar xfvz solr-*.tgz

Смотрим что имеется:

[root@centos7 src]# ll
total 148908
drwxr-xr-x. 9 root root       201 Nov  9 23:33 solr-7.1.0
-rw-r--r--. 1 root root 152481397 Oct 13 22:21 solr-7.1.0.tgz
[root@centos7 src]# 

И, собственно — запускаем установку:

# cd  solr-7.1.0 && bash bin/install_solr_service.sh --strip-components=2 ../solr-7.1.0.tgz

Вывод:

id: solr: no such user
Creating new user: solr

Extracting ../solr-7.1.0.tgz to /opt


Installing symlink /opt/solr -> /opt/solr-7.1.0 ...


Installing /etc/init.d/solr script ...


Installing /etc/default/solr.in.sh ...

Service solr installed.
Customize Solr startup configuration in /etc/default/solr.in.sh
Waiting up to 180 seconds to see Solr running on port 8983 [\]  
Started Solr server on port 8983 (pid=118389). Happy searching!

    
Found 1 Solr nodes: 

Solr process 118389 running on port 8983
{
  "solr_home":"/var/solr/data",
  "version":"7.1.0 84c90ad2c0218156c840e19a64d72b8a38550659 - ubuntu - 2017-10-13 16:15:59",
  "startTime":"2017-11-09T21:37:04.167Z",
  "uptime":"0 days, 0 hours, 0 minutes, 7 seconds",
  "memory":"40.3 MB (%8.2) of 490.7 MB"}

Проверим, запустился ли сервер:

# service solr status

Found 1 Solr nodes: 

Solr process 118389 running on port 8983
{
  "solr_home":"/var/solr/data",
  "version":"7.1.0 84c90ad2c0218156c840e19a64d72b8a38550659 - ubuntu - 2017-10-13 16:15:59",
  "startTime":"2017-11-09T21:37:04.167Z",
  "uptime":"0 days, 0 hours, 2 minutes, 30 seconds",
  "memory":"23.7 MB (%4.8) of 490.7 MB"}

Для остановки используем:

# service solr stop

Для запуска, можно использовать:

# service solr start

Или, чтобы выполнить перезапуск, выполните:

# service solr restart

Добавим порт в Firewall

По умолчанию (я ничего не менял), солар использует 8983-й порт и его нужно добавить в межсетевой интерфейс. Т.к я использую CentOS 7, то данное действие будет выглядеть следующим образом:

# firewall-cmd --zone=public --add-port=8983/tcp --permanent
# firewall-cmd --reload

PS: Если имеется CentOS 5/6 — выполните:

# iptables -A INPUT -p tcp -s localhost --dport 8983 -j ACCEPT
# iptables -A INPUT -p tcp --dport 8983 -j DROP
# service iptables save

Проыерям что соединения идут:

# netstat -natpl|grep 8983
tcp        0      0 192.168.13.211:43532    192.168.13.211:8983     ESTABLISHED 118943/kdeinit4: ki 
tcp        0      0 192.168.13.211:43524    192.168.13.211:8983     ESTABLISHED 118939/kdeinit4: ki 
tcp        0      0 192.168.13.211:43528    192.168.13.211:8983     ESTABLISHED 118941/kdeinit4: ki 
tcp        0      0 192.168.13.211:43530    192.168.13.211:8983     ESTABLISHED 118942/kdeinit4: ki 
tcp        0      0 192.168.13.211:43526    192.168.13.211:8983     ESTABLISHED 118940/kdeinit4: ki 
tcp6       0      0 :::8983                 :::*                    LISTEN      118389/java         
tcp6       0      0 192.168.13.211:8983     192.168.13.211:43530    ESTABLISHED 118389/java         
tcp6       0      0 192.168.13.211:8983     192.168.13.211:43532    ESTABLISHED 118389/java         
tcp6       0      0 192.168.13.211:8983     192.168.13.211:43526    ESTABLISHED 118389/java         
tcp6       0      0 192.168.13.211:8983     192.168.13.211:43528    ESTABLISHED 118389/java         
tcp6       0      0 192.168.13.211:8983     192.168.13.211:43524    ESTABLISHED 118389/java         

Как видно с вывода — у меня все отлично.

Добавим службу в автозагрузку:

# systemctl enable solr.service

PS: Если имеется CentOS 5/6 — выполните:

# chkconfig --add solr
# chkconfig | grep solr

Настройка — завершена.

Установка Solr в Debian/Ubuntu

Первое что необходимо сделать перед установкой солара — установить JAVA. Я описывал процесс установки в своих статьях:

Узнать размер Java Heap Memory Size

Установка переменных JAVA_HOME / PATH в Linux

Установка Java на Debian/Ubuntu/Mint

Установка JAVA 9 (JDK9) на Debian/Ubuntu/LinuxMint

И так, смотрим какая версия джавы имеется на ОС:

# java -version

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Сейчас необходимо скачать сам solr, по этому — выполняем команду:

# cd /usr/local/src && wget http://apache.org/dist/lucene/solr/7.1.0/solr-7.1.0.tgz

PS: На момент написания статьи, используеться самая новая версия ПО.

Выполняем расспаковку:

$ tar xfvz solr-*.tgz

Смотрим что имеется:

[root@Debian8 src]# ll
total 148908
drwxr-xr-x. 9 root root       201 Nov  9 23:33 solr-7.1.0
-rw-r--r--. 1 root root 152481397 Oct 13 22:21 solr-7.1.0.tgz
[root@Debian8 src]# 

И, собственно — запускаем установку:

# cd  solr-7.1.0 && bash bin/install_solr_service.sh --strip-components=2 ../solr-7.1.0.tgz

Проверим, запустился ли сервер:

# service solr status

Для остановки используем:

# service solr stop

Для запуска, можно использовать:

# service solr start

Или, чтобы выполнить перезапуск, выполните:

# service solr restart

Добавим порт в Firewall

По умолчанию (я ничего не менял), солар использует 8983-й порт и его нужно добавить в межсетевой интерфейс. Т.к я использую Debian 8 (такие же действия и на новых версиях Ubuntu), то данное действие будет выглядеть следующим образом:

# firewall-cmd --zone=public --add-port=8983/tcp --permanent
# firewall-cmd --reload

PS: Если имеется более ранние версии ОС — выполните:

# iptables -A INPUT -p tcp -s localhost --dport 8983 -j ACCEPT
# iptables -A INPUT -p tcp --dport 8983 -j DROP
# service iptables save

Проыерям что соединения идут:

# netstat -natpl|grep 8983

Как видно с вывода — у меня все отлично.

Добавим службу в автозагрузку:

# systemctl enable solr.service

PS: Если имеется CentOS 5/6 — выполните:

# chkconfig --add solr
# chkconfig | grep solr

Настройка — завершена.

Установка Solr в Mac OS X

Ставим brew для начала — Установка brew в Mac OS X и потом выполняем поиск пакета:

$ brew search solr

У меня вывод следующий:

==> Searching local taps...
homebrew/php/php53-solr  homebrew/php/php54-solr  homebrew/php/php55-solr  homebrew/php/php56-solr  homebrew/php/php70-solr  homebrew/php/php71-solr  solr                     solr@5.5
==> Searching taps on GitHub...
==> Searching blacklisted, migrated and deleted formulae...

Чтобы поставить пакет, используем:

$ brew install solr

И осталось настроить….

Настройка Solr в Unix/Linux

И так, установку выполнили и solr сервер работает. Сейчас я создам 1-й мой core (имя которго — test_solr_core):

# su -c "/opt/solr/bin/solr create -c test_solr_core -n solrconfig.xml" -s /bin/sh solr

Created new core 'test_solr_core'

Давайте попробуем использовать его! Открываем ссылку:

http://192.168.13.211:8983

Где:

  • 192.168.13.211 — мой локальный IP. Можете использовать домен.
  • 8983 — Порт на котором висит соляр.

Получаем что-то типа:

первый запуск solr в Unix/Linux

первый запуск solr в Unix/Linux

Так же, можно передать Solr дополнительные параметры JVM, например:

# su -c '/opt/solr/bin/solr start -a "-Xdebug -Xrunjdwp:transport=dt_socket, server=y,suspend=n,address=1044"' -s /bin/sh solr

Запустите Solr с заданным значением MAXHEAP min (-Xms) и max (-Xmx) для JVM:

# su -c '/opt/solr/bin/solr start -m 1g' -s /bin/sh solr

Можно передать порт:

# su -c '/opt/solr/bin/solr start -p 8655' -s /bin/sh solr

Чтобы проверить все ли впорядке (правильно ли установился solr, правильные ли имеет права и т.д и т.п) используйте:

# su -c '/opt/solr/bin/solr assert --exists /opt/solr' -s /bin/sh solr

Можно запустить хелз_чек и проверить что и как работает, например:

# su -c '/opt/solr/bin/solr healthcheck -c gettingstarted' -s /bin/sh solr

Получим вывод:

{
  "collection":"gettingstarted",
  "status":"healthy",
  "numDocs":0,
  "numShards":2,
  "shards":[
    {
      "shard":"shard1",
      "status":"healthy",
      "replicas":[
        {
          "name":"core_node2",
          "url":"http://192.168.13.211:7574/solr/gettingstarted_shard1_replica_n1/",
          "numDocs":0,
          "status":"active",
          "uptime":"0 days, 0 hours, 1 minutes, 40 seconds",
          "memory":"100.4 MB (%20.5) of 490.7 MB"},
        {
          "name":"core_node4",
          "url":"http://192.168.13.211:8983/solr/gettingstarted_shard1_replica_n3/",
          "numDocs":0,
          "status":"active",
          "uptime":"0 days, 0 hours, 1 minutes, 45 seconds",
          "memory":"108.9 MB (%22.2) of 490.7 MB",
          "leader":true}]},
    {
      "shard":"shard2",
      "status":"healthy",
      "replicas":[
        {
          "name":"core_node6",
          "url":"http://192.168.13.211:7574/solr/gettingstarted_shard2_replica_n5/",
          "numDocs":0,
          "status":"active",
          "uptime":"0 days, 0 hours, 1 minutes, 40 seconds",
          "memory":"100.9 MB (%20.6) of 490.7 MB"},
        {
          "name":"core_node8",
          "url":"http://192.168.13.211:8983/solr/gettingstarted_shard2_replica_n7/",
          "numDocs":0,
          "status":"active",
          "uptime":"0 days, 0 hours, 1 minutes, 45 seconds",
          "memory":"109 MB (%22.2) of 490.7 MB",
          "leader":true}]}]}

Скопируем конфиг (сделаем бэкап файла):

# cp  /opt/solr/server/etc/jetty.xml{,_BK}

Открываем файл:

# vim /opt/solr/server/etc/jetty.xml

Находим строку:

 <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>

И заменяем на:

                 <!-- <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> -->
                 <!-- here begins ip securing -->
                 <New class="org.eclipse.jetty.server.handler.IPAccessHandler">
                   <Call name="addWhite">
                     <!-- list of args with ip-addresses -->
                     <Arg>127.0.0.1</Arg>
                   </Call>
                   <Call name="addWhite">
                     <!-- list of args with ip-addresses -->
                     <Arg>192.168.13.211</Arg>
                   </Call>
                   <Call name="addWhite">
                     <!-- list of args with ip-addresses -->
                     <Arg>0.0.0.0/8</Arg>
                   </Call>
                   <Set name="handler">
                     <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
                   </Set>
                 </New>
                 <!-- end of securing -->

И перезапускаем соляр:

# service solr restart

PS: Не забываем добавить правило в SELinux, ну или выключите его вообще, вот пример — отключить SELinux на CentOS

Только для указанных IP адресов, будет доступен соляр, а для всех остальных покажет:

HTTP ERROR: 403
Problem accessing /solr/. Reason: 
    Forbidden

Запуск Solr в режиме SolrCloud

Чтобы запустить solr в режиме SolrCloud, используем следующую команду:

# /opt/solr/bin/solr -e cloud

Если не получиться запустить, всегда можно использовать «-force» ключ:

# /opt/solr/bin/solr start -e cloud -force

PS: Запуст соляра от рута — не желателен, по этому, выполняем:

# su -c "/opt/solr/bin/solr start -e cloud -force" -s /bin/sh solr

Пример моей тестовой конфигурации:

# su -c "/opt/solr/bin/solr start -e cloud -h 192.168.13.211" -s /bin/sh solr

Welcome to the SolrCloud example!

This interactive session will help you launch a SolrCloud cluster on your local workstation.
To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]: 

Ok, let's start up 2 Solr nodes for your example SolrCloud cluster.
Please enter the port for node1 [8983]: 

Please enter the port for node2 [7574]: 

Solr home directory /opt/solr/example/cloud/node1/solr already exists.
/opt/solr/example/cloud/node2 already exists.

Starting up Solr on port 8983 using command:
"/opt/solr/bin/solr" start -cloud -p 8983 -s "/opt/solr/example/cloud/node1/solr" -h 192.168.13.211

Waiting up to 180 seconds to see Solr running on port 8983 [\]  
Started Solr server on port 8983 (pid=19345). Happy searching!

    
Starting up Solr on port 7574 using command:
"/opt/solr/bin/solr" start -cloud -p 7574 -s "/opt/solr/example/cloud/node2/solr" -h 192.168.13.211 -z localhost:9983

/opt/solr/bin/solr: line 2017: /var/solr/solr-7574.pid: Permission denied
Waiting up to 180 seconds to see Solr running on port 7574 [\]  
Started Solr server on port 7574 (pid=19547). Happy searching!

INFO  - 2017-11-20 22:38:49.070; org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider; Cluster at localhost:9983 ready

Now let's create a new collection for indexing documents in your 2-node cluster.
Please provide a name for your new collection: [gettingstarted] 
techproducts
How many shards would you like to split techproducts into? [2]

How many replicas per shard would you like to create? [2] 

Please choose a configuration for the techproducts collection, available options are:
_default or sample_techproducts_configs [_default] 
sample_techproducts_configs
Re-using existing configuration directory techproducts
Created collection 'techproducts' with 2 shard(s), 2 replica(s) with config-set 'techproducts'

Enabling auto soft-commits with maxTime 3 secs using the Config API

POSTing request to Config API: http://192.168.13.211:8983/solr/techproducts/config
{"set-property":{"updateHandler.autoSoftCommit.maxTime":"3000"}}
Successfully set-property updateHandler.autoSoftCommit.maxTime to 3000


SolrCloud example running, please visit: http://192.168.13.211:8983/solr 

# 

Данный пример взят из официальной документации. Идем дальше…

Запускаем индекс techproducts данных:

# /opt/solr/bin/post -c techproducts /opt/solr/example/exampledocs/*


java -classpath /opt/solr/dist/solr-core-7.1.0.jar -Dauto=yes -Dc=techproducts -Ddata=files org.apache.solr.util.SimplePostTool /opt/solr/example/exampledocs/books.csv /opt/solr/example/exampledocs/books.json /opt/solr/example/exampledocs/gb18030-example.xml /opt/solr/example/exampledocs/hd.xml /opt/solr/example/exampledocs/ipod_other.xml /opt/solr/example/exampledocs/ipod_video.xml /opt/solr/example/exampledocs/manufacturers.xml /opt/solr/example/exampledocs/mem.xml /opt/solr/example/exampledocs/money.xml /opt/solr/example/exampledocs/monitor2.xml /opt/solr/example/exampledocs/monitor.xml /opt/solr/example/exampledocs/more_books.jsonl /opt/solr/example/exampledocs/mp500.xml /opt/solr/example/exampledocs/post.jar /opt/solr/example/exampledocs/sample.html /opt/solr/example/exampledocs/sd500.xml /opt/solr/example/exampledocs/solr-word.pdf /opt/solr/example/exampledocs/solr.xml /opt/solr/example/exampledocs/test_utf8.sh /opt/solr/example/exampledocs/utf8-example.xml /opt/solr/example/exampledocs/vidcard.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file books.csv (text/csv) to [base]
POSTing file books.json (application/json) to [base]/json/docs
POSTing file gb18030-example.xml (application/xml) to [base]
POSTing file hd.xml (application/xml) to [base]
POSTing file ipod_other.xml (application/xml) to [base]
POSTing file ipod_video.xml (application/xml) to [base]
POSTing file manufacturers.xml (application/xml) to [base]
POSTing file mem.xml (application/xml) to [base]
POSTing file money.xml (application/xml) to [base]
POSTing file monitor2.xml (application/xml) to [base]
POSTing file monitor.xml (application/xml) to [base]
POSTing file more_books.jsonl (application/json) to [base]/json/docs
POSTing file mp500.xml (application/xml) to [base]
POSTing file post.jar (application/octet-stream) to [base]/extract
POSTing file sample.html (text/html) to [base]/extract
POSTing file sd500.xml (application/xml) to [base]
POSTing file solr-word.pdf (application/pdf) to [base]/extract
POSTing file solr.xml (application/xml) to [base]
POSTing file test_utf8.sh (application/octet-stream) to [base]/extract
POSTing file utf8-example.xml (application/xml) to [base]
POSTing file vidcard.xml (application/xml) to [base]
21 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:03.276
# 

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

http://localhost:8983/solr/#/techproducts/query

В моем случае:

http://192.168.13.211:8983/solr/#/techproducts/query

Но это выполнение в самом браузере. Солр поддерживает поиск и через консоль, для этого, выполняем:

$ curl "http://localhost:8983/solr/techproducts/select?indent=on&q=*:*"
$ curl "http://192.168.13.211:8983/solr/techproducts/select?indent=on&q=*:*"

Все работает, идем дальше.

Давайте попробуем поискать что-то конкретное, например:

# curl "http://192.168.13.211:8983/solr/techproducts/select?q=foundation"

Или:

# curl "http://192.168.13.211:8983/solr/techproducts/select?q=foundation&fl=id"

Еще пример:

# curl "http://192.168.13.211:8983/solr/techproducts/select?q=cat:electronics"

Поиск по фразе, можно замутить вот так:

# curl "http://192.168.13.211:8983/solr/techproducts/select?q=\"CAS+latency\""

Для объединение поисков можно использовать:

# curl "http://192.168.13.211:8983/solr/techproducts/select?q=%2Belectronics%20%2Bmusic"

Если вы используете curl, вы должны закодировать символ +, поскольку он имеет зарезервированную цель в URL-адресах (кодируя символ пробела). Кодировка для + будет равна %2B.

ИЛИ:

# curl "http://192.168.13.211:8983/solr/techproducts/select?q=%2Belectronics+-music"

Иногда бывает так, что он не может получить нужные директории из-за того, что нехватает прав — исправить можно:

# chown -R solr:solr /opt/solr*

Чтобы удалить созданный пример, используем:

# su -c "/opt/solr/bin/solr delete -c techproducts" -s /bin/sh solr

Т.к это был тостовый пример, то я его удалил…. И создаю новую коллекцию:

# su -c "/opt/solr/bin/solr create -c My_new_collection -s 2 -rf 2" -s /bin/sh solr

Получаем вывод:

WARNING: Using _default configset. Data driven schema functionality is enabled by default, which is
         NOT RECOMMENDED for production use.

         To turn it off:
            curl http://localhost:7574/solr/My_new_collection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
Created collection 'My_new_collection' with 2 shard(s), 2 replica(s) with config-set 'My_new_collection'

Давайте сейчас вольем в новую колекцию некоторые данные:

# curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://192.168.13.211:8983/solr/My_new_collection/schema

{
 "responseHeader":{
 "status":0,
 "QTime":2152}}

Можно поиграться с кверями, но мы идем дальше…..

Перед тем как мы начнем индексирование, создаем поле «catchall» селдующим образом:

# curl -X POST -H 'Content-type:application/json' --data-binary '{"add-copy-field" : {"source":"*","dest":"_text_"}}' http://192.168.13.211:8983/solr/My_new_collection/schema

После чего, перейдем к индексированию (для JSON):

# /opt/solr/bin/post -c My_new_collection /opt/solr/example/films/films.json

PS: Делаем от юзера:

# su -c "/opt/solr/bin/post -c My_new_collection /opt/solr/example/films/films.json " -s /bin/sh solr

java -classpath /opt/solr/dist/solr-core-7.1.0.jar -Dauto=yes -Dc=My_new_collection -Ddata=files org.apache.solr.util.SimplePostTool /opt/solr/example/films/films.json
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/My_new_collection/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file films.json (application/json) to [base]/json/docs
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/My_new_collection/update...
Time spent: 0:00:02.317

После чего, перейдем к индексированию (для XML):

# /opt/solr/bin/post -c My_new_collection /opt/solr/example/films/films.xml

PS: Делаем от юзера:

# su -c "/opt/solr/bin/post -c My_new_collection /opt/solr/example/films/films.xml" -s /bin/sh solr
java -classpath /opt/solr/dist/solr-core-7.1.0.jar -Dauto=yes -Dc=My_new_collection -Ddata=files org.apache.solr.util.SimplePostTool /opt/solr/example/films/films.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/My_new_collection/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file films.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/My_new_collection/update...
Time spent: 0:00:00.977

Помимо предоставления результатов поиска, запрос Solr может возвращать количество документов, содержащих каждое уникальное значение во всем результирующем наборе. Например, выполним квери для работы с facet:

# curl "http://192.168.13.211:8983/solr/My_new_collection/select?q=*:*&rows=0&facet=true&facet.field=genre_str"

Еще одно:

# curl "http://192.168.13.211:8983/solr/My_new_collection/select?=&q=*:*&facet.field=genre_str&facet.mincount=200&facet=on&rows=0"

Для остановки всех нод что запустили, выполняем:

# su -c "/opt/solr/bin/solr stop -all" -s /bin/sh solr

Я на дополню данную статью при первой необходимости.

Вот и все, статья «Установка Solr в Unix/Linux» завершена.

The post Установка Solr в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-solr-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/uvelichit-max_connections-v-mysql/ https://linux-notes.org/uvelichit-max_connections-v-mysql/#respond Tue, 22 Aug 2017 19:26:43 +0000 http://linux-notes.org/?p=13691 Увеличить max_connections в mysql Если вы получаете ошибки»too many connections» (слишком много соединений) в MySQL, можно изменить max_connections параметер ( Это приведет к большему употреблению RAM, будьте осторожны!). Значение max_connections, по умолчанию равно 80-100. Чтобы проверить данный параметр, подключаемся к серверу с mysql : # mysql -u root -p Вводим пароль от пользователя root. После […]

The post Увеличить max_connections в mysql first appeared on linux-notes.org.]]>

Увеличить max_connections в mysql

Если вы получаете ошибки»too many connections» (слишком много соединений) в MySQL, можно изменить max_connections параметер ( Это приведет к большему употреблению RAM, будьте осторожны!).

Значение max_connections, по умолчанию равно 80-100. Чтобы проверить данный параметр, подключаемся к серверу с mysql :

# mysql -u root -p

Вводим пароль от пользователя root. После этого, выполняем:

> show variables like "max_connections";

Должны получить что-то типа:

+-----------------+-------+
| Variable_name | Value|
+-----------------+-------+
| max_connections | 80 |
+-----------------+-------+

Вы можете изменить данный параметр. Предположим, вы хотите увеличить его до 200, то для этого стоит выполнить следующую команду (очевидно, что она будет работать только в том случае, если пользователь, у которого вы вошли в систему, имеет достаточные разрешения для этого):

> set global max_connections = 200;

Данная опция, заработает моментально, но сбросится после перезагрузки mysql, по этому — давайте исправим это. Открываем файл:

# vim /etc/my.cnf

Находим секцию [mysqld] и под ней вставляем:

max_connections = 200

Теперь, когда вы перезапустите MySQL,  этот параметр останется таким же.

Как я уже говорил, увеличение количества подключений, увеличит потенциальный объем оперативной памяти, необходимый для запуска MySQL. Увеличивайте max_connections с осторожностью!

А на этому, у меня все. Статья «Увеличить max_connections в mysql » завершена.

The post Увеличить max_connections в mysql first appeared on linux-notes.org.]]>
https://linux-notes.org/uvelichit-max_connections-v-mysql/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-influxdb-v-unix-linux/ https://linux-notes.org/ustanovka-influxdb-v-unix-linux/#respond Thu, 03 Aug 2017 10:40:29 +0000 http://linux-notes.org/?p=13343 Установка InfluxDB в Unix/Linux InfluxDB — база данных временных рядов с открытым исходным кодом, разработанная в InfluxData. Данный продукт написан на Go и оптимизирован для быстрого хранения с высокой скоростью поиска данных по временным рядам. Данную ДБ используют в связке с CollectD и Grafana: Установка grafana в Unix/Linux Настройка Grafana с Graphite/Zabbix/Prometheus/MySQL/InfluxDB/Elasticsearch/CloudWatch для сбора и […]

The post Установка InfluxDB в Unix/Linux first appeared on linux-notes.org.]]>

Установка InfluxDB в Unix/Linux

InfluxDB — база данных временных рядов с открытым исходным кодом, разработанная в InfluxData. Данный продукт написан на Go и оптимизирован для быстрого хранения с высокой скоростью поиска данных по временным рядам.

Данную ДБ используют в связке с CollectD и Grafana:

Установка grafana в Unix/Linux

Настройка Grafana с Graphite/Zabbix/Prometheus/MySQL/InfluxDB/Elasticsearch/CloudWatch для сбора и отображения метрик в Unix/Linux

InfluxData состоит из:

  • Telegraf — программа которая позволяет собирать метрики с временными рядами.
  • InfluxDB — БД которую можно кластерезировать. Она была создана специально для хранения временных рядов.
  • Chronograf — инструмент для визуализации временных рядов. Web приложение для настройки графиков и dashboard’ов.
  • Kapacitor — утилита для обработки значений временных рядов и контроля отклонений значений.

Данные приложения, образуют стек технологий (который можно назвать TICK) и он выступает синонимом InfluxData.

Установка InfluxDB в Unix/Linux

Приведу примеры установок на различные ОС.

По умолчанию InfluxDB будет использовать 8083 и 8086 TCP-порты. По завершении установки вы можете изменить эти порты и другие параметры в файле конфигурации.

Установка InfluxDB в CentOS/RedHat/Fedora

Добавляем репозиторий:

# cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

А затем устанавливаем:

# yum install influxdb -y

Для запуска службы InfluxDB, используйте:

# service influxdb start

Как-то так.

Установка InfluxDB в Debian

Для пользователей Debian вы можете добавить конфигурацию репозитория InfluxData, для этого добавим ключ:

# curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

Перечитаем конфигурацию:

# source /etc/os-release

Добавляем репозиторий (в зависимости от версии):

# test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
# test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

А затем устанавливаем:

# apt-get update && apt-get install influxdb

Для запуска службы InfluxDB, используйте:

# service influxdb start

Как-то так.

Установка InfluxDB в Ubuntu

Для пользователей Ubuntu вы можете добавить конфигурацию репозитория InfluxData, для этого добавим ключ:

# curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

Перечитаем конфигурацию:

# source /etc/lsb-release

Добавляем репозиторий:

# echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

А затем устанавливаем:

# apt-get update && apt-get install influxdb

Для запуска службы InfluxDB, используйте:

# service influxdb start

Как-то так.

Установка InfluxDB в SLES & openSUSE

Добавляем репозиторий:

# zypper ar -f obs://devel:languages:go/ go

А затем устанавливаем:

# zypper in influxdb

Установка InfluxDB в FreeBSD/PC-BSD

Устанавливаем:

# pkg install influxdb

Конфиг находится: /usr/local/etc/influxd.conf, а пример можно найти —  /usr/local/etc/influxd.conf.sample.

Для запуска службы InfluxDB, используйте:

# service influxd onestart

Для авто-запуска, пропишите в/etc/rc.conf файле:

influxd_enable="YES"

Как-то так.

Установка InfluxDB в Mac OS X

Установим для начала Homebrew и выполним потом:

$ brew install influxdb

Чтобы запустить influxdb при входе в систему, юзайте:

# ln -sfv /usr/local/opt/influxdb/*.plist ~/Library/LaunchAgents

Для запуска службы InfluxDB, используйте:

# launchctl load ~/Library/LaunchAgents/homebrew.mxcl.influxdb.plist

PS: Если вы не хотите (или нужно запустить) в отдельном окне, то для этого используйте:

$ influxd -config /usr/local/etc/influxdb.conf

Как-то так.

Настройка InfluxDB в Unix/Linux

По умолчанию InfluxDB использует порты 8083, 8086, 8090 и 8099. Можно использовать и другие порты — для этого потребуется внести соответствующие изменения в конфигурационный файл. Рассмотрим особенности конфигурирования InfluxDB более подробно.

Проверим какие слушает, можно:

# netstat -natpl | grep -E "80[8-9][3-9]"
tcp        0      0 127.0.0.1:8088              0.0.0.0:*                   LISTEN      4461/influxd        
tcp        0      0 :::8086                     :::*                        LISTEN      4461/influxd        
# 

Проверяем что сервис запущен:

[root@localhost ~]# ps aux | grep influxdb | grep -Ev "grep"
influxdb 4461 0.2 1.2 285200 12880 ? Sl 23:45 0:00 /usr/bin/influxd -pidfile /var/run/influxdb/influxd.pid -config /etc/influxdb/influxdb.conf
[root@localhost ~]#

В конфигурационном файле, открываем его для начала:

# vim /etc/influxdb/influxdb.conf

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

  • [logging] — Задается некоторые детали для логирования. Можно выставить уровень самого логироваия и указать имя лога;
  • [admin] — Задаются некоторые настройки веб-интерфейса. Можно задать порт (на нем будет работать внутренний веб-сервер). Так же, можно указать путь к файлам веб-интерфейса;
  • [api] — Настройки HTTP API;
  • [input_plugins] — Задаются некоторые настройки для ввода данных из внешних источников (можно настроить отправку данных в Grafana; Также в этом разделе можно настроить ввод данных по протоколу UDP).
  • [raft] —Задаются настройки протокола согласования RAFT;
  • [storage] — Задаются настройки хранения данных;
  • [cluster] —Задаются настройки для работы в кластерном режиме (более подробно они будут описаны ниже;
  • [wal] — настройки опережающего введения журнала (Write Ahead Logging, WAL).

Открываем конфиг:

# vim /etc/influxdb/influxdb.conf

Приводим к виду:

[http]  
enabled = true  
bind-address = ":8086"      # change to a specific interface if needed 
auth-enabled = true         # will enforce authentication

Для генерации конфига, используйте:

$ influxd config > /etc/influxdb/influxdb.generated.conf

Подключение и создание БД в influxDB

Чтобы подключится, используем:

# influx

Для создания БД, используем следующую команду:

> CREATE DATABASE its_my_first_DB

Где:

its_my_first_DB — Название БД.

Просмотр баз данных в influxDB

Чтобы подключится, используем:

# influx

Чтобы просмотреть какие БД имеются, используем:

> SHOW DATABASES

Использование базы данных в influxDB

Чтобы подключится, используем:

# influx

Чтобы начать использовать БД:

> USE mydb

Запишем некоторые данные в созданную БД:

> INSERT cpu,host=My_server1,region=us_west value=0.88

Или, вставим еще другие данные:

> INSERT temperature,machine=node_1,type=assembly external=13,internal=66

Не очень сложно.

Просмотр данных в influxDB базе

Чтобы подключится, используем:

# influx

Чтобы просмотреть какие БД имеются, используем:

> SHOW DATABASES

Чтобы начать использовать БД:

> USE mydb

И, выбираем данные:

> SELECT * FROM cpu
name: cpu
time                host    region  value
----                ----    ------  -----
1501535158522710659 My_server1 us_west 0.88
> 

Или:

> SELECT * FROM temperature
name: temperature
time                external internal machine type
----                -------- -------- ------- ----
1501535403235325917 13       66       node_1  assembly
> 

InfluxDB поддерживает сложный язык запросов, позволяющий выполнять много разных типов запросов. Например:

> SELECT * FROM /.*/ LIMIT 1
> SELECT * FROM CPU_loading
> SELECT * FROM MEMORY WHERE value > 33243243424

Создание пользователя в influxDB

Создать пользователя можно одним из следующих примерах:

> CREATE USER My_USER WITH PASSWORD 'Your_PW' WITH ALL PRIVILEGES

Или:

> CREATE USER My_USER WITH PASSWORD 'Your_PW'

Выставить права можно:

> GRANT ALL ON My_DB_1 TO My_USER
> GRANT READ ON My_DB_2 TO My_USER2

Все гениальное — просто!

А я на этом завершаю свою статью «Установка InfluxDB в Unix/Linux».

The post Установка InfluxDB в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-influxdb-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-redis-v-unix-linux/ https://linux-notes.org/ustanovka-redis-v-unix-linux/#comments Thu, 27 Apr 2017 03:44:10 +0000 http://linux-notes.org/?p=9879 Установка Redis в Unix/Linux Redis (англ. remote dictionary server) — сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом. Нереляционная высокопроизводительная СУБД. Установка Redis в Unix/Linux Я расскажу как можно установить redis на различные Unix/Linux ОС. Установка Redis на Debian/Ubuntu -===СПАСОБ 1 — использовать пакетный менеджер===- Самый простой способ установки Redis- просто […]

The post Установка Redis в Unix/Linux first appeared on linux-notes.org.]]>

Установка Redis в Unix/Linux

Redis (англ. remote dictionary server) — сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом. Нереляционная высокопроизводительная СУБД.

Установка Redis в Unix/Linux

Я расскажу как можно установить redis на различные Unix/Linux ОС.

Установка Redis на Debian/Ubuntu

-===СПАСОБ 1 — использовать пакетный менеджер===-

Самый простой способ установки Redis- просто запустите:

# apt-get install redis-server -y

Но есть один минус — такой метод использования, не установит самую новую и последнюю версию.

-===СПАСОБ 2 — использовать сорцы===-

Обновляемся и ставим необходимое ПО:

# apt-get update -y && apt-get install build-essential tcl8.6 -y

Собственно, выкачиваем последнюю и стабильную версию редиса:

# cd /usr/local/src && wget http://download.redis.io/releases/redis-stable.tar.gz

Распаковываем скачанный архив:

# tar xzf redis-stable.tar.gz

Переходим в папку и собираем сборку:

# cd redis-stable && make

PS: Как по мне, с этого момента, стоит собрать deb-пакет и потом установить его! Но можно обойтись и без этого. Вот чтиво — Создание RPM или DEB пакетов с Checkinstall в Linux

Если вы не хотите собирать пакет, (опционально запустите «make test», чтобы проверить, все ли в порядке) выполняем:

# make install

Redis установлен. Чтобы настроить redis для запуска в фоновом режиме, запустите скрипт:

# bash /usr/local/src/redis-stable/utils/install_server.sh 

Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Success!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!

Вам будет предложено ввести различные значения для создания конфигурации, но вы можете просто нажать клавишу «enter», чтобы принять значения по умолчанию.

Проверим версию редиски:

# redis-server --version

Redis server v=3.2.8 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=3376b593640adc79

Как видно с вывода — у меня самая последняя версия — redis-3.2.8.

Запустить сервис, можно:

# service redis_6379 start

Презапустить сервис, можно:

# service redis_6379 restart

Чтобы проверить статус:

# service redis_6379 status

Для остановки, используем:

# service redis_6379 stop

Для использования редиса, запустите:

# redis-cli

Как-то так.

Чтобы посмотреть, открыл ли редис-сервер соединения, можно использовать:

# netstat -natp | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      16245/redis-server

Но как по мне, данная установка хороша, — если использовать только один редис экземпляр на сервере. Т.к редис не поддерживает многопоточность ( насколько мне это известно) и использует 1 процессор. И чтобы увеличить производительность, обычно…. устанавливают еще несколько экземпляров и вешают их на разные порты.

Создаем папку где будут лежать конфиги с редисом:

# mkdir /etc/redis

Копируем конфиг:

# cp /usr/local/src/redis-stable/redis.conf  /etc/redis/6379.conf

Отредактируем конфиг:

# vim /etc/redis/6379.conf

Находим:

dir ./

И меняем на:

dir /var/lib/redis_6379

Я хотел бы чтобы сервер работал как демон:

daemonize yes

Так же, нужно прописать какой гипервизорд будем использовать:

supervised systemd

PS: Чтобы проверить что используется, используйте:

# ps -s1 | awk '{print $4}'| grep -Ev "CMD"

PS: Вот полезное чтиво — Система инициализации в Unix/Linux

И так, мой конфиг выглядит:

bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised systemd
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis_6379.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis_6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

SYSTEMD запуск.

Создаем Redis systemd Unit файл:

# vim /etc/systemd/system/redis.service

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

[Unit]
Description=Redis_6379
After=network.target

[Service]
User=redis
Group=redis
Type=forking
PermissionsStartOnly=true
PIDFile=/var/run/redis_6379.pid
#
ExecStartPre=/bin/touch /var/log/redis_6379.log
ExecStartPre=/bin/chown redis:redis /var/log/redis_6379.log
#
ExecStart=/usr/local/redis_6379/redis-server /etc/redis/6379.conf
ExecStop=/usr/local/redis_6379/redis-cli shutdown
Restart=always
RestartSec=3


#ExecStart=/sbin/start-stop-daemon --start --chuid redis:redis --pidfile /var/run/redis_6379.pid --umask 007 --exec /usr/local/redis_6379/redis-server -- /etc/redis/6379.conf
#ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

Перечитываем конфигурацию:

# systemctl daemon-reload

INIT запуск.

# vim /etc/init.d/redis_6379

И вставляем:

#!/bin/sh
#Configurations injected by install_server below....

EXEC=/usr/local/redis_6379/redis-server
CLIEXEC=/usr/local/redis_6379/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/6379.conf"
REDISPORT="6379"
###############
# SysV Init Information
# chkconfig: - 58 74
# description: redis_6379 is the redis daemon.
### BEGIN INIT INFO
# Provides: redis_6379
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop redis_6379
# Description: Redis daemon
### END INIT INFO


case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
            echo "$PIDFILE exists, process is already running or crashed"
        else
            echo "Starting Redis server..."
            $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping ..."
            $CLIEXEC -p $REDISPORT shutdown
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
        fi
        ;;
    status)
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            echo 'Redis is not running'
        else
            echo "Redis is running ($PID)"
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Please use start, stop, restart or status as first argument"
        ;;
esac

Создаем пользователя:

# adduser --system --group --no-create-home redis

Создаем папку где будут лежать либы:

# mkdir /var/lib/redis_6379

Выставляем группу и владельца:

# chown redis:redis /var/lib/redis_6379

И, выставляем права:

# chmod 770 /var/lib/redis_6379

Создаем папку где будет лежать файлы с редисом:

# mkdir /usr/local/redis_6379

Копируем нужные данные в созданную папку:

# cp /usr/local/src/redis-stable/src/redis-server /usr/local/redis_6379/
# cp /usr/local/src/redis-stable/src/redis-cli /usr/local/redis_6379/
# cp /usr/local/src/redis-stable/src/redis-benchmark /usr/local/redis_6379/

и, можно еще:

# cp /usr/local/src/redis-stable/src/redis-check-aof /usr/local/redis_6379/
# cp /usr/local/src/redis-stable/src/redis-check-rdb /usr/local/redis_6379/

Для запуска, используем:

# systemctl start redis

Или (если для инита):

# /etc/init.d/redis_6379 start

Попозже, я расскажу как можно написать свои INIT/SYSTEMD Unit скрипты для запуска утилит или ваших скриптов. Это будет не в этой теме. Но я гарантирую — это будет!

Установка Redis на CentOS/RedHat/Fedora

-===СПАСОБ 1 — использовать пакетный менеджер===-

Подключаем EPEL  репозиторий:

Как включить EPEL репозиторий на CentOS

Самый простой способ установки Redis- просто запустите:

# yum install redis -y

Но вы не получите самую новую версию ПО.

-===СПАСОБ 2 — использовать сорцы===-

Обновляемся и ставим необходимое ПО:

# yum update -y && yum install make gcc* wget tcl -y

Собственно, выкачиваем последнюю и стабильную версию редиса:

# cd /usr/local/src && wget http://download.redis.io/releases/redis-stable.tar.gz

Распаковываем скачанный архив:

# tar xzf redis-stable.tar.gz

Переходим в папку и собираем сборку:

# cd redis-stable && make

PS: Как по мне, с этого момента, стоит собрать deb-пакет и потом установить его! Но можно обойтись и без этого. Вот чтиво — Создание RPM или DEB пакетов с Checkinstall в Linux

Если вы не хотите собирать пакет, (опционально запустите «make test», чтобы проверить, все ли в порядке) выполняем:

# make install

Redis установлен. Чтобы настроить redis для запуска в фоновом режиме, запустите скрипт:

# bash /usr/local/src/redis-stable/utils/install_server.sh 

Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Success!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!

Вам будет предложено ввести различные значения для создания конфигурации, но вы можете просто нажать клавишу «enter», чтобы принять значения по умолчанию.

Проверим версию редиски:

# redis-server --version

Запустить сервис, можно:

# service redis_6379 start

Презапустить сервис, можно:

# service redis_6379 restart

Чтобы проверить статус:

# service redis_6379 status

Для остановки, используем:

# service redis_6379 stop

Для использования редиса, запустите:

# redis-cli

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

$ chkconfig --add redis_6379

Или:

$ chkconfig --level 345 redis_6379 on

Меня в такой конфигурации, раздражает то, что он называется redis-server. Для меня логично было бы использовать «redis_6379» из-за того, что на сервере могут иметься еще экземпляры с редисом. По этому, если нужно изменить это, то приступим…

Нас интересует 2 файла:

  • /usr/local/bin/redis-server
    /usr/local/bin/redis-cli

Берем и переименовываем их:

# mv /usr/local/bin/redis-server /usr/local/bin/redis_6379

И собственно, 2-й файл:

# mv /usr/local/bin/redis-cli /usr/local/bin/redis_6379-cli

После этого, стоит поменять путь к данным файлам, для этого открываем:

# vim /etc/init.d/redis_6379

Находим:

EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

Меняем, на:

EXEC=/usr/local/bin/redis_6379
CLIEXEC=/usr/local/bin/redis_6379-cli

И перезапускаем редиску:

# service redis_6379 restart

Или:

# /etc/init.d/redis_6379 restart

И так, все изи.

Установка Redis на Mac OS X

-===СПАСОБ 1 — использовать пакетный менеджер===-

Устанавливаем homebrew:

Установка homebrew на Mac OS X

Можно поискать редис:

# brew search redis

Получить информацию о пакете Redis:

$ brew info redis

Для установки, используйте:

# brew install redis

Добавить редис в автозагрузку ОС:

$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

Чтобы убрать редис с автозагрузки ОС, используйте:

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Запуск редиски через «launchctl»:

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Запустите Redis-сервер, используя конфигурационный файл:

$ redis-server /usr/local/etc/redis.conf

Чтобы удалить, используйте:

$ brew uninstall redis

И удаляем:

$ rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Вот и все!

-===СПАСОБ 2 — использовать сорцы===-

Описывалось ранее.

Настройка Redis в Unix/Linux

Откроем конфиг:

# vim /etc/redis/6379.conf

У меня он выглядит следующим образом:

bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis_6379.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis/6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

И так, у меня редис висит на локалхосте ( 127.0.0.1 ), вот строка:

bind 127.0.0.1

Вообще, можно изменить данную строку на «0.0.0.0» или на конкретный IP адрес.

Строка:

protected-mode yes

Говорит что включен мод-защиты. Это означает, что никто из вне, не сможет подключится к данному редис-серверу. Если хотите чтобы клиенты с других хостов подключались к Redis, то установить в «no».

Сервер использует 6379-й порт. Можно повесить на сокет при необходимости.

Это стандартная конфигурация и она не идеальная, т.к она может «сожрать» всю RAM. Для того чтобы этого не произошло, стоит добавить:

maxmemory 2147483648

И так, я для редиса, ограничил использования виртуальной памяти до 2 Гб. Так же, можно защитить редиску-сервис и установить пароль, для этого — находим строку:

# requirepass foobared

И приводим к виду:

requirepass Your_PASSWORD_here

Иногда, бывает полезным — запретить использование команд, находим:

# rename-command CONFIG ""

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

rename-command CONFIG ""

Это запретит использования CONFIG команды в редис. Но можно и переименовать некоторую команду, например:

rename-command CONFIG rename_CONFIG

Данное выражение, заменит использование CONFIG на rename_CONFIG.

Чтобы проверить бенчмарк (нагрузку на редис-сервер), используйте команду:

$ redis-benchmark

На этом, у меня все. Статья «Установка Redis в Unix/Linux» завершена. В следующей теме, я расскажу как собрать кластер из редиску — как создать свой огород))))

The post Установка Redis в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-redis-v-unix-linux/feed/ 1
Page_c76a3fcf https://linux-notes.org/ochistit-memcached-kesh-v-unix-linux/ https://linux-notes.org/ochistit-memcached-kesh-v-unix-linux/#respond Mon, 24 Apr 2017 16:50:50 +0000 http://linux-notes.org/?p=10120 Очистить memcached кеш в Unix/Linux memcached — программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе хеш-таблицы. Я не буду говорить много о нем, т.к статья не об этом! Установка memcached в Unix/Linux(CentOS/Debian/Ubuntu) Работа с memcached в Unix/Linux Ну а сейчас по теме, поехали… Очистить memcached кеш в Unix/Linux Очистить кеш в memcache/memcached […]

The post Очистить memcached кеш в Unix/Linux first appeared on linux-notes.org.]]>

Очистить memcached кеш в Unix/Linux

memcached — программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе хеш-таблицы. Я не буду говорить много о нем, т.к статья не об этом!

Установка memcached в Unix/Linux(CentOS/Debian/Ubuntu)

Работа с memcached в Unix/Linux

Ну а сейчас по теме, поехали…

Очистить memcached кеш в Unix/Linux

Очистить кеш в memcache/memcached можно различными способами и сейчас я расскажу о них.

-===СПОСОБ 1 — использовать telnet===-

Самый простой способ — это использовать telnet:

$ telnet localhost 11211
flush_all
quit

Где:

  • localhost — Хост где находится мемкешед.
  • 11211  — порт который использует memcached.

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

$ netstat -natpl | grep "memcache[d]"

tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      79225/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      79225/memcached

Видим, что прослушивается все интерфейсы и порт — стандартный.

-===СПОСОБ 2 — использовать netcat (nc)===-

Так же, для очистки кеша, можно использовать netcat:

echo "flush_all" | nc localhost 11211

Или:

$ printf "flush_all\nquit\n" | nc  127.1 11211

Или, еще одна вариация:

echo "flush_all" | nc -w 2 localhost 11211

-===СПОСОБ 3 — использовать memcflush===-

Имеется memcflush тулза, дял чистки кешей:

memflush --servers=localhost:11211

PS: Но ее нужно установить!

Чтобы установить memcflush утилиту на Debian/Ubuntu,  используйте:

# apt-get install libmemcached-tools -y

Чтобы установить memcflush утилиту на CentOS/Fedora/RHEL,  используйте:

# yum install  libmemcached-* -y

-===СПОСОБ 4 — использовать конвеер команд===-

Запустите его на той машине где уже установлен мемкеш:

(sleep 2; echo flush_all; sleep 2; echo quit; ) | telnet 127.0.0.1 11211

-===СПОСОБ 5 — использовать конвеер команд===-

В Bash вы можете использовать этот причудливый синтаксис (с использования linux сокета):

# echo flush_all > /dev/tcp/localhost/11211

-===СПОСОБ 6 — использовать перезапуск службы===-

Можно использовать перезапуск службы:

# service memcached restart

PS: Как по мне — это не есть хорошо!

Как-то так! Надеюсь вы выберете что-то для себя и запомните. Если кто-то знает еще метод очистки мемкеша, пишите в комментарии.

А на этом, у меня все и тема «Очистить memcached кеш в Unix/Linux» завершена.

The post Очистить memcached кеш в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ochistit-memcached-kesh-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/optimizatsiya-nastroek-mongodb-v-unix-linux/ https://linux-notes.org/optimizatsiya-nastroek-mongodb-v-unix-linux/#respond Wed, 19 Apr 2017 20:01:35 +0000 http://linux-notes.org/?p=10019 Оптимизация настроек MongoDB в Unix/Linux На самом деле в MongoDB не так много настроек, есть только несколько параметров, которые вы можете изменить на сервере. Реальная настройка выполняется в запросах и индексах, которые должны присутствовать. И для этой цели хорошо подойдет dex утилита. Dex — это консольная утилита, которая может анализировать логи MongoDB, сравнивать запросы, которые регистрируются […]

The post Оптимизация настроек MongoDB в Unix/Linux first appeared on linux-notes.org.]]>

Оптимизация настроек MongoDB в Unix/Linux

На самом деле в MongoDB не так много настроек, есть только несколько параметров, которые вы можете изменить на сервере. Реальная настройка выполняется в запросах и индексах, которые должны присутствовать. И для этой цели хорошо подойдет dex утилита.

Dex — это консольная утилита, которая может анализировать логи MongoDB, сравнивать запросы, которые регистрируются в запущенном экземпляре MongoDB и сообщать вам, какие индексы следует добавить, чтобы оптимизировать вашу производительность.

Установка MongoDB в Unix/Linux

Я в своей статье, рассказывал как можно установить монгу. Если есть необходимость, воспользуйтесь следующим материалом:

Установка MongoDB в Unix/Linux

Создать/Удалить базу данных в MongoDB

Создание/Восстановление бэкапа баз данных в MongoDB

Как я сказал ранее, в mongodb,  не так уж и много что оптимизировать. Но давайте приступим….

Оптимизация настроек MongoDB в Unix/Linux

И так, нам потребуется dex и нужно его установить.

Инструмент dex устанавливается через pip — менеджер пакетов Python. Вот пример того, как можно установить pip на CentOS/Fedora/RedHat:

$ yum install python-pip -y

PS: Вот статья, как можно установить pip на другие Unix/Linux ОС:

Установка pip/setuptools/wheel в Unix/Linux

Чтобы установить dex,  используем:

$ pip install dex

Запускаем:

$ dex -f /var/log/mongodb/mongod.log mongodb://localhost

Данное действие, запустит dex, который будет читать все логи в  mongodb.log файле и проверять для каждого запроса, существуют ли необходимые индексы. Например:

$ dex -f mongod.log mongodb://localhost
{
    'runStats': {
        'linesRecommended': 66,
        'linesProcessed': 190,
        'linesPassed': 522
    },
    'results': [
        {
            'queryMask': '{"$query":{"columnId":""}}',
            'namespace': 'collection.table',
            'recommendation': {
                'index': '{"columnId": 1}',
                'namespace': 'collection.table',
                'shellCommand': 'db["collection"].ensureIndex({"columnId": 1}, {"background": true})'
            },
            'details': {
                'count': 55,
                'totalTimeMillis': 213856,
                'avgTimeMillis': 3888
            }
        }
    ]
}

Если нет необходимости что-то оптимизировать, вы получите нечто подобное:

$ dex -f /var/log/mongodb/mongod.log mongodb://localhost
{
 'runStats': {
 'linesRecommended': 0, 
 'linesProcessed': 0, 
 'linesPassed': 39
 }, 
 'results': []
}

Он проверил все строки в файле mongod.log и не смог посоветовать никакое улучшение. Хорошая новость — MongoDB, кажется, работает просто отлично!

Возможно, вы не хотите проверять каждый запрос в лог-файле. Можно добавить параметр «—slowms», чтобы проверять только запросы, которые превышают тайм-аут медленного журнала:

$ dex -f dex -f /var/log/mongodb/mongod.log mongodb://localhost --slowms 200

При таком варианте, будут проверяться только те запросы, длительность которых превышает 200 мс.

В качестве альтернативы вы можете использовать параметр «—watch», чтобы не парсить весь лог при запуске, а обрабатывать только новые записи. Такой вариант может быть полезным, когда ваш лог уже превышает пару ГБ, и вам нет необходимости использовать старые значения:

$ dex -f /var/log/mongodb/mongod.log mongodb://localhost --watch

Это значительно ускоряет запуск dex.

Инструмент dex предлагает вам очень простой способ применения индексов, которые он рекомендует: команда выводиться на выходе! Вот пример:

...
  'recommendation': {
    'index': '{"columnId": 1}',
    'namespace': 'collection.table',
    'shellCommand': 'db["collection"].ensureIndex({"columnId": 1}, {"background": true})'
  },
...

Чтобы применить команду, подключитесь к работающему экземпляру MongoDB, используя клиентский инструмент mongo, вторым аргументом является коллекция, которую вы хотите открыть:

$ mongo collection
> db["collection"].ensureIndex({"columnId": 1}, {"background": true})

В результате индекс добавляется в фоновом режиме: это не блокирует строки, и приложение может продолжать работать. В MongoDB есть несколько исходных индексов, но для меня они перевешивают недостаток наличия блокировки чтения и записи данных.

Если вы работаете с MongoDB, обязательно используйте инструмент dex, чтобы помочь устранить проблемы с производительностью.

На этому, у меня все. Тема «Оптимизация настроек MongoDB в Unix/Linux» завершена.

The post Оптимизация настроек MongoDB в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/optimizatsiya-nastroek-mongodb-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/replikatsiya-v-mongodb/ https://linux-notes.org/replikatsiya-v-mongodb/#comments Mon, 17 Apr 2017 16:35:04 +0000 http://linux-notes.org/?p=7483 Репликация в MongoDB И так, сейчас стоит следующая задача — это настроить репликацию с MongoDB. Если брать во внимание mysql, то у нее есть master-master и master-slave репликация, но с монгой немного не так. MongoDB имеет 2 вида репликации: Реплисеты (Replica Sets) Ведущий-ведомый (Master-Slave) Я в своей статье «Репликация в MongoDB» расскажу о них и приведу […]

The post Репликация в MongoDB first appeared on linux-notes.org.]]>

Репликация в MongoDB

И так, сейчас стоит следующая задача — это настроить репликацию с MongoDB. Если брать во внимание mysql, то у нее есть master-master и master-slave репликация, но с монгой немного не так. MongoDB имеет 2 вида репликации:

  • Реплисеты (Replica Sets)
  • Ведущий-ведомый (Master-Slave)

Я в своей статье «Репликация в MongoDB» расскажу о них и приведу готовые реализации.

Установка MongoDB в Unix/Linux

По установке монги, я рекомендую использовать мою статью:

Установка MongoDB в Unix/Linux

Я постарался рассказать как можно больше информации о ней и собрал в одно место. Если есть необходимость, ознакомьтесь.

Репликация в MongoDB

Хочу сказать что репликация вида master-slave не рекомендуется разработчиками. Но для общего развития, я приведу ода варианта. Но начнем с правильного решения — с репликасет.

Репликация MongoDB с Replica set

Суть ReplicaSet заключается в том, что она в себе сохраняет одинаковые наборы данных. Один сервер, должен выступать в качестве основного сервера ( на него будут поступать все данные — он же ведущий, он же  PRIMARY), а все остальные — являются вторичными ( они сохраняют копии данных с  PRIMARY — они же ведомые, они же SECONDARYs).

Можно настроить данную РепликуСет несколькими способами:

  • Использовать 1 сервер и запустить 3 экземпляра самой mongoDB.
  • Использовать 3 сервера с mongoDB.

И так, для правильно работы ReplicaSet необходимо 3 запущенных экземпляра или сервера с монгой:

  • Одна нода будет выступать как арбитр и не будет принимать на себя никакие данные. Его работа, заключается в том, чтобы выбрать того, кто будет сервером PRIMARY (Выступает как балансировщик- это не совсем правильно, но похоже).
  • Один сервер выступает в качестве PRIMARY сервера.
  • Один сервер выступает в качестве SECONDARY сервера.

В дальнейшем, я РепликуСет обозначу как «РС» (от русс. — РепликуСет) или «RS» (от анг яз — ReplicaSet) и буду использовать данное обозначение в своей статье.

-===СПОСОБ 1 — используем один сервер===-

В целом, мой конфиг выглядит следующим образом:

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
processManagement:
net:
  port: 27017

Каждый экземпляр монги, будет создаваться со своим процессом, выделенным портом и своей базой. Начнем с БД, создаем папки:

# mkdir /var/lib/mongo/{my_database_1,my_database_2,my_database_3}

Создание самих баз и установка необходимого владельца:

# chown mongod:mongod /var/lib/mongo/{my_database_1,my_database_2,my_database_3}

Запускаем сервер в качестве PRIMARY (Мастер):

# mongod --dbpath /var/lib/mongo/my_database_1 --port 27001 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/my_database_1.log

about to fork child process, waiting until server is ready for connections.
forked process: 53147
child process started successfully, parent exiting

Запускаем сервер в качестве SECONDARY (слейв):

# mongod --dbpath /var/lib/mongo/my_database_2 --port 27002 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/my_database_2.log

about to fork child process, waiting until server is ready for connections.
forked process: 53175
child process started successfully, parent exiting

Запускаем сервер в качестве арбитра (не принимающим данных):

# mongod --dbpath /var/lib/mongo/my_database_3 --port 27003 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/my_database_3.log

about to fork child process, waiting until server is ready for connections.
forked process: 53207
child process started successfully, parent exiting

  • —dbpath — Данная опция указывает на папку где лежат ( будут лежать) базы данных.
  • —port — Данная опция задает порт для подключения клиентов.
  • —replSet — Данная опция служит в качестве названия самой РС и должно быть одинаково для всех нод/экземпляров mongod
  • —fork — Данная опция запускает mongod в режиме демона.
  • —logpath — Данная опция указывает в какой файл будет перенаправлятся вывод.

Проверяем, стартанули ли все экземпляры:

# ps aux | grep mongo| grep -Ev "grep"

И получаем:

root      14469  0.0  0.1 121296  1220 pts/0    Sl+  08:41   0:00 mongo
mongod    52795  0.7  3.8 353404 38612 ?        Sl   14:07   0:06 /usr/bin/mongod -f /etc/mongod.conf
root      53147  0.5  4.1 406144 41688 ?        Sl   14:14   0:01 mongod --dbpath /var/lib/mongo/my_database_1 --port 27001 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/my_database_1.log
root      53175  0.5  4.1 406140 41216 ?        Sl   14:14   0:01 mongod --dbpath /var/lib/mongo/my_database_2 --port 27002 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/my_database_2.log
root      53207  0.5  4.3 406140 43724 ?        Sl   14:15   0:01 mongod --dbpath /var/lib/mongo/my_database_3 --port 27003 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/my_database_3.log

Как видно с вывода, все четко запустилось.

Настройка PRIMARY сервера

Подключаемся к серверу:

# mongo --host 127.0.0.1 --port 27001

Проверяем статус RS:

> rs.status()

Получаем ошибку:

rs.status()
{
	"info" : "run rs.initiate(...) if not yet done for the set",
	"ok" : 0,
	"errmsg" : "no replset config has been received",
	"code" : 94,
	"codeName" : "NotYetInitialized"
}

Так как РС еще не настроена, получили ошибку. Сейчас настроим ее:

> rs.initiate({"_id" : "My_Replica_Set", members : [ {"_id" : 0, priority : 3, host : "127.0.0.1:27001"}, {"_id" : 1, host : "127.0.0.1:27002"},
 {"_id" : 2, host : "127.0.0.1:27003", arbiterOnly : true} ] });

И, проверяем статус Replica_Set сново:

My_Replica_Set:PRIMARY> rs.status()
{
	"set" : "My_Replica_Set",
	"date" : ISODate("2017-04-16T11:29:03.858Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1492342138, 1),
			"t" : NumberLong(1)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1492342138, 1),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1492342138, 1),
			"t" : NumberLong(1)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "127.0.0.1:27001",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 874,
			"optime" : {
				"ts" : Timestamp(1492342138, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-04-16T11:28:58Z"),
			"electionTime" : Timestamp(1492342007, 1),
			"electionDate" : ISODate("2017-04-16T11:26:47Z"),
			"configVersion" : 1,
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "127.0.0.1:27002",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 147,
			"optime" : {
				"ts" : Timestamp(1492342138, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1492342138, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2017-04-16T11:28:58Z"),
			"optimeDurableDate" : ISODate("2017-04-16T11:28:58Z"),
			"lastHeartbeat" : ISODate("2017-04-16T11:29:01.893Z"),
			"lastHeartbeatRecv" : ISODate("2017-04-16T11:29:03.585Z"),
			"pingMs" : NumberLong(0),
			"syncingTo" : "127.0.0.1:27001",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "127.0.0.1:27003",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 147,
			"lastHeartbeat" : ISODate("2017-04-16T11:29:01.893Z"),
			"lastHeartbeatRecv" : ISODate("2017-04-16T11:29:03.361Z"),
			"pingMs" : NumberLong(0),
			"configVersion" : 1
		}
	],
	"ok" : 1
}
My_Replica_Set:PRIMARY> 

Чтобы выйти, используйте:

> quit()

проверяем остальные ноды. Подключаемся к SECONDARY серверу:

# mongo --host 127.0.0.1 --port 27002

Вывод:

MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27002/
MongoDB server version: 3.4.3
My_Replica_Set:SECONDARY> 

Собственно, видно что все в порядке на сервере.

Проверяем статус:

> rs.status()

Получаем одинаковый вывод. Можно с него выйти уже.

Подключаемся к арбитру серверу:

# mongo --host 127.0.0.1 --port 27003

Вывод:

MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27003/
MongoDB server version: 3.4.3
My_Replica_Set:ARBITER> 

Аналогично с арбитром. Видим что каждый из 3-х экземпляров, выступает как часть My_Replica_Set репликасет-а.

Но а сейчас, потестируем падение (отказ от работы) PRIMARY сервера. Для начала, смотрим какие соединения открыты:

# netstat -lntpu | grep mongod

Получаем:

tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      52795/mongod        
tcp        0      0 0.0.0.0:27001               0.0.0.0:*                   LISTEN      53147/mongod        
tcp        0      0 0.0.0.0:27002               0.0.0.0:*                   LISTEN      53175/mongod        
tcp        0      0 0.0.0.0:27003               0.0.0.0:*                   LISTEN      53207/mongod

Видим, что PRIMARY сервер использует 53147 PID, завершим его:

# kill -9 53147

И так, процесс завершен. Подключаемся к арбитру:

# mongo --host 127.0.0.1 --port 27003

И, проверяем статус репликасета:

My_Replica_Set:ARBITER> rs.status()
{
	"set" : "My_Replica_Set",
	"date" : ISODate("2017-04-16T11:44:58.979Z"),
	"myState" : 7,
	"term" : NumberLong(2),
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1492343008, 1),
			"t" : NumberLong(1)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1492343008, 1),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(0, 0),
			"t" : NumberLong(-1)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "127.0.0.1:27001",
			"health" : 0,
			"state" : 8,
			"stateStr" : "(not reachable/healthy)",
			"uptime" : 0,
			"optime" : {
				"ts" : Timestamp(0, 0),
				"t" : NumberLong(-1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(0, 0),
				"t" : NumberLong(-1)
			},
			"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
			"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
			"lastHeartbeat" : ISODate("2017-04-16T11:44:58.574Z"),
			"lastHeartbeatRecv" : ISODate("2017-04-16T11:43:34.344Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "Connection refused",
			"configVersion" : -1
		},
		{
			"_id" : 1,
			"name" : "127.0.0.1:27002",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 1100,
			"optime" : {
				"ts" : Timestamp(1492343094, 1),
				"t" : NumberLong(2)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1492343094, 1),
				"t" : NumberLong(2)
			},
			"optimeDate" : ISODate("2017-04-16T11:44:54Z"),
			"optimeDurableDate" : ISODate("2017-04-16T11:44:54Z"),
			"lastHeartbeat" : ISODate("2017-04-16T11:44:58.562Z"),
			"lastHeartbeatRecv" : ISODate("2017-04-16T11:44:58.598Z"),
			"pingMs" : NumberLong(0),
			"electionTime" : Timestamp(1492343024, 1),
			"electionDate" : ISODate("2017-04-16T11:43:44Z"),
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "127.0.0.1:27003",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 1765,
			"configVersion" : 1,
			"self" : true
		}
	],
	"ok" : 1
}
My_Replica_Set:ARBITER> 

Наглядно видно, что  основной сервер в дауне  («stateStr» : «(not reachable/healthy)»), а сервер с id 1 стал PRIMARY. Снова запускаем упавший сервак ( экземпляр):

# mongod --dbpath /var/lib/mongo/my_database_1 --port 27001 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/my_database_1.log

И смотрим что говорит нам арбитр:

# mongo --host 127.0.0.1 --port 27003

Получаем вывод:

My_Replica_Set:ARBITER> rs.status()
{
	"set" : "My_Replica_Set",
	"date" : ISODate("2017-04-16T11:49:03.284Z"),
	"myState" : 7,
	"term" : NumberLong(3),
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1492343331, 1),
			"t" : NumberLong(3)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1492343331, 1),
			"t" : NumberLong(3)
		},
		"durableOpTime" : {
			"ts" : Timestamp(0, 0),
			"t" : NumberLong(-1)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "127.0.0.1:27001",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 49,
			"optime" : {
				"ts" : Timestamp(1492343331, 1),
				"t" : NumberLong(3)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1492343331, 1),
				"t" : NumberLong(3)
			},
			"optimeDate" : ISODate("2017-04-16T11:48:51Z"),
			"optimeDurableDate" : ISODate("2017-04-16T11:48:51Z"),
			"lastHeartbeat" : ISODate("2017-04-16T11:48:58.649Z"),
			"lastHeartbeatRecv" : ISODate("2017-04-16T11:49:01.667Z"),
			"pingMs" : NumberLong(0),
			"electionTime" : Timestamp(1492343301, 1),
			"electionDate" : ISODate("2017-04-16T11:48:21Z"),
			"configVersion" : 1
		},
		{
			"_id" : 1,
			"name" : "127.0.0.1:27002",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 1344,
			"optime" : {
				"ts" : Timestamp(1492343331, 1),
				"t" : NumberLong(3)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1492343331, 1),
				"t" : NumberLong(3)
			},
			"optimeDate" : ISODate("2017-04-16T11:48:51Z"),
			"optimeDurableDate" : ISODate("2017-04-16T11:48:51Z"),
			"lastHeartbeat" : ISODate("2017-04-16T11:48:58.599Z"),
			"lastHeartbeatRecv" : ISODate("2017-04-16T11:49:01.715Z"),
			"pingMs" : NumberLong(0),
			"syncingTo" : "127.0.0.1:27001",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "127.0.0.1:27003",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 2010,
			"configVersion" : 1,
			"self" : true
		}
	],
	"ok" : 1
}
My_Replica_Set:ARBITER> 

Смотрим какой конфиг имеет наша репликасет:

My_Replica_Set:ARBITER> rs.config()
{
	"_id" : "My_Replica_Set",
	"version" : 1,
	"protocolVersion" : NumberLong(1),
	"members" : [
		{
			"_id" : 0,
			"host" : "127.0.0.1:27001",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 3,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 1,
			"host" : "127.0.0.1:27002",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 2,
			"host" : "127.0.0.1:27003",
			"arbiterOnly" : true,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		}
	],
	"settings" : {
		"chainingAllowed" : true,
		"heartbeatIntervalMillis" : 2000,
		"heartbeatTimeoutSecs" : 10,
		"electionTimeoutMillis" : 10000,
		"catchUpTimeoutMillis" : 2000,
		"getLastErrorModes" : {
			
		},
		"getLastErrorDefaults" : {
			"w" : 1,
			"wtimeout" : 0
		},
		"replicaSetId" : ObjectId("58f354ec1c699206c06ee2c0")
	}
}
My_Replica_Set:ARBITER> 

С выводом уже становится понятным, что все возвратилось восвояси. Т.к я использовал одну машину и запустил 3 экземпляра с mongoDB, то я очищу. Для этого — подключаемся к основному серверу:

# mongo --host 127.0.0.1 --port 27001

И, выполняем:

My_Replica_Set:PRIMARY> use admin
switched to db admin
My_Replica_Set:PRIMARY> db.shutdownServer()

Завершится 1-й сервер. Аналогичные действия выполняем с остальными.

PS: Необходимо потушить арбитра,а потом 2-й сервер!

My_Replica_Set:ARBITER> use admin
switched to db admin
My_Replica_Set:ARBITER> db.shutdownServer()
server should be down...
2017-04-16T14:59:14.361+0300 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27003 (127.0.0.1) failed
2017-04-16T14:59:14.361+0300 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27003, in(checking socket for error after poll), reason: Connection refused
2017-04-16T14:59:14.361+0300 I NETWORK  [thread1] reconnect 127.0.0.1:27003 (127.0.0.1) failed failed 
2017-04-16T14:59:14.364+0300 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27003 (127.0.0.1) failed
2017-04-16T14:59:14.364+0300 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27003, in(checking socket for error after poll), reason: Connection refused
2017-04-16T14:59:14.364+0300 I NETWORK  [thread1] reconnect 127.0.0.1:27003 (127.0.0.1) failed failed 
> quit ()

И, последний экземпляр:

# mongo --host 127.0.0.1 --port 27002
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27002/
MongoDB server version: 3.4.3

My_Replica_Set:SECONDARY> use admin
switched to db admin
My_Replica_Set:SECONDARY> db.shutdownServer()
server should be down...
2017-04-16T15:00:03.140+0300 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27002 (127.0.0.1) failed
2017-04-16T15:00:03.140+0300 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27002, in(checking socket for error after poll), reason: Connection refused
2017-04-16T15:00:03.140+0300 I NETWORK  [thread1] reconnect 127.0.0.1:27002 (127.0.0.1) failed failed 
2017-04-16T15:00:03.142+0300 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27002 (127.0.0.1) failed
2017-04-16T15:00:03.142+0300 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27002, in(checking socket for error after poll), reason: Connection refused
2017-04-16T15:00:03.142+0300 I NETWORK  [thread1] reconnect 127.0.0.1:27002 (127.0.0.1) failed failed 
> quit()
[root@localhost ~]# 

Выполняем проверку:

[root@localhost ~]# ps aux | grep mongod | grep -Ev "grep"
mongod    52795  0.5  3.6 353404 36456 ?        Sl   14:07   0:18 /usr/bin/mongod -f /etc/mongod.conf
[root@localhost ~]# 

Ну, удаляем созданные базы:

# rm -rf /var/lib/mongo/{my_database_1,my_database_2,my_database_3}

Как-то так.

-===СПОСОБ 2 — используем мульти-ноды===-

У меня, в качестве примера, используется:

  • PRIMARY       — 192.168.13.161    mongodb0.linux-notes.org
  • SECONDARY — 192.168.13.147      mongodb1.linux-notes.org
  • ARBITER        — 192.168.13.142    mongodb2.linux-notes.org

Выполняем установку монги на каждой из нод и приступаем к настройке.

Создаем папку где будут лежать базы:

# mkdir /home/mongodb

На созданную папку выставляем необходимого владельца:

Debian:

# chown mongodb. /home/mongodb

Так же, создаем папку:

# mkdir /var/run/mongodb && chown mongodb. /var/run/mongodb

CenOS:

# chown mongod:mongod /home/mongodb

PS: Стандартная папка где хранятся базы — /var/lib/mongo и можно использовать именно ее.

Я в самом конфиге ничего не менял, оставил как и было.

Запускаем сервер:

# service mongod restart

PS: на каждой ноде!

Запуск PRIMARY сервера

И так, запускаем экземпляр:

# mongod --dbpath /home/mongodb --bind_ip 192.168.13.161 --port 27001 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/My_Replica_Set_PRIMARY.log --pidfilepath /var/run/mongodb/My_Replica_Set_PRIMARY.pid
about to fork child process, waiting until server is ready for connections.
forked process: 50619
child process started successfully, parent exiting

Смотрим чтобы данный экземпляр, запустился:

# ps uax | grep -E "mongod" | grep -Ev "grep"

Получаем:

root      50619  2.6  4.1 406696 41800 ?        Sl   12:20   0:00 mongod --dbpath /home/mongodb --bind_ip 192.168.13.161 --port 27001 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/My_Replica_Set_PRIMARY.log --pidfilepath /var/run/mongodb/My_Replica_Set_PRIMARY.pid

Как видно с вывода, все четко работает.

Запуск SECONDARY сервера

И так, запускаем экземпляр:

# mongod --dbpath /home/mongodb --bind_ip 192.168.13.147 --port 27001 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/My_Replica_Set_SECONDARY.log --pidfilepath /var/run/mongodb/My_Replica_Set_SECONDARY.pid

Если необходимо, выполняем проверку.

Запуск ARBITER сервера

И так, запускаем экземпляр:

# mongod --dbpath /home/mongodb --bind_ip 192.168.13.142 --port 27001 --replSet My_Replica_Set --fork --logpath /var/log/mongodb/My_Replica_Set_ARBITER.log

Если необходимо, выполняем проверку.

Настройка реплики

Подключаемся к серверу:

# mongo --host 192.168.13.161 --port 27001

Проверяем статус RS:

> rs.status()

-=== СПОСОБ 1 — прописать сразу все хосты===-

Так как РС еще не настроена, получили ошибку. Сейчас настроим ее:

> rs.initiate({"_id" : "My_Replica_Set", members : [ {"_id" : 0, priority : 3, host : "192.168.13.161:27001"}, {"_id" : 1, host : "192.168.13.147:27001"},
 {"_id" : 2, host : "192.168.13.142:27001", arbiterOnly : true} ] });

-=== СПОСОБ 1 — прописать хосты постепенно===-

ИЛИ, инициализируем только один сервер:

> rs.initiate( {
   _id : "My_Replica_Set",
   members: [ { _id : 0, host : "192.168.13.161:27001" } ]
})

Потом, прописываем еще один хост:

> rs.add("192.168.13.147:27001")

PS: Если нужно удалить, используем:

> rs.remove("192.168.13.147:27001")

И, нам нужен еще арбитр, по этому, прописываем:

> rs.addArb("192.168.13.142:27001")

Ничего сложного.

Проверка SECONDARY сервера

Подключаемся снова и проверяем статус. У меня все заработало. Осталось проверить на остальных серверах…

# mongo --host 192.168.13.147 --port 27001

Проверяем статус RS:

> rs.status()

Проверка ARBITER сервера

Подключаемся снова и проверяем статус. У меня все заработало. Осталось проверить на остальных серверах…

# mongo --host 192.168.13.142 --port 27001

Проверяем статус RS:

> rs.status()

И, проверяем статус Replica_Set сново.

При такой настройке имеется и недостатки — например, когда сервер упадет, то он не подымиться автоматически. Я придумал решение — создать bash скрипт, который будут проверять PID файл процесса. Если его не окажется, то запустить экземпляр монги.

Репликация MongoDB вида Master-Slave (Ведущий-ведомый )

Я уже говорил что данная идеология не очень хороша для решения репликации. Но как по мне, можно немного затюнить и использовать именно такой метод (использовать балансировщик, например HAproxy).

У меня имеется:

  • 192.168.13.161 — master.linux-notes.org
  • 192.168.13.147 — slave.linux-notes.org

Создаем папку где будут лежать базы:

# mkdir /home/mongodb

На созданную папку выставляем необходимого владельца:

Debian:

# chown mongodb. /home/mongodb

Так же, создаем папку:

# mkdir /var/run/mongodb && chown mongodb. /var/run/mongodb

CenOS:

# chown mongod:mongod /home/mongodb

PS: Стандартная папка где хранятся базы — /var/lib/mongo и можно использовать именно ее.

Я в самом конфиге ничего не менял, оставил как и было.

Запуск Master 

Запускаем  Mongo демон как мастер:

# mongod --master --dbpath /home/mongodb --bind_ip 192.168.13.161 --port 27001 --fork --logpath /var/log/mongodb/Master.log --pidfilepath /var/run/mongodb/Master.pid

Проверяем что все стартануло:

# ps uax | grep -E "mongod" | grep -Ev "grep"

root 51599 1.8 4.2 394848 42468 ? Sl 18:01 0:00 mongod --master --dbpath /home/mongodb --bind_ip 192.168.13.161 --port 27001 --fork --logpath /var/log/mongodb/Master.log --pidfilepath /var/run/mongodb/Master.pid

Видим, что все запустилось отлично.

Подключаемся на слейв:

# mongo --host 192.168.13.161 --port 27001

Проверяем статус Master-а:

> rs.printReplicationInfo()

configured oplog size:   990MB
log length start to end: 0secs (0hrs)
oplog first event time:  Mon Apr 17 2017 12:47:07 GMT+0300 (EEST)
oplog last event time:   Mon Apr 17 2017 12:47:07 GMT+0300 (EEST)
now:                     Mon Apr 17 2017 19:14:07 GMT+0300 (EEST)
> 

И:

> db.serverStatus()

Вот и все.

Запуск Slave 

Проверяем доступность master-а со slave:

$  telnet 192.168.13.161 27001

Видно что имеется подключение. Идем далее……

Останавливаем сервер с монгой:

# service mongod stop 
# ps -aux | grep mongod| grep -Ev "grep"

Запускаем slave сервер:

# mongod --slave --dbpath /home/mongodb --bind_ip 192.168.13.147 --port 27001 --fork --logpath /var/log/mongodb/Slave.log --pidfilepath /var/run/mongodb/Slave.pid --source 192.168.13.161:27001

Проверяем что все запустилось:

# ps -aux | grep mongo | grep -Ev "grep"

Вывод:

root       4967  5.5  4.6 301064 46696 ?        Sl   18:34   0:00 mongod --slave --dbpath /home/mongodb --bind_ip 192.168.13.147 --port 27001 --fork --logpath /var/log/mongodb/Slave.log --pidfilepath /var/run/mongodb/Slave.pid

Все отлично, осталось немного. Подключаемся на слейв:

# mongo --host 192.168.13.147 --port 27001

Настраиваем репликацию master-slave:

> use local
> db.sources.find()
> db.sources.insert( { host:"192.168.13.161:27001" } );
WriteResult({ "nInserted" : 1 })
>

И, смотрим что получилось:

> show dbs

Проверяем статус Slave:

> rs.printSlaveReplicationInfo()


source: 192.168.13.161:27001
 syncedTo: Mon Apr 17 2017 19:21:21 GMT+0300 (EEST)
 25 secs (0.01 hrs) behind the freshest member (no primary available at the moment)
source: 192.168.13.161:27001
 doing initial sync

Можно еще:

> rs.printReplicationInfo()

И:

> db.serverStatus()

Вам может потребоваться запустить синхронизацию для восстановления репликации:

> use admin
> db.runCommand( { resync: 1 } )

Чтобы потушить ноду, используйте:

> db.adminCommand({shutdown : 1, force : true})

А на этом, у меня все. Статья «Репликация в MongoDB» завершена.

The post Репликация в MongoDB first appeared on linux-notes.org.]]>
https://linux-notes.org/replikatsiya-v-mongodb/feed/ 1
Page_c76a3fcf https://linux-notes.org/sozdat-udalit-bazu-danny-h-v-mongodb/ https://linux-notes.org/sozdat-udalit-bazu-danny-h-v-mongodb/#respond Fri, 14 Apr 2017 20:36:36 +0000 http://linux-notes.org/?p=7164 Создать/Удалить базу данных в MongoDB Я очень давно работал с монгой и сразу не могу вспомнить как можно создать или удалить базу данных. И следующая моя тема, поможет вспомнить как это можно сделать. Для начала, стоит установить сервер с mongodb, я описывал как это можно сделать в своей статье: Установка MongoDB в Unix/Linux По этому, […]

The post Создать/Удалить базу данных в MongoDB first appeared on linux-notes.org.]]>

Создать/Удалить базу данных в MongoDB

Я очень давно работал с монгой и сразу не могу вспомнить как можно создать или удалить базу данных. И следующая моя тема, поможет вспомнить как это можно сделать.

Для начала, стоит установить сервер с mongodb, я описывал как это можно сделать в своей статье:

Установка MongoDB в Unix/Linux

По этому, я установку пропускаю, а перехожу сразу к делу.

Создать/Удалить базу данных в MongoDB

Сейчас, я расскажу как можно создавать, удалять или просматривать базы в MongoDB.

Просмотр баз данных в MongoDB

Сначала проверим какие базы данных в нашей системе имеется. Подключаемся к серверу монги:

# mongo

После чего, выполняем:

> show dbs;

Получаем вывод:

admin  0.000GB
local  0.000GB

У меня все по 0, т.к только установленный сервер с монгой.

Создать базу данных в MongoDB

Самое интересное то, что нет никакой команды для создания баз данных. Тогда вопрос в том, как мы будем создавать базу данных ». Ответ: мы не создаем базу данных в MongoDB, нам просто нужно использовать базу данных с вашим предпочтительным именем и сохранить одну запись в базе данных для ее создания.

И так, давайте сейчас запишем данные чтобы создать новую БД, я назову ее просто — test_db. Просто запустите следующую команду и сохраните одну запись в базе данных. После сохранения первой записи,  вы увидите, что новая база данных была создана:

> use test_db;
> s = { Name : "linux-notes.org" }
> db.testData.insert( s );

Вывод:

> use test_db;
switched to db test_db
> s = { Name : "linux-notes.org" }
{ "Name" : "linux-notes.org" }
> db.testData.insert( s );
WriteResult({ "nInserted" : 1 })
> 

Проверяем что получилось:

> show dbs;
admin    0.000GB
local    0.000GB
test_db  0.000GB
> 

Как видно с листинга, test_db создалась.

Удалить базу данных в MongoDB

MongoDB предоставляет команду «dropDatabase ()» для удаления базы данных (используемой в данный момент) со связанными с ней файлами. Перед удалением убедитесь, что нужная БД была выбрана ( используем команду db):

> db
test_db

Видим что я использую ее, но если не уверены, проще выполнить:

> use test_db;

Теперь, если выполняем команду «dropDatabase ()» чтобы удалить test_db базу:

> db.dropDatabase();
{ "dropped" : "test_db", "ok" : 1 }
> 

Проверяем:

> show dbs;
admin  0.000GB
local  0.000GB
> 

Как уже поняли, все удалилось.

Чтобы удалить базу данных MongoDB из командной строки Unix/Linux используйте следующую команду:

# mongo test_db --eval "db.dropDatabase()"

Ничего сложного нет.

Создание/Восстановление бэкапа баз данных в MongoDB

Я завершаю сваю тему «Создать/Удалить базу данных в MongoDB».

The post Создать/Удалить базу данных в MongoDB first appeared on linux-notes.org.]]>
https://linux-notes.org/sozdat-udalit-bazu-danny-h-v-mongodb/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-mongodb-v-unix-linux/ https://linux-notes.org/ustanovka-mongodb-v-unix-linux/#respond Fri, 14 Apr 2017 20:04:14 +0000 http://linux-notes.org/?p=9494 Установка MongoDB в Unix/Linux MongoDB (от англ. humongous — огромный) — документоориентированная система управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы таблиц. Классифицирована как NoSQL, использует JSON-подобные документы и схему базы данных. Написана на языке C++. Возможности MongoDB: Ad hoc запросы; Индексация; Репликация; Балансировка нагрузки; Файловое хранилище; Агрегация; Исполнение JavaScript на […]

The post Установка MongoDB в Unix/Linux first appeared on linux-notes.org.]]>

Установка MongoDB в Unix/Linux

MongoDB (от англ. humongous — огромный) — документоориентированная система управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы таблиц. Классифицирована как NoSQL, использует JSON-подобные документы и схему базы данных. Написана на языке C++.

Возможности MongoDB:

  • Ad hoc запросы;
  • Индексация;
  • Репликация;
  • Балансировка нагрузки;
  • Файловое хранилище;
  • Агрегация;
  • Исполнение JavaScript на стороне сервера;
  • Коллекции с фиксированным размером.

Установка MongoDB в Unix/Linux

Сейчас я приведу некоторые примеры по установки MongoDB для нескольких Unix/Linux ОС.

Установка MongoDB на Debian

И так, для начала, импортируем ключ:

# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

Добавляем MongoDB репозиторий.

Если используете Debian 7 (Wheezy):

# echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Или, если использовать интерпрайс версию:

# echo "deb http://repo.mongodb.com/apt/debian wheezy/mongodb-enterprise/3.4 main" | tee /etc/apt/sources.list.d/mongodb-enterprise.list

Если используете Debian 8 (Jessie):

# echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.listPS:  На момент написания, я использую самую новую монгу.

Или, если использовать интерпрайс версию:

# echo "deb http://repo.mongodb.com/apt/debian jessie/mongodb-enterprise/3.4 main" | tee /etc/apt/sources.list.d/mongodb-enterprise.list

Обновляем репозиторий:

# apt-get update

Вы можете установить последнюю стабильную версию MongoDB:

# apt-get install -y mongodb-org

ИЛИ, для установки интерпрайса:

# apt-get install -y mongodb-enterprise

Т.к дебиан после установки, сразу запускает службы, нам нужно остановить сервер с монгой:

# service mongod stop

И запускаем сново:

# service mongod start

Добавляем сервер в автозагрузку ОС:

# systemctl enable mongod.service

Удаление MongoDB сервера 

Останавливаем службу:

# service mongod stop

Выполняем установку:

# apt-get purge mongodb-org*

ИЛИ, если хотите удалить enterprise:

# apt-get purge mongodb-enterprise*

Удалите базы данных и лог-файлов:

# rm -r /var/log/mongodb && rm -r /var/lib/mongodb

Собственно, вот и вся установка\удаление MongoDB.

Установка MongoDB на Ubuntu

И так, для начала, импортируем ключ:

# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

Добавляем MongoDB репозиторий.

Если используете Ubuntu 12.04:

echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Или, если использовать интерпрайс версию:

# echo "deb [ arch=amd64 ] http://repo.mongodb.com/apt/ubuntu precise/mongodb-enterprise/3.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-enterprise.list

Если используете Ubuntu 14.04:

# echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Или, если использовать интерпрайс версию:

# echo "deb [ arch=amd64 ] http://repo.mongodb.com/apt/ubuntu trusty/mongodb-enterprise/3.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-enterprise.list

Если используете Ubuntu 16.04:

# echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Или, если использовать интерпрайс версию:

# echo "deb [ arch=amd64,arm64,ppc64el,s390x ] http://repo.mongodb.com/apt/ubuntu xenial/mongodb-enterprise/3.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-enterprise.list

Обновляем репозиторий:

# apt-get update

Вы можете установить последнюю стабильную версию MongoDB:

# apt-get install mongodb-org -y

ИЛИ, для установки enterprise версии:

# apt-get install -y mongodb-enterprise

Добавляем сервер в автозагрузку ОС:

# systemctl enable mongodb

Удаление MongoDB сервера 

Останавливаем службу:

# service mongod stop

Выполняем установку:

# apt-get purge mongodb-org*

ИЛИ, для удалении enterprise версии:

# apt-get purge mongodb-enterprise*

Удалите базы данных и лог-файлов:

# rm -r /var/log/mongodb && rm -r /var/lib/mongodb

Собственно, вот и вся установка\удаление MongoDB.

Установка MongoDB на CentOS/Fedora/RedHat

Создаем файл с репозиотрием:

# vim /etc/yum.repos.d/mongodb-org-3.4.repo

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

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

ИЛИ, enterprise вариант:

[mongodb-enterprise]
name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/3.4/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

Обновляем репозиторий:

# yum update -y

И, выполняем установку:

#  yum install -y mongodb-org

Для установки интерпрайса, используем:

# yum install -y mongodb-enterprise

PS: Если используется SELinux, то нужно его настроить для работы с монгой:

# semanage port -a -t mongod_port_t -p tcp 27017

Так же, можно выключить его, я описывал как это можно сделать:
Как отключить SELinux на CentOS?

После чего, запускаем сервер:

# service mongod start

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

# chkconfig mongod on

Удаление MongoDB сервера 

Останавливаем службу:

# service mongod stop

Выполняем установку:

# yum erase $(rpm -qa | grep mongodb-org)

Удалите базы данных и лог-файлов:

# rm -r /var/log/mongodb && rm -r /var/lib/mongodb

Собственно, вот и вся установка\удаление MongoDB.

Установка MongoDB на Mac OS X

Подключаем homebrew — Установка homebrew на Mac OS X и после чего, выполняем поиск пакета:

$ brew search mongodb

И, выполняем установку:

$ brew install mongodb

Чтобы установить монгу с поддержкой TLS/SSL, используем:

$ brew install mongodb --with-openssl

Чтобы установить последнюю версию ( которая находиться в тестировании), введите следующую команду:

$ brew install mongodb --devel

Создаем папку для хранения БД (путь используется по умолчанию):

$ mkdir -p /data/db

Для запуска, выполняем:

$ mongod

Если вы не используете каталог данных по умолчанию (т. е. /data/db), укажите путь к каталогу данных с помощью параметра —dbpath:

$ mongod --dbpath <path to data directory>

Установка MongoDB на другие Unix/Linux

Скачиваем последнюю версию утилиты:

# cd /usr/local/src && curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.2.tgz

Выполняем распаковку:

# tar -zxvf mongodb-linux-x86_64-3.4.2.tgz

Перенесем ее:

# mv mongodb-linux-x86_64-3.4.2 /usr/local/mongodb

Создаем папку для хранения БД (путь используется по умолчанию):

$ mkdir -p /data/db

Для запуска, выполняем:

$ mongod

Если вы не используете каталог данных по умолчанию (т. е. /data/db), укажите путь к каталогу данных с помощью параметра —dbpath:

$ mongod --dbpath <path to data directory>

PS: Если хотите установить enterprise, то действия такие же.

Полезные статьи:

Создание/Восстановление бэкапа баз данных в MongoDB

Создать/Удалить базу данных в MongoDB

На этом, у меня все. Статья «Установка MongoDB в Unix/Linux» завершена.

The post Установка MongoDB в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-mongodb-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-apache-cassandra-v-unix-linux/ https://linux-notes.org/ustanovka-apache-cassandra-v-unix-linux/#respond Tue, 11 Apr 2017 10:39:43 +0000 http://linux-notes.org/?p=9177 Установка Apache Cassandra в Unix/Linux Apache Cassandra — это распределённая noSQL система для управления БД которая позволяет создавать высоко- нагруженные и масштабируемые, а так же надежные хранилища больших массивов с данными в виде хэшей. Данный проект, в свое время разрабатывался в компании  Facebook ( до 2009 года), после чего был передан на разработку и поддержку Apache Software Foundation которая и […]

The post Установка Apache Cassandra в Unix/Linux first appeared on linux-notes.org.]]>

Установка Apache Cassandra в Unix/Linux

Apache Cassandra — это распределённая noSQL система для управления БД которая позволяет создавать высоко- нагруженные и масштабируемые, а так же надежные хранилища больших массивов с данными в виде хэшей. Данный проект, в свое время разрабатывался в компании  Facebook ( до 2009 года), после чего был передан на разработку и поддержку Apache Software Foundation которая и продолжает развитие Cassandra. Данное ПО используют такие гиганты как Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace, Apple и Twitter.

Установка Apache Cassandra в Unix/Linux

Чтобы использовать Cassandra для своих целей, для начала стоит установить JAVA. Я приводил несколько толковых статей по этой теме:

Установка JAVA (JDK) на CentOS/RHEL/Fedora

Установка JAVA 9 (JDK9) на Debian/Ubuntu/LinuxMint

Установка Java на Debian/Ubuntu/Mint

Узнать размер Java Heap Memory Size

Установка переменных JAVA_HOME / PATH в Linux

Устанавливаем java и переходим к установке Apache Cassandra.

Установка Apache Cassandra на CentOS/Fedora/RedHat

Имеется несколько способов установить данное программное обеспечение.

-===СПОСОБ 1 — использование apache cassandra репозитория ===-

Создаем репо-файл:

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

Прописываем:

[cassandra] 
name=Apache Cassandra 
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/ 
gpgcheck=1 
repo_gpgcheck=1 
gpgkey=https://www.apache.org/dist/cassandra/KEYS

Устанавливаем:

# sudo yum install cassandra -y

Запустить можно так:

# service cassandra start

Или, если используете CentOS 7, то выполняем:

# systemctl start cassandra

Добавляем в автозагрузку ОС:

# chkconfig cassandra on

Для CentOS 7, используем:

# systemctl enable cassandra

Установка завершена.

-===СПОСОБ 2  — использование datastax репозитория===-

Создаем репо-файл:

# vim /etc/yum.repos.d/datastax.repo

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

[datastax]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0

Легко можно изменить baseurl на более новый ( если есть необходимость использовать самое новое ПО):

baseurl = http://rpm.datastax.com/datastax-ddc/3.9

Это как пример того что можно сделать! (Но тогда нужно выполнить установку следующим образом — yum install datastax-ddc)

Смотрим какие версии Cassandra имеются в репозитории:

# yum list dsc2*

И получаем:

dsc20.noarch                                                              2.0.17-1                                                               datastax
dsc21.noarch                                                              2.1.15-1                                                               datastax
dsc22.noarch                                                              2.2.8-1                                                                datastax

PS: Чтобы увидеть все версии ПО, выполните:

$ yum list dsc*

Так же, я установлю вспомогательные утилиты, чтобы увидеть поддержку, выполните:

$ yum list cassandra*-tools

И так, последняя версия в репозитории — 3.0 и выполняем установку:

# yum install dsc30 cassandra30-tools -y

Запускаем кассандру:

# service cassandra start

Starting Cassandra: OK

Или, если используете CentOS 7, то выполняем:

# systemctl start cassandra

Добавляем в автозагрузку ОС:

# chkconfig cassandra on

Для CentOS 7, используем:

# systemctl enable cassandra

Установка завершена. Как настроить и как использовать, я расскажу ниже.

Для удаления, используем:

# yum remove dsc30 cassandra30-tools -y

Настройка Apache Cassandra

И так:

  • Каталог с конфигурациями, находится — /etc/cassandra/
  • Каталог с данными — /var/lib/cassandra
  • Каталос с логами — /var/log/cassandra/

-===СПОСОБ 3 — использование готового ПО===-

Смотрим раздел — Установка Apache Cassandra на другие Unix/Linux

-===СПОСОБ 4 — использование исходного кода ===-

Используем исходный код который можно получить:

$ git clone http://git-wip-us.apache.org/repos/asf/cassandra.git

Инструкция по сборке будет в репозитории.

Установка Apache Cassandra на Debian/Ubuntu

Имеется несколько способов установить данное программное обеспечение.

-===СПОСОБ 1 — использование apache cassandra репозитория ===-

И так, добавляем репозиторий:

# echo "deb http://www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list

Добавьте ключи хранилища Apache Cassandra можно так:

$ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

Обновляем репу:

# apt-get update

И выполняем установку:

$ sudo apt-get install cassandra

-===СПОСОБ 2  — использование datastax репозитория===-

И так, добавляем репозиторий:

$ echo "deb http://debian.datastax.com/community stable main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list

Добавляем ключ для DataStax репозитория:

$ curl -L http://debian.datastax.com/debian/repo_key | sudo apt-key add -

Выполняем обновление репозитория:

# apt-get update -y

И выполняем установку:

# apt-get install dsc22=2.2.8-1 cassandra=2.2.8

PS: Как по мне, лучшее решение, —  это использовать репозиторий от официального сайта:

$ echo "deb http://www.apache.org/dist/cassandra/debian 310x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list

Добавим ключ для Apache Cassandra репозитория:

$ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

Загружаем ключ:

# apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA

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

# apt-get update -y && apt-get install cassandra -y

Поскольку, Debian автоматически запустет службу Cassandra, вы должны остановить сервер и очистить данные:

# service cassandra stop

И, удаляем все данные:

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

И запускаем заново:

# service cassandra start

Чтобы добавить Cassandra в автозапуск ОС, используем команду:

# update-rc.d cassandra defaults

Установка завершена. Как настроить и как использовать, я расскажу ниже.

-===СПОСОБ 3 — использование готового ПО===-

Смотрим раздел — Установка Apache Cassandra на другие Unix/Linux

-===СПОСОБ 4 — использование исходного кода ===-

Используем исходный код который можно получить:

$ git clone http://git-wip-us.apache.org/repos/asf/cassandra.git

Инструкция по сборке будет в репозитории.

Установка Apache Cassandra в Mac OS X

Для начала, подключаем ( устанавливаем) homebrew:
Установка brew на Mac OS X

Для поиска пакетов, используем:

$ brew search cassandra

У меня получился следующий вывод:

cassandra                        cassandra@2.1                    cassandra@2.2

Для установки используем:

$ brew install cassandra

Установка Apache Cassandra на другие Unix/Linux

-===СПОСОБ 1 — использование исходного кода===-

Используем исходный код который можно получить:

$ git clone http://git-wip-us.apache.org/repos/asf/cassandra.git

Инструкция по сборке будет в репозитории.

-===СПОСОБ 1 — использование исходного кода в архиве===-

Скачиваем утилиту:

# cd /usr/local/src && wget http://apache.cp.if.ua/cassandra/3.10/apache-cassandra-3.10-bin.tar.gz

Распакуем архив:

#  tar -zxvf apache-cassandra-3.10-bin.tar.gz

Перемещаем содержимое папки:

# mv /usr/local/src/apache-cassandra-3.10 /usr/local/cassandra

Пропишем переменное окружение, для этого открываем:

# vim  ~/.bash_profile

И приводим к виду:

export JAVA_HOME=/usr/java/jdk1.8.0_121/
export JRE_HOME=/usr/java/jdk1.8.0_121/jre
export CASSANDRA_HOME=/usr/local/cassandra 
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:/usr/bin/usr/local/bin:$CASSANDRA_HOME/bin

Настройка Apache Cassandra

Отредактируем файл:

# vim /usr/local/cassandra/conf/cassandra.yaml

После проверки конфигурации эти значения будут установлены в указанные каталоги.

  • data_file_directories «/var/lib/cassandra/data»
  • commitlog_directory «/var/lib/cassandra/commitlog»
  • saved_caches_directory «/var/lib/cassandra/saved_caches»

Создаем папки:

# mkdir /var/lib/cassandra && mkdir /var/log/cassandra

И выставляем права на папки:

# chown -R $USER:$GROUP /var/lib/cassandra && chown -R $USER:$GROUP /var/log/cassandra

Или дайте права на чтение-запись:

# chmod 777 /var/lib/cassandra && chmod 777 /var/log/cassandra

Для запуска, используем команду:

# cassandra -f

Вот и все.

Использование Apache Cassandra в Unix/Linux

Пару минут ждём, пока запустится – и проверяем:

# cqlsh

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

No appropriate python interpreter found. - Cassandra

Исправлением служит следующее:

Обновить Python до последней версии или как скомпилировать python из исходников

PS: Нужно установить или обновить питон до python2.7! До этого я пробовал 3.4-3.6 версии и они вообще не работали.

Меняем версию python:

Переключить версию python в Unix/Linux

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

Python Cassandra driver not installed, or not on PYTHONPATH.
You might try "pip install cassandra-driver".

Говорится что нужно установить драйвер:

# pip install cassandra-driver cqlsh

PS: Если нет утилиты PIP, выполняем установку:

Установка pip/setuptools/wheel в Unix/Linux

проверяем статус:

# nodetool status

Получаем вывод:

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
UN  127.0.0.1  136.36 KB  256          100.0%            ddd50508-a0b1-47b9-922c-50c2fb99e389  rack1

Заходим в оболочку:

$ cqlsh

Вывод:

root@debian:~# cqlsh 
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh> 

PS: До этого, я получил ошибку:

Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})

Исправлением служило:

# vim /etc/cassandra/cassandra-env.sh

Ищем строку:

# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>"

Меняем на:

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1"

После чего:

# service cassandra restart

И, можно посмотреть сами ошибки:

# cassandra

Собственно, — это решило мою проблему!

Опробуем данную БД:

cqlsh> describe tables;

Keyspace system_traces
----------------------
events  sessions

Keyspace system_auth
--------------------
resource_role_permissons_index  role_permissions  role_members  roles

Keyspace system
---------------
available_ranges  size_estimates    schema_usertypes    compactions_in_progress
range_xfers       peers             paxos               schema_aggregates      
schema_keyspaces  schema_triggers   batchlog            schema_columnfamilies  
schema_columns    sstable_activity  schema_functions    local                  
"IndexInfo"       peer_events       compaction_history  hints                  

Keyspace system_distributed
---------------------------
repair_history  parent_repair_history

cqlsh>

Вот и все, тема «Установка Apache Cassandra в Unix/Linux» завершена.

The post Установка Apache Cassandra в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-apache-cassandra-v-unix-linux/feed/ 0