В този пост ще споделя как бързо и лесно можем да си направим Raspberry pi TimeMachine (бекъп сървър за MacOS) с помощта на raspberry pi (в моят случай версия 3) и един външен хард диск.
Едно от най-важните неща в системното администриране е мониторинга. За това използваме редица инструменти – кой от кой по-добри, за да можем да реагираме бързо и адекватно при определени критични ситуации!
В този пост ще споделя как се правят push notifications за nagios – един от най-добрите инструменти за мониторинг!
За целта използвах приложението Pushover (има го за iOS и Android) и следвах стъпките :
Изтеглих си Pushover приложението за iPhone и си въведох данните. Първоначално има 7 дни безплатен период, а след това за 10.99лв еднократно се закупува лиценз.
На nagios сървъра в папка /etc/nagios3 ( тук е инсталиран моя nagios ) изтеглих notify-by-pushover.php :
cd /etc/nagios3/ ; wget https://raw.githubusercontent.com/barryo/nagios-plugins/master/notify-by-pushover.php ; chmod +x /etc/nagios3/notify-by-pushover.php
Тествах notify-by-pushover.php скрипта за да видя дали всичко ще е ок така :
echo "Test message" | /etc/nagios3/notify-by-pushover.php HOST "Nagios API Token/Key" "Your User Key" RECOVERY OK
– Ако всичко е ок, трябва да се получи нотификация : Nagios Alert – HOST – RECOVERY – OK
„Nagios API Token/Key“ и „Your User Key“ се взимат от страницата на App-a ни и homepage-а на pushover.net
В /etc/nagios3/commands.cfg добавих двете нови команди за notify-by-pushover както следва :
от миналата година, днес ще споделя как бързо и лесно можем да извадим определена таблица от dump-a на MySQL базата ни. Разбира се ако базата ние малка можем да отворим този dump и да си копираме съдържанието на таблицата в текстов редактор, но когато базата ни е 100гб това няма да е възможно.
sed -n -e '/CREATE TABLE.*`fc_company`/,/CREATE TABLE/p' 201709140001-db-CRM.sql > fc_company.sql
Тук нещата изглеждат напълно ясни, но да обесня :
fc_company е таблицата която искаме да извадим
201709140001-db-CRM.sql е името на dump-а ни
fc_company.sql е името на новият dump съдържащ само таблицата ни
Хубаво е да се прегледа след това самия fc_company.sql файл, тъй като sed понякога хваща и началото на други таблици и ги дропи 🙂 Такъв пример е ако имаме таблица fc_compay_new примерно.
Отдавна не съм писал нещо смислено в сайта… просто нямах муза :/
Днес ще споделя как бързо и лесно направих redis haproxy failover схема, а ето и цялата концепция :
Два redis сървъра работещи на принцип master -> slave
HaProxy което да следи за евентуално отпадане на master сървъра, и пускането на трафика към бекъпа (slave)
Конфигуриране на redis
За направата на redismaster->slave използвах тази статия, като тук е хубаво да се уточни, че статията е написана уж за redis cluster, но реално тя представлява проста схема на репликация между master и slave сървър! Единствената разлика която е примен е , че redis-server2 не работи на режим read-only :
slave-read-only no
Важно е да се изтества всичко дали е ок.
Пример :
redis-cli -a password -h redis-server1 monitor
redis-cli -a password -h redis-server2 monitor
или
redis-cli -a password -h redis-server1 info
и информацията за #Replication при нас трябва да изглежда така :
Тук нещата изглеждат доста прости. Използвам ubuntu 14.04 и версия на haproxy 1.6 stable. Повече инфо тук.
Конфигурационният файл на redis haproxy сървъра ми изглежда така :
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
defaults REDIS
mode tcp
timeout connect 2s
timeout server 15s
timeout client 15s
frontend ft_redis
bind 0.0.0.0:6379 name redis
default_backend bk_redis
backend bk_redis
# mode tcp
option tcp-check
tcp-check connect
tcp-check send AUTH\ password\r\n
tcp-check send PING\r\n
tcp-check expect string +PONG
# tcp-check send info\ replication\r\n
# tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server redis-server1 123.123.123.123:6379 check inter 1s
server redis-server2 221.221.221.221:6379 check inter 1s backup
listen haproxy-web
bind 0.0.0.0:8181
mode http
stats enable
stats uri /
stats realm Strictly\ Private
stats auth admin:adminpassword
stats refresh 30s
# stats admin if TRUE
Така нашият haproxy сървър слуша на всичките ни айпи адреси на порт 6379 и проверява master сървъра ни redis-server1 на принципа на ауторизацията чрез парола „password“.
Ако връзката до redis-server1 отпадне, до 15 секунди пуска трафика към redis-server2. Това се конфигурира от настройките за timeout, но по-ниските такива ще доведат до евентуални проблеми, ако има смущения по трасето. Когато връзката до redis-server1 се възтанови, трафика към него се връща по старо му.
На порт 8181 пък върви статистика, която позволява да наблюдаваме заявките към сървърите ни в реално време. Потребителското име за нея е admin, а паролата : adminpassword.