вторник, 30 июня 2020 г.

Установка и использование MONIT в CentOS

MONIT - утилита мониторинга процессов
Установка MONIT выполняется в CentOS из репозитария epel:
# yum install monit
Основной файл конфигурации - monitrc
В CentOS8 и CentOS7 лежит, как правило, тут - /etc/monitrc
В CentOS6 файл конфигурации тут: /etc/monit.conf
Дополнительная папка с конфигами - /etc/monit.d/

Редактируем файл /etc/monitrc (/etc/monit.conf)
Блок отвечающий за WEB-морду, работающую на порту 2812 изменяем для доступа по сети, например:
set httpd port 2812 and
    use address <IP адрес>
    allow localhost   
    allow 10.0.0.0/8
    allow admin:monit

Проверяем, что слдедующая директива расскоментирована:
include /etc/monit.d/*

Простой запуск службы выполняется так:
# monit
Регистрация в автозапуск при загрузке Linux:
В CentOS7 и 8 - # systemctl enable monit
В CentOS6  - # chkconfig monit on

Для доступа к MONIT по HTTPS открываем порт 2812
FIRREWALLD:
# firewall-cmd --permanent --add-port=2812/tcp
# firewall-cmd --reload


Доступ к интерфейсу MONIT по HTTP выполняется по URL http://<ip-адрес>:2812, логин admin, пароль monit
Вот так можно получить данные в XML http://<ip-адрес>:2812/_status?format=xml

Для наблюдения за сервисами нужно создать файлы мониторинга сервисов и поместить их в /etc/monit.d/
Примеры конфигурации мониторинга систем:
Сама система:
/etc/monit.d/system
check system $HOST
    if loadavg (1min) per core > 4 for 5 cycles then alert
    if loadavg (5min) per core > 2 for 10 cycles then alert
    if cpu usage > 90% for 5 cycles then alert
    if memory usage > 85% then alert
    if swap usage > 25% then alert

Сервис MySQL
/etc/monit.d/mysql
check process mysql matching "mysqld"
    if totalmem > 500 MB for 5 cycles then alert
    if cpu > 50% for 5 cycles then alert

Сервис Apache
/etc/monit.d/apache
check process apache with pidfile /var/run/httpd/httpd.pid
    if cpu > 60% for 2 cycles then alert
    if totalmem > 300.0 MB for 5 cycles then alert
    if children > 250 then alert
    if disk read > 500 kb/s for 10 cycles then alert
    if disk write > 500 kb/s for 10 cycles then alert

Сервис Zabbix
check process zabbix with pidfile /var/run/zabbix/zabbix_server.pid
    if cpu > 70% for 2 cycles then alert
    if totalmem > 1000.0 MB for 5 cycles then alert


Проверка конфигурации:
# monit -t
Рестарт демона, после изменения настроек:
# monit reload

суббота, 20 июня 2020 г.

База RIAK и клиент PYTHON

База RIAK и клиент PYTHON

Для корректной работы клиента RIAK, кроме самого PYTHON нужны дополнительные расширения:
#yum install python3-devel
#yum install libffi libffi-devel
#yum install openssl-devel


Теперь можно установить расширение python:
#pip3 install riak (для CentOS8 и python3)
#pip install riak (для CentOS7)

Пример скрипта извлечения данных (семейство rooms, ключ 201)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import json
import riak

myClient = riak.RiakClient(pb_port=8087, protocol='pbc', host='10.10.49.162')

myBucket = myClient.bucket('rooms')
fetched = myBucket.get('201')

print (fetched.encoded_data)
print (fetched.data)


Пример скрипта вставки данных:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import json
import riak

myClient = riak.RiakClient(pb_port=8087, protocol='pbc', host='10.10.49.162')

myBucket = myClient.bucket('rooms')

STYLES = ['single', 'double', 'queen', 'king', 'suite'] # Типы номеров

for x in range(1,1000):
    style = random.choice(STYLES)
    capacity = random.randint(1, 8)
    d = {"style": style, "capacity": capacity}
    key = myBucket.new(str(x), data=d)
    key.store()


Пример скрипта получения данных MapReduce:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import json
import riak

myClient = riak.RiakClient(pb_port=8087, protocol='pbc', host='10.10.49.162')

myBucket = myClient.bucket('rooms')

mapred = riak.mapreduce.RiakMapReduce(myClient)
mapred.add_bucket("rooms")
mapred.add_key_filters([["string_to_int"], ["less_than", 500]])
mapred.map("""
        function(v) {
            var parsed_data = JSON.parse(v.values[0].data);
            var data = {};
            data[parsed_data.style] = parsed_data.capacity;
            return [data];
        }
        """)
mapred.reduce("""
        function(v) {
          var totals = {};
          for (var i in v) {
            for (var style in v[i]) {
              if (totals[style]) totals[style] +=v[i][style];
              else totals[style]=v[i][style];
            }
          }
          return [totals];
        }
        """)
results = mapred.run()
print (results)

Ссылка на документацию
https://riak-python-client.readthedocs.io/en/1.5-stable/index.html


четверг, 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