Установка базы 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
четверг, 11 июня 2020 г.
четверг, 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');
});
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');
});
Подписаться на:
Сообщения (Atom)
