Автор: admin

  • mysq скопировать БД на другой сервер

    Есть у меня очень большая БД, которую нельзя экспортировать через phpmyadmin сильно длительная операция все возможные таймауты вылетают.

    тут понадобилось для теста развернуть эту БД на другом сервере. без промежуточного вывода в файл.

    делаем это вот так

     mysqldump -uroot -pPASS bigDB | mysql -h 10.10.10.6 -uroot -pPASS bigDBCode language: Bash (bash)

    Вот так не хитро одной командой мы выводим дамп, и сразу же отправляем его во второй сервер.

  • Запускаем django на nginx

    Давным давно, я писал как установить nginx

    там же в комментариях подсказали ещё способ

    nginx=stable # use nginx=development for latest development version
    add-apt-repository ppa:nginx/$nginx
    apt-get update
    apt-get install nginxCode language: Bash (bash)

    получаем последний nginx.

    Напомню, что у меня за nginx стоят разные «бэк-энды»
    для самого нагруженного сайта я использую php5-fpm
    для остальных сайтов я использую apache2
    для Django проектов я использовал Apache2 + mod_python но его прожорливость, давала повод задуматься.

    в итоге я искал способ освободить ресурсы занимаемые Индейцем.

    Такой способ нашёлся 🙂

    создаю конфигурационный файл хоста nginx.

    touch djangositeCode language: Bash (bash)

    у меня они лежат в /etc/nginx/sites-available и уже от туда симлинками идут в /etc/nginx/sites-enabled

    Конфигурационный файл такого содержания

    server {
    listen 80;
    server_name sitename.ru www.sitename.ru;
    
    charset utf-8;
    
    access_log /var/log/nginx/sitename-access.log;
    error_log /var/log/nginx/sitename-error.log;
    client_max_body_size 300m;
    
    # Это, чтоб стили и статические файлы админки подгружались, проверьте у себя,
    # в разных версиях Ubuntu могут быть разные версии Питона.
    # ну и в настройках джанго проекта разумеется у нас тоже указан ADMIN_MEDIA как media_admin
    
    location /media_admin {
        alias  /usr/lib/python2.5/site-packages/django/contrib/admin/media;
        }
    location / {
    #Это как пример как мы запускаем джангоСервер
    #python ./manage.py runfcgi method=prefork socket=/tmp/sitemane.sock pidfile=/tmp/sitename.pid
    # Общаться будем по сокету, хотя можно и по 127.0.0.1:8000
    fastcgi_pass   unix:/tmp/sitename.sock;
    #Ага и вот этот файлик не забудем создать, о нём ниже
    include fastcgi_params_django;
    }
    
    #error_page 404 /404.html;
    
    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }Code language: Bash (bash)

    так же создаём файл

    touch /etc/nginx/fastcgi_params_djangoCode language: Bash (bash)

    и в него вкладываем вот такие параметры

    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_pass_header Authorization;
    fastcgi_intercept_errors off;
    
    fastcgi_param GATEWAY_INTERFACE CGI/1.1;
    fastcgi_param SERVER_SOFTWARE nginx;
    
    fastcgi_param REMOTE_ADDR $remote_addr;
    fastcgi_param REMOTE_PORT $remote_port;
    fastcgi_param SERVER_ADDR $server_addr;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    
    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param REDIRECT_STATUS 200;Code language: Bash (bash)

    проверяем верность конфигурации

    nginx -tCode language: Bash (bash)

    если всё ОК идём дальше.

    проекты джанго у меня лежат в /home/django

    Заходим в нужный нам проект и создадим там скрипт сервера.

    touch server.shCode language: Bash (bash)

    Вот с таким содержанием

    #!/bin/bash
    
    
    case "$1" in
    "start")
    #есть 2 варианта запуска сервера, по сети и через unix сокеты
    # последний выигрывает по производительности
    #python ./manage.py runfcgi method=prefork host=127.0.0.1 port=8000 pidfile=/tmp/sitename.pid
    python ./manage.py runfcgi method=prefork socket=/tmp/sitename.sock pidfile=/tmp/sitename.pid
    # не забываем, про то, что сокет у нас мог прочитать фронт-энд
    # а nginx  у меня работает с правами www-data
    chown www-data:www-data /tmp/sitename.sock
    ;;
    "stop")
    kill -9 `cat /tmp/sitemane.pid`
    ;;
    "restart")
    $0 stop
    sleep 1
    $0 start
    ;;
    *) echo "Usage: ./server.sh {start|stop|restart}";;
    esacCode language: Bash (bash)

    Вот и весь скрипт, не забываем только поменять sitename на имя вашего сайта, а то получится, что на один pid или сокет у вас будет ссылаться несколько серверов.

    чтоб запустить сервер

    ./server.sh startCode language: Bash (bash)

    А вот он и не запустился ругается на Flup

    No module named flupCode language: Bash (bash)

    нам понадобится пакет flup это питоновский пакет, поэтому его я устанавливаю вот так

    easy_install flupCode language: Bash (bash)

    Можно попробовать поставить его из репозитория убунты

    apt-get install python-flupCode language: Bash (bash)

    Но я так не пробовал 😉

    Всё сервер запустился, можно перезапустить nginx для применения новой конфигурации

    /etc/init.d/nginx restartCode language: Bash (bash)

    Всё готово, наш сервер запустился.

    Теперь по хорошему добавить скрипт запуска сервера в автозагрузку.

  • linux два интерфейса (linux два провайдера)

    Как и обещал, пишу.
    Довольно много времени потратил на понимание происходящего..

    И так есть у меня сервер, он же ОпенВПН сервер в одной организации. и вот упёрлась организация в ширину канала, собственно беда в том, что по этому же каналу ходил SIP трафик, и сильно «лагал» когда ширины канала не хватало 🙁

    Подключаем ещё один канал от второго провайдера. есть сервер в нём внешний канал (eth1), локальная сеть(eth0), ещё ходит OpenVPN (tun0) для связи с остальными филиалами.

    Добавился ещё один внешний провайдер (eth4). для его подключение я сделал так.
    Напомню, что linux умеет работать с несколькими таблицами маршрутизации

    Тоесть для удобства я могу для каждого своего филиала создать табилцу маршрутизации, и в ней уже удобно управлять маршрутами, потом мне не надо будет листать простыню маршрутов таблицы main

    в файл

     /etc/iproute2/rt_tablesCode language: Bash (bash)

    Добавил 2 таблицы

    201 T1
    202 T2Code language: Bash (bash)

    У каждого провайдера будет своя таблица маршрутизация
    Т1 — первый провайдер
    Т2 — второй

    Создал скрипт, что будет заведовать маршрутизацией.

    #!/bin/sh
    IP1=217.111.111.99
    IP2=94.11.111.81
    P1=217.111.111.97
    P2=94.11.111.82
    IF1=eth1
    IF2=eth4
    # добавим дефаулт гетвей в каждую таблицу.
    ip route add default via $P1 table T1
    ip route add default via $P2 table T2
    # Говорим, что по дефолту будем ходить через первого провайдера.
    ip route add default via $P1
    ip rule add from $IP1 table T1
    ip rule add from $IP2 table T2
    #Перечисляю хосты, что будут ходить через новый интерфейс вот так
    #Но не забываем их указывать в NAT iptables
    ip rule add from 192.168.5.107 table T2
    ip rule add from 192.168.5.108 table T2
    ip rule add from 192.168.5.112 table T2
    ip rule add from 192.168.5.199 table T2
    #Это так на всякий случай
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectsCode language: Bash (bash)

    Где
    IP# это ИП адрес на интерфейсе,
    P# шлюз на интерфейсе
    после этого сервер отвечает по обоим интерфейсам. также пинги/трацерты с сервера ходят через нужный интерфейс.

     ping -I eth4 ya.ru Code language: Bash (bash)

    теперь мне нужно что нужные мне клиенты ходили через этот интерфейс наружу. в iptables.up.rules у меня есть правила НАТа

    -A POSTROUTING -s 192.168.5.102 -o eth4 -j MASQUERADE
    -A POSTROUTING -s 10.10.10.6 -o eth4 -j MASQUERADE
    -A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1 -j MASQUERADE
    -A POSTROUTING -s 10.10.0.0/255.255.0.0 -o eth1 -j MASQUERADECode language: Bash (bash)

    первыми 2мя строками я хочу чтоб вот 192.168.5.102 и 10.10.10.6 НАТились через нового провайдера. rp_filter выключаем вот так в sysctrl

    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0Code language: Bash (bash)

    Теперь, надо понимать, что если идёт пакет на 192.168.5.108, то он попадает в таблицу T2 а в ней у нас что? правильно один только дефаултгетвей! а что такое другие подсети филиалов и ОпенВПН мы знать не знаем, поэтому тоже необходимо добавить маршрут в таблицу Т2 для указания где у нас ходятся 10.10.10.0

    ip route add 10.10.10.0/24 via 10.10.10.2 dev tun0 table T2Code language: Bash (bash)

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

  • Пассивное охлажедние

    Я всегда мечтал, чтоб у меня был бесшумный компьютер, и я не верил, почему не сделать систему жидкостного охлаждения, в которой не будет помпы? ведь тёплая вода идёт вверх, прокачивая снизу за собой холодную, чем больше греет, тем больше качает.
    Но до реализации так и не дошло.

    Но зато, решил я построить систему максимально бесшумную.

    ещё когда-то давно, я купил Zalman 7000Cu, ещё студентом отдал за него 1к рублей, в месяц у меня был оборот 4 тысячи!!!

    Тогда и посетила мысль, что всё таки ооочень тихие куллеры бывают!

    и вот имея, немного свободных вебманий, штурмую местные инет магазины, в поисках самого тихого куллера 🙂

    Очень понравился Scythe Yasya (SCYS-1000)

    Это такая хрень
    Вентилятор
    Он реально огромный, но вот досада, в тырнетах пишут что он работает от 450- оборотов.
    Но а в жизни меньше 1000 я заставить его не смог, может быть в биосе стоит контроль, который надо отключить 🙂

    Но идём на смелый эксперимент.
    оставляю корпус открытый, чтоб теплу был выход. отключаю вентилятор. и запускаю стресс тест от Эвереста.

    Вот видим результаты. 10 минут комп стоит в стресс тесте, это 100% нагрузка на память, на проц.
    Видим как температура медленно ползёт в гору, но замирает на отметке 50 градусов, далее выключаем нагрузку, температура возвращается в свои круги 28-30, при условии, что сейчас на улице +26 градусов, дома в районе 24-25ти.

    ну и напоследок включаем вентилятор на место, температура мгновенно падает до комнатной температуры.

    процессор у меня не самый горячий, и не самый новый.
    Intel C2D E6750 (4M Cache, 2.66 GHz, 1333 MHz FSB).

    Я считаю это очень круто, сейчас присматриваю, что есть из пассивного на видео карту, у меня она GeForce 8500GT с малюсеньким вентилятором.

    дальше 2 варианта событий, у меня остаётся только блок питания, и корпус всегда открыт.
    либо я ставлю блок питания как вытяжка всего из корпуса, и перед 3мя HDD (хотя разумнее их на помойку и купить один WD Green )в моём компе ставлю кулер на 12 см. получаем у нас есть вход и выход, правда БП нужен будет весь дырявый с одним большим 12см вентилятором, я думаю хватит, чтоб продувать воздух через весь системник.

    Тот вентилятор, что идёт с этим куллером, можно смело использовать как вытяжку или впуск, ибо он реально бесшумный на минимальных оборотах, а вотздух качает очень достойно!

  • squid на два внешних интерфейса

    Начал я играться с сервером, у которого два внешних интерфейса, обязательно опишу чуть позже что и как делал, а то факт — забуду.

    И так, что надо сделать для Squid чтоб  он использовал оба внешних канала.

    Мне нужно было зарулить только определённый набор ИП адресов внутренней сети.

    Объявим 2 списка, укажем в каждом диапазон ип адресов, которые куда будем отправлять.

    acl provider1 src 10.0.0.0/24
    acl provider2 src 16.0.0.0/24Code language: Bash (bash)

    Чуть ниже скажем что нам можно что не можно

    http_access allow provider1
    http_access allow provider2Code language: Bash (bash)

    И дальше

    tcp_outgoing_address 10.1.0.1 provider1
    tcp_outgoing_address 10.1.0.2 provider2Code language: Bash (bash)

    10.1.0.1 10.1.0.2 — это внешние адреса сервера с разными интерфейсами.

    Собственно всё, после этого всё будет как нам хочется.