Bind9: balancing by client ip (even/odd)

For some reason i need balancing client’s 50/50 for 2 datacenter’s
But, if client send GET request to datacenter1 (DC1) all following request need redirect to the same DC1. Only if DC1 is down – send to DC2
Simplest way – is share client’s by their ip (odd/even)
So we need two Bind9 services on one server.
First Bind9 will be answered that www.example.org is in DC1, second – in DC2
For example first named.conf:

zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
};
....

Zone:
Читать далее Bind9: balancing by client ip (even/odd)

Install Weathermap in Cacti

For install Weathermap you need have Cacti with Plugin Architecture
For PHP we need GD library

apt-get install php5-gd

Go to Cacti Plugins

cd cacti/plugins
wget http://network-weathermap.com/files/php-weathermap-0.97c.zip
unzip php-weathermap-0.97c.zip

Читать далее Install Weathermap in Cacti

Howto limit speed in browser for test

Sometimes need to shape speed in browser (Firefox) for emulate slow user connections
Using tc :

tc qdisc add dev eth0 root netem delay 2000ms 1000ms

2000ms – original packet timeout
1000ms – deviation
Читать далее Howto limit speed in browser for test

Telegram Bot on ruby

apt-get install ruby gem ruby-dev make
gem install telegram-bot-ruby

Теперь необходимо получить токен для бота.
Заходим в Telegram, добавляем бота @BotFather, и создаем бота:

Telegram Bot
Telegram Bot

So, let’s write to out bot and get updates

curl -s -X POST https://api.telegram.org/botNNNNN:NZNZNNZNZNZNNZNZ/getUpdates

And we have:

{"ok":true,"result":[{"update_id":923096141,
"message":{"message_id":2130,"from":{"id":<id>,"first_name":"<fname>","username":"<username>"},"chat":{"id":<chat.id>,"first_name":"<fname>","username":"<username>","type":"private"},"date":1447842513,"text":"test"}}]}
# encoding: utf-8
#
require 'telegram/bot'
#require_relative 'getimg'
token = 'NNNNNN:XNXNXNXNXNXNXNXNX'
 
#inputMess = ARGV[0]
puts "fff"
Telegram::Bot::Client.run(token) do |bot|
    #  bot.listen do |chat|
    #bot.fetch_updates
    bot.api.sendMessage(chat_id: "<chat.id>", text: "Hello")
 
end

Git: запомнить пароль на день

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

git config --global credential.helper cache

это заставит держать данные авторизации в памяти
По умолчанию 15минут.
Но можно выставить свое время
Читать далее Git: запомнить пароль на день

HAProxy с поддержкой SSL

Поддержка SSL появилась в HAProxy 1.5
Эта версия для Ubuntu/Debian доступна с такого репозитория

sudo apt-add-repository ppa:vbernat/haproxy-1.5
 
sudo apt-get update
 
sudo apt-get install haproxy

Продолжаем осваивать Git

Начало тут
После того как мы создали пустой репозиторий на сервере, нужно добавить туда наш проект

git add * && git commit -m "Initial commit" && git push origin master

где,
origin это сервер на котором у нас код… и добавляется он вот так

git remote add origin ssh://git@<hostname>/git/test.git
</hostname>

Возможны ошибки при первом комите:

root@client:app# git push
Password: 
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'ssh://root@giserver.com/git/app'

Указываем явно куда пушить

root@gitclient# git push origin master
Password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 203 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To ssh://root@gitserver.com/git/app
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://root@gitserver.com/git/app'

Все равно не поддается на провокацию. Сия ситуация хорошо описана тут http://pete.akeo.ie/2011/07/git-remote-repository.html
Git думает что раз репозиторий пустой, то есть не завершенный первый коммит и не дает простому смертному стать первым. Для этого мы на сервере создадим новую ветку:

root@gitserver : git checkout -b first-commit
Switched to a new branch 'first-commit'
root@gitserver $ git symbolic-ref HEAD refs/heads/first-commit

После этого можем внести изменения в код на клиенте и передать это на сервер

echo "new file" > README
git add README
git commit -m "Added file README"
git push origin master

Читать далее Продолжаем осваивать Git

Управляем KVM через браузер с помощью WebVirtMgr

При работе с системами виртуализации всегда хочеться получить доступ к хост-машине с любой точки мира и с любого устройства которое есть под рукой. Если пользоваться штатными инструментами KVM, XenServer, VMWare то там необходима установленая консоль управления на локальном ПК и если нужно сделать, что то удаленно и быстро то возникают проблемы… начинаеш ставить консоль, не хватает .Net… поставил его, не хватает чего то другого. В результате, иногда, чтоб перегрузить умершую виртуалку требуется 30-60мин пока все скачаеш и поставишь. Хотя все это можно проделать с консоли за 30сек 🙂
Но мы не об этом.

Тут будет актуально имет скорый доступ к управлению через браузер, что даст возможность подключится даже с телефона.
Приступим к настройке.
Исходные данные: Debian 7.7
Настраиваем все с нуля.
Читать далее Управляем KVM через браузер с помощью WebVirtMgr

Отключить Basic авторизацию для каталога в Apache

На сервере настроена Basic авторизация доступа к http средствами Apache, но есть одна директория к которой нужно получать доступ без запроса логина и пароля.
Чтобы исключить этот каталог можно воспользоваться файлом .htaccess
Что мы имеем на входе: Apache 2.2.22, Debian 7 и такой конфиг :

cat /etc/apache2/sites-enabled/000-default
.......
<Directory / >  
AuthType Basic
  AuthName "Authentication Required"
  AuthUserFile ".password"
  Require valid-user
......

Читать далее Отключить Basic авторизацию для каталога в Apache

Ускоряем PHP. Установка eAccelerator в Debian

Для удовлетворения потребностей 1C Bitrix в мощи сервака я извращался как мог, но быстрее чем за 3сек страница не грузилась – время генерации самой страницы 1.1сек, это после того как удалось уменьшить время отработки MySQL почти в 2 раза

Пришлось таки ускорять сам PHP.
Будем пробовать с помощью eAccelerator на базе Debian 7.3(amd64) + Apache 2.2.22 + PHP 5.3
Официальная страница модуля: https://github.com/eaccelerator/eaccelerator
Читать далее Ускоряем PHP. Установка eAccelerator в Debian

Ускоряем INSERT в 1С-Bitrix

После установки этого безобразия (1C-Bitrix) заметил, что медленно отрабатывает генерация страниц..
Копнув в лог заметил много таких вставок в БД

TIME: 0.0178248882 SESSION: blkqvjd37heib431532gddfip5  CONN: Resource id #49
INSERT INTO b_stat_hit.......

И каждая из них выполняется по 15-50мс
Погуглив нашел решение.
Читать далее Ускоряем INSERT в 1С-Bitrix