четверг, 11 июня 2020 г.

Установка базы Riak на CentOS7 и CentOS8

Установка базы Riak на CentOS7 и CentOS8

1. Отключить SELinux
# nano /etc/sysconfig/selinux
Комментируем все, вставляем строку
SELINUX=disabled
Перезагружаемся:
# reboot

2. Увеличить лимит на открывание файлов. Это делается тут:
# nano /etc/security/limits.conf
Настройки для доступа к множеству файлов одновременно:
     *    soft    nofile    65536
     *    hard    nofile    65536

Треьуется перезагрузка:
# reboot

3. Установить пакеты необходимые для сборки языка Erlang и базы Riak
# yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git
# yum install automake libiodbc pam-devel wget
# yum install erlang-crypto


4. Необходимо провести установку рекомендуемой версии Erlang - OTP_R16B02 в систему.
Это делается с помощью утилиты kerl
# cd /usr/src/
# curl -O https://raw.githubusercontent.com/spawngrid/kerl/master/kerl
# chmod a+x kerl
# ./kerl build git git://github.com/basho/otp.git OTP_R16B02_basho10 R16B02-basho10

Сборка выполняется долго. Сборка должна завершиться словами:
Erlang/OTP R16B02-basho10 from git has been successfully built
После сборки нужно провести установку и активацию приложения Erlang
# ./kerl install R16B02-basho10 ~/erlang/R16B02-basho10
# . ~/erlang/R16B02-basho10/activate

Проверка:
# which erl
/root/erlang/R16B02-basho10/bin/erl
# erl
Erlang R16B02_basho10 (erts-5.10.3) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false] [frame-pointer]
Eshell V5.10.3  (abort with ^G)


5. Установка самого riak:
Для CentOS8:
# wget https://files.tiot.jp/riak/kv/2.2/2.2.6/rhel/8/riak-2.2.6-1.el8.x86_64.rpm
Если не скачивается из-за проблемы устаревшего сертификата, то можно скачать так:
# wget --no-check-certificate https://files.tiot.jp/riak/kv/2.2/2.2.6/rhel/8/riak-2.2.6-1.el8.x86_64.rpm
(Файл riak-2.2.6-1.el8.x86_64.rpm можно скачать вручную)
После скачивания:
# yum localinstall -y riak-2.2.6-1.el8.x86_64.rpm
Для CentOS7:
# wget https://files.tiot.jp/riak/kv/2.2/2.2.3/rhel/7/riak-2.2.3-1.el7.centos.x86_64.rpm
или
# wget --no-check-certificate https://files.tiot.jp/riak/kv/2.2/2.2.3/rhel/7/riak-2.2.3-1.el7.centos.x86_64.rpm
# yum localinstall -y riak-2.2.3-1.el7.centos.x86_64.rpm


6. Запуск riak
# riak start
Включенив в автозагрузку:
# systemctl enable riak.service
# riak ping - проверка работы
# riak version - версия riak
# riak-admin test –тест, команда должна показать следующее:
Successfully completed 1 read/write cycle to 'riak@127.0.0.1'
# riak stop - остановка сервиса

Конфигурационный файл тут: /etc/riak/riak.conf
Лог-файлы в директории: /var/log/riak/

7. Порты, используемые Riak.
Экземпляр Riak исполняется программой beam.smp. Список открытых портов базы riak:
# netstat -ltupn | grep beam
tcp   0  0 127.0.0.1:8087 0.0.0.0:* LISTEN      2022/beam.smp
tcp   0  0 127.0.0.1:9080 0.0.0.0:* LISTEN      2022/beam.smp
tcp   0  0 0.0.0.0:46785 0.0.0.0:*  LISTEN      2022/beam.smp
tcp   0  0 127.0.0.1:8098 0.0.0.0:* LISTEN      2022/beam.smp
tcp   0  0 0.0.0.0:8099  0.0.0.0:*  LISTEN      2022/beam.smp

Узлы кластера должны свободно взаимодействовать друг с другом по портам: TCP 4369 и TCP 8099
TCP 4369 - для демона epmd
TCP 8099 - handoff_port
В конфигурации Multi-Datacenter во взаимодействии участвует так же порт TCP 9080.
TCP 9080 - порт  cluster. Используется в конфигурациях Multi-Datacenter для репликации данных в нескольких дата-центрах
Кроме того, для обмена информацией между узлами кластера используется любой непредсказуемый порт, который согласуется при работе демона epmd. Для того что бы в файрволле не давать разрешения всем портам слушать все, задействованные порты riak нужно прописать в конфигурации /etc/riak/riak.conf. Это делается следующими директивами, которые открывают возможность выбирать порт из диапазона 6000 - 7999:
erlang.distribution.port_range.minimum = 6000
erlang.distribution.port_range.maximum = 7999

А потом перезапустить Riak
# riak stop
# riak start


Выполняем открытие портов в firewalld
# firewall-cmd --permanent --add-port=4369/tcp
# firewall-cmd --permanent --add-port=8099/tcp
# firewall-cmd --permanent --add-port=6000-7999/tcp
# firewall-cmd --reload


Подключение клиентов к базе выполняется по портам:
TCP 8098 - по протоколу HTTP    
TCP 8087 - по специальному протоколу Protocol Buffers для API клиентов
Если клиент, осуществляющий запрос находиться на этой же машине, что и узел, то открывать в firewall ничего не нужно. Если есть потребность в запросах по сети, то можно открыть так:
# firewall-cmd --permanent --add-port=8098/tcp
# firewall-cmd --permanent --add-port=8087/tcp
# firewall-cmd --reload


8. Настройка кластера riak
В кластере каждый узел riak должен иметь свое имя. Все узлы равноправны. Настройка имени узла riak выполняется в следующей директиве конфигурационного файла /etc/riak/riak.conf
nodename = <Имя узла>, например, nodename = riak@10.12.35.5
Кроме имени, IP узла должен участвовать в директивах, определяющих прослушиваемые порты:
listener.http.internal = 127.0.0.1:8098
listener.protobuf.internal = 127.0.0.1:8087

Нужно заменить в нашем случае на:
listener.http.internal = 10.12.35.5:8098
listener.protobuf.internal = 10.12.35.5:8087

Для смены имени узла riak, который запускался хотя бы один раз нужно сделать следующее:
Остановить riak
# riak stop
Удалить все временные файлы, куда имя уже прописалось:
# rm -f /var/lib/riak/ring/*
Отредактировать /etc/riak/riak.conf, выставив правильное имя, например так:
nodename = riak@10.12.35.5
Запустить riak
# riak start

Добавление узла в кластер:
#  riak-admin cluster join riak@10.12.35.5
riak@10.12.35.5- имя удаленного узла riak. Можно указать любой удаленный узел c любого узла
Для применения изменений
# riak-admin cluster plan
# riak-admin cluster commit

Проверка:
# riak-admin cluster status
# riak-admin status | grep ring_members – Полный список узлов кольца кластера Riak
# riak-admin status | grep connected_nodes – Список других узлов в кольце

9. Данные
Вставка значения в ключ favs/db:
# curl -X PUT http://<IP-адрес>:8098/riak/favs/db -H "content-Type: text/html" -d "<h1>RIAK</h1>"
Запрос данных по ключу:
# curl http://<IP-адрес>::8098/riak/favs/db

четверг, 4 июня 2020 г.

Установка gcc не ниже 5 в CentOS7


Установка gcc не ниже 5 в CentOS7

В CentOS7 gcc по умолчанию версии 4.


Установка gcc версии 8 выполняется так:
# yum install centos-release-scl
# yum install devtoolset-8-gcc devtoolset-8-gcc-c++

 

Переключение на новую версию:
# scl enable devtoolset-8 -- bash
 

Проверка:
# gcc --version
gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)

 

После перезагрузки gcc будет старой версии - 4

вторник, 28 апреля 2020 г.

Установка и начало работы с Phantomjs и CasperJS в CentOS8

Установка и начало работы с Phantomjs и CasperJS в CentOS8

PhantomJS – программа эмулирующая браузер в консоли. Позволяет работать с движком WebKit с поддержкой JavaScript.
CasperJS – вспомогательный инструмент написанный на JavaScript как обертка PhantomJS.

Установка Phantomjs
# yum install fontconfig
# yum install bzip2

На сайте phantomjs.org, на странице https://phantomjs.org/download.html находим ссылку на архив с программой
Скачиваем архив в директорию /usr/src/
Распаковываем архив и удаляем его потом.
# cd /usr/src/
# tar xvjf  phantomjs-2.1.1-linux-x86_64.tar.bz2
# rm -f phantomjs-2.1.1-linux-x86_64.tar.bz2

Делаем символьную ссылку на исполняемый файл:
# ln -s /usr/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
Проверка весрии Phantomjs
# phantomjs -v
2.1.1


Установка Casperjs
# cd /usr/src
# git clone -b master git://github.com/n1k0/casperjs.git
# cd casperjs
# ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs

casperjs требует Python
Устанавливаем третью версию Python
# yum install python3
Делаем символьную ссылку
# ln -s /usr/bin/python3 /usr/bin/python
Теперь casperjs работает и показывает свою версию:
# casperjs --version
1.1.4


Использование Phantomjs.
Программа Phantomjs работает с файлами javascript кода.
Пример:
# cd ~
Создаем файл для проверки hellophantomjs.js:
# touch hellophantomjs.js
Код:
console.log('Hello, world!');
phantom.exit();

Запускаем этот файл на исполнение командой phantomjs
# phantomjs hellophantomjs.js
Если будет сделан следующий вывод, значит phantomjs работает нормально.
Hello, world!

Использование Casperjs.
Программа Casperjs так же работает с файлами javascript кода.
Создадим файл получения скриншота сайта http://myttk.ru на casperjs:
# touch screencasper.js
Код:
var casper = require('casper').create({  
    verbose: true,
    logLevel: 'debug',
    pageSettings: {
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
    }
});
casper.options.viewportSize = {width: 1280, height: 1024};
casper.start("http://myttk.ru");
casper.then(function() {
    casper.capture("screen.png");
});
casper.run();

Запуск:
# casperjs screencasper.js
В каталоге откуда запускалась команда будет сгенерирован файл скриншота сайта - screen.png.



Базовые конструкции для работы с Casperjs:
 

Проход авторизации Apache
var url = "http://xxx.ru"
var login = "mylogin"
var password = "mypassword"
casper.then(function() {
  casper.thenOpen(url);
  casper.setHttpAuth(login, password);
});
 

Кликнуть по ссылке с неким ID в DOM
var but_id = "xxxx"; 

casper.thenClick('#'+but_id );
 

Вывод сообщения в консоль:
casper.echo('Сообщение в консоль');

Запись содержимого некого тега в файл:
var fs = require('fs');
casper.then(function() {
  this.echo('Приступаем к копированию данных элемента с ID=DATA_TABLE в файл');
  var table = casper.evaluate(function(){
    var table = document.querySelector('#DATA_TABLE').innerHTML;
    return table;
  });
  fs.write(outputFile, table, 'w');
});