cyberflow_gravatar

Cyberflow

I am linux system administrator.


Navigation
» Home
» Categories
» Github
» XML Feed

Cyberflow


    Мониторинг dmesg

    02 Jul 2014 | Comments

    Задача

    Необходимо организовать централизованный сбор логов, в частности сообщений ядра dmesg и реакции на них со стороны событийного мониторинга (например nagios).

    Передача сообщений ядра на сервер логов

    Для передачи сообщения ядра можно использовать модуль netconsole. Он позволяет передавать сообщения журнала ядра (dmesg) на удаленный компьютер по сети, без участия пространства пользователя (например, syslogd). Для сбора данных можно использовать, например logstash.

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

    # dmesg -n 7
    # modprobe netconsole netconsole="6665@10.13.77.99/eth1,6666@10.13.77.1/d4:ae:52:cf:33:96"
    

    Первая команда устанавливает уровень логирования для dmesg. Вторая загружает модуль netconsole с параметрами, где:

    Erchef no_connect Error

    28 May 2014 | Comments

    Предпосылки

    Столкнулся с тем, что при большом количестве нод в chef-server версий 11.0.4 и 11.0.8 поставленных из omnibus пакетов для Ubuntu, он с большой периодичностью стал отдавать 500 Internal server error нодам при выполнении куска рецепта, который делает поиск по data_bag’ам. При изучении логов выяснилось следующее: В логах nginx’a видно, что запросы на поиск отправляются на бэкэнд erchef’а (ядро chef-server написанное на эрланге) и в ответ получаем 500:

    192.168.1.111 - - [27/May/2014:11:45:28 +0000] "GET /search/databag1?q=id:node1&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=1000 HTTP/1.1" 500 "0.051" 36 "-" "Chef Client/11.6.0 (ruby-1.9.3-p429; ohai-6.18.0; x86_64-linux; +http://opscode.com)" "127.0.0.1:8000" "500" "0.046" "11.6.0" "algorithm=sha1;version=1.0;" "auth1" "2014-05-27T11:45:28Z" "2jmj7l5rSw0yVb/vlWAYkK/YBwk=" 1011
    

    Смотрим далее в логи erchef:

    =ERROR REPORT==== 27-May-2014::11:45:28 ===
    webmachine error: path="/search/databag1"
    {error,
        {error,function_clause,
            [{chef_wm_search,'-make_bulk_get_fun/5-lc$^1/1-2-',
                 [{error,no_connections},
                 <<"databag1">>],
                 [{file,"src/chef_wm_search.erl"},{line,233}]},
             {chef_wm_search,fetch_result_rows,4,
                 [{file,"src/chef_wm_search.erl"},{line,351}]},
             {chef_wm_search,make_search_results,5,
                 [{file,"src/chef_wm_search.erl"},{line,324}]},
             {chef_wm_search,to_json,2,
                 [{file,"src/chef_wm_search.erl"},{line,130}]},
             {webmachine_resource,resource_call,3,
                 [{file,"src/webmachine_resource.erl"},{line,166}]},
             {webmachine_resource,do,3,
                 [{file,"src/webmachine_resource.erl"},{line,125}]},
             {webmachine_decision_core,resource_call,1,
                 [{file,"src/webmachine_decision_core.erl"},{line,48}]},
             {webmachine_decision_core,decision,1,
                 [{file,"src/webmachine_decision_core.erl"},{line,532}]}]}}
    

    К сожалению то, что erchef пишет в свой лог не информативно. Однако путём длительного перебора удалось понять, что проблема в соединении к базе.

    Трюки с ssh config

    22 May 2014 | Comments

    Конфиг ssh очень полезная и удобная штука. Пользуюсь им давно, но недавно открыл ещё несколько замечательных возможностей. Решил поделиться парой полезных фич и рассказать об одном маленьком лайфхаке.

    Шаринг соединений

    Часто бывает необходимо по работе держать много консолей с ssh на один сервер. Для упрощения такой работы (с точки зрения компьютера) в OpenSSH есть возможность шарить соединения. Т.е. если вы зашли на сервер, то в системе создается ControlSocket и все последующие соединения на этот сервер будут использовать уже созданный сокет, а не создавать новое подключение. И если при первом соединении сервер спрашивает у вас пароль, то при повторном использовании уже сокета авторизация не потребуется.

    Для настройки Connection sharing необходимо добавить следующие строчки в начало конфига ssh:

    ControlMaster auto
    ControlPath /tmp/ssh_%h_%p_%r
    

    Проброс соединений через сервер

    Другая не менее полезная штука - это возможность настроить соединение через сервер. Т.е. вместо двух команд: ssh server1 и потом уже оттуда ssh server2, можно сразу в конфиге всё прописать и ходить одной командой.

    Установка slave mysql-percona сервера

    14 May 2014 | Comments

    Хочу сразу заметить, что способов развернуть slave сервер существует масса. Я хочу рассказать лишь об одном из них. Во-первых для себя, т.к. я часто применяю его в работе. Во-вторых для тех, у кого стоит задача по развертыванию независимого (поясню: это значит что перенос файлов базы с одного сервера на другой не подходит, как в моём случае. Т.е. репликация не полная) slave и при этом репликация производиться только над некоторыми БД, а не над всем, что есть.

    Подразумевается, что уже есть мастер сервер, на котором крутятся БД и настроен для репликации.

    Теперь надо сделать dump баз данных, при этом будем использовать атрибуты add-drop-database для добавление в dump строчки удаляющей базу перед её созданием и master-data для добавления информации о бин-логах и их позиции на момент создания dump’a. Так же, чтобы избежать переноса служебных баз, формируем список баз для переноса исключив из них все служебные базы mysql (в список можно добавить и другие базы по аналогии). После создания dump’a переносим его на slave сервер.

    # DATABASE_LIST=$(mysql -NBe 'show schemas' | grep -wv 'mysql\|performance_schema\|information_schema')
    # mysqldump  --databases $DATABASE_LIST --add-drop-database --master-data -u root -p > dbdump.db
    # scp dbdump.db mysql-slave-host:~/
    

    На slave сервере добавляем необходиму информацию для репликации. Это можно сделать и после развертывания dump’a. Так же я пропущу описание настройки репликации в конфигурации mysql.

    # mysql
    mysql> CHANGE MASTER TO MASTER_HOST='mysql-master-host', MASTER_USER='$replica_user', MASTER_PASSWORD='$slavepass';
    

    Теперь можно залить сделанный dump и после этого включить репликацию.

    # mysql -p < ~/dbdump.db
    # mysql
    mysql> slave start;
    

    Репликация таблиц базы chef-server

    09 Aug 2013 | Comments

    Intro

    В данной статье я расскажу как настроить два сервера chef-server версии 11 с репликацией части таблиц базы postgresql для обеспечения отказоустойчивости. Основная цель репликации это хранения данных о клиентах и нодах для прозрачного доступа нод к любому из chef серверов и возможности работы без перерегистрации. Предлагаемое opscode решение репликации данных через DRBD показалось мне не самым удобным и, главное, надёжным. По сему было принято решение искать альтернативные пути. Так как реплицировать все данные из всех таблиц нет необходимости, то было решено посмотреть в сторону skytools и londiste, которые позволяют реплицировать только определенные таблицы БД.

    Однако не обошлось без сюрпризов. Opscode распространяет shef-server 11 по средствам уже собранных omnibus пакетов, в котором свой postgres 9.2. Этот постгрес собран урезанным и не работает с skytools. В итоге в этой статье будет описано как поставить chef-server из omnibus пакета на дистрибутивный postgres 9.2 и прикрутить репликацию через londiste.