• Как освободить место от удалённых данных Cassandra?

    @jonasas Автор вопроса
    Сам разобрался в вопросе.
    Cassandra пишет поступившие данные в CommitLog (ПЗУ) и MemTable (ОЗУ).
    Периодически данные из memTable сбрасываются в SSTable'ы (ПЗУ).

    Очищать удалённые данные нужно в двух местах: в SSTable и CommitLog.

    Для CommitLog есть настройка commitlog_total_space_in_mb. Cassandra сама будет чистить. Чем меньше мы держим CommitLog, тем больше вероятность потерять данные при падении ноды.

    Для SSTable. Cassandra периодически проводит ревизию, объединяя SSTable'ы в одну. Процесс называется compaction (упаковка). Настроить его можно тремя стратегиями: SizeTieredCompactionStrategy, LeveledCompactionStrategy и DateTieredCompactionStrategy.

    • SizeTieredCompactionStrategy -- таблицы будут объединяться, когда достигнут значения min_threshold (настройка Column Family)
    • DateTieredCompactionStrategy -- понятно из названия, по TTL.
    • LeveledCompactionStrategy -- стратегия создаёт SSTable'ы фиксированного, относительно небольшого размера (160Мб по умолчанию), которые группируются на уровни. Каждый уровень (L0, L1, L2 итд) в 10 раз больше предыдущего. Когда SSTables уровня полностью заполняются, они мержутся в более старший уровень (тут и происходит очистка устаревших данных). Этот уровень обеспечивает наибольшую скорость чтения. На скорость записи уровни не влияют.
    Ответ написан
    Комментировать
  • Visual Studio и MS SQL на виртуалке?

    petermzg
    @petermzg
    Самый лучший программист
    Если виртуалке выделить гигабайт 8 памяти, то даже не заметишь, что в ней работаешь
    Ответ написан
    Комментировать
  • Как настроить сбор разных логов с помощью Logstash из одного файла?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Все зависит от формата логов.
    Но в базово: в секции filter добавляйте к каждой из груп логов уникальное поле, например server. Далее в секции output - прописываете тип: document_type => "server-%{server}"
    Ответ написан
    2 комментария
  • Нужны ли вам обучающие ролики по Mikrotik?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    нужны!
    Ответ написан
    Комментировать
  • Как узнать все внешние ip сервера из PHP?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    curl ifconfig.me

    Дальше не заморачивайтесь. Никто не настраивает исходящую маршрутизацию на несколько адресов, очень мало людей использует dual-wan.
    Ответ написан
    4 комментария
  • Как однократно добавить строку в файл с помощью Ansible?

    @aardvarkx1
    Сейчас попробовал добавить строку в файл с помощью lineinfile и все работает как и должно. Строка добавляется и при повторном запуске не происходит повторного добавления.
    Вот пример как описывал для ansible.
    - name: insert line in file
    lineinfile: dest=/tmp/ans insertafter="^bar" line="foo"
    Ответ написан
    Комментировать
  • Как правильно использовать Docker для веб разработки?

    zvd
    @zvd
    Software developer interesting in DevOps
    Добрый день.
    Все, как вы их назвали, «задачи» должны быть по разным контейнерам.

    1. Что брать за базовый образ?
    Что используете то и берите. Используете в работе Debian? Берите Debian ( https://registry.hub.docker.com/_/debian/ )
    2. Чтобы создать свой базовый образ который будете в дальнейшем использовать для приложения, вот вам пример Dockerfile:
    #
    # MyBaseimage Dockerfile
    #
    
    # Pull base image.
    FROM ubuntu:14.04
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    RUN apt-get update
    RUN apt-get upgrade -y
    
    RUN apt-get install -y language-pack-en
    ENV LANGUAGE en_US.UTF-8
    ENV LANG en_US.UTF-8
    ENV LC_ALL en_US.UTF-8
    
    RUN locale-gen en_US.UTF-8
    RUN dpkg-reconfigure locales
    
    RUN echo "Etc/UTC" > /etc/timezone
    RUN dpkg-reconfigure -f noninteractive tzdata
    
    RUN apt-get install -y build-essential
    RUN apt-get install -y python python-dev python-setuptools python-pip python-virtualenv
    RUN apt-get install -y libxml2-dev wget
    RUN apt-get install -y libpcre3
    RUN apt-get install -y libpcre3-dev
    RUN apt-get install -y libssl-dev
    RUN apt-get install -y libncurses5-dev
    RUN apt-get install -y git git-core
    RUN apt-get install -y libpq-dev
    
    # install nginx
    RUN apt-get install -y software-properties-common python-software-properties
    RUN apt-get update

    Собрать image в директории где у вас лежит Dockerfile
    docker build -t your_docker_account/your_baseimage .

    3. Dockerfile для сборки вашего образа уже с приложением
    #
    # MyApp Dockerfile
    #
    
    # Pull base image.
    FROM your_docker_account/your_baseimage
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    # Set instructions on build.
    RUN virtualenv /env
    ADD ./ /code
    
    RUN cd /code; /env/bin/python setup.py install
    RUN cp /code/config/config.yml.docker_example /etc/code/config.yml
    
    # Expose ports.
    EXPOSE 8484
    WORKDIR /code
    CMD ["/env/bin/python", "app.py"]

    4. Собрать образ с приложением
    docker build -t your_docker_account/your_app_container .

    5. Запустить контейнер с БД, в качестве примера PostgreSQL
    docker run -p :5432:5432 --name my_postgresdb_container -e POSTGRESQL_DB=mydb_name -e POSTGRESQL_USER=mydb_user -e POSTGRESQL_PASS=super_secret_password -d kamui/postgresql

    для mariadb аналонично, контейнеры ищем здесь: https://registry.hub.docker.com/
    6. Запустить контейнер с вашим приложением, пример:
    docker run -d -p :5000:5000 \
      --name my_app_container \
      --link my_postgresdb_container:postgresdb \
      -e DOCKERDB_ENV_POSTGRESQL_DB=mydb_name \
      -e DOCKERDB_ENV_POSTGRESQL_USER=mydb_user \
      -e DOCKERDB_ENV_POSTGRESQL_PASS=super_secret_password \
      your_docker_account/your_app_container

    7. Подключиться к запущенному контейнеру с приложением
    docker exec -it your_app_container /bin/bash
    8. Читать stdout запущенного приложения в контейнере
    docker logs -f your_app_container

    + Чтобы автоматизировать запуск всех необходимых контейнеров берите Docker Compose ( https://docs.docker.com/compose/ )
    Пример файла конфигурации:
    your_app:
      build: .
      links:
        - postgresdb
      ports:
        - "5000:5000"
      environment:
        DOCKERDB_ENV_POSTGRESQL_DB: mydb_name
        DOCKERDB_ENV_POSTGRESQL_USER: mydb_user
        DOCKERDB_ENV_POSTGRESQL_PASS: super_secret_password
    postgresdb:
      image: kamui/postgresql
      ports:
        - "5432:5432"
      environment:
        POSTGRESQL_DB: mydb_name
        POSTGRESQL_USER: mydb_user
        POSTGRESQL_PASS: super_secret_password

    И теперь вместо пунктов 5 + 6 где мы запускали контейнеры мы можем всё стартануть одной командой
    docker-compose up

    + можно смонтировать код в контейнер и разрабатывать непосредственно в docker'контейнере.
    Надеюсь чем-то вам помог.
    Ответ написан
    3 комментария
  • На каком оборудовании можно реализовать корректное переключение клиента с точки доступа с более слабым сигналом?

    ifaustrue
    @ifaustrue
    Пишу интересное в теллеграмм канале @cooladmin
    Вчера у себя воткнул CapsMan v2 с управлением точками и бесшовным роумингом. Бегал по оифсу с включённым скайпом, 80% переключений вообще без потерь пакетов, часть заставляют картинку пропускать от 200 до 1000 миллисекунд (ну то есть от брык дёрнулось, до хоп и подвисло на секунду). Точек у меня десять, офис 1000 кв.м.

    Контроллер стоит на корневом маршрутизаторе 1100AH (но нагрузка совсек никакая). Точки юзаю вот такие routerboard.com/RB433GL

    Но можно собрать существенно бюджетнее. Если нужно готов помочь.
    Ответ написан
  • Простая установка VPN на Debian 7?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    Самый простой вариант без шифрования.

    Ставим пакет
    aptitude -y install pptpd
    Правим конфиг
    nano /etc/pptpd.conf
    Сетка любая неиспользуемая, можно повесить на лупбэке.
    option /etc/ppp/pptpd-options
    logwtmp
    localip 172.16.0.1
    remoteip 172.16.0.2,172.31.255.254

    Еще 1 конфиг
    nano /etc/ppp/pptpd-options
    В него пишем
    auth
    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128
    ms-dns # Указываем DNS-сервер провайдера
    ms-dns # Указываем второй DNS-сервер провайдера
    proxyarp
    nodefaultroute
    #debug
    logfile /var/log/pptpd.log
    lock
    nobsdcomp
    mtu 1400
    mru 1400


    И конфиг с логинами-паролями
    nano /etc/ppp/chap-secrets
    В нем создаем юзеров по типу:
    Логин тип подключки пароль какой IP отдать
    u001 pptpd ozQui1Yr 172.16.0.12
    Тут мы для пользователя u001 указали, что он будет иметь статический айпи адрес 172.16.0.12 и пароль ozQui1Yr
    Если нужно выделять пользователям динамические айпи адреса, вместо 172.16.0.12 указываем * (Звёздочку).

    Разрешаем форвардинг
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf


    Разрешаем протокол GRE:
    iptables -A INPUT -p gre -j ACCEPT
    Раздаём NAT на нашу подсеть (если отдаем серые адреса и нужен доступ в инет через ВПН):
    iptables -t nat -A POSTROUTING -s 172.16.0.0/12 -j MASQUERADE

    Обеспечиваем автоматическую установку размера сегмента в TCP-заголовках SYN- и SYN,ACK-пакетов в соответствии с минимальным из известных нашему шлюзу значений MTU на пути следования пакета (Надеюсь правильно и более понятно рассказал):
    iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-ms

    Запускаем демон pptpd
    /etc/init.d/pptpd start

    Если что не так включаем дебаг и смотрим в
    tail -n 200 -f /var/log/syslog

    А так создаем в винде подключение VPN тип указываем PPTP и радуемся жизни.
    Тут жутко не удобный реддактор, писал по памяти, если чего забыл - звиняйте.
    Ответ написан
  • Как настроить L2TP+IPSec между 2 роутерами Mikrotik?

    ifaustrue
    @ifaustrue
    Пишу интересное в теллеграмм канале @cooladmin
    Ух, много написали, потому я мельком только глянул.

    Итак, если вам нужно соеденить два офиса, чтобы трафф из сети 192.168.1.Х/24 ходил в сеть 192.168.2.Х/24 то в принципе L2TP туннель вам в этом случае не требуется, достаточно создать туннель на уровне IPSec (что вы кстати и делаете у себя в настройках), никаких маршрутов и политик в этом случае не нужно. IPSec в туннельном режиме сам создаст прозрачный для ROS туннель и будет заворачивать в него трафик.

    Порядок действий такой:
    1. Создаём на каждом МК IPSec Peer, где адрес пира - удалённый офис, с разрешением добавлять политики трафика.
    2. Создаём на каждом МК IPSec политики, где сеть отправления - локальная сеть; сеть назначения - удалённая сеть; пир отправления - внешний адрес этого МК; пир назначения - удалённый белый адрес пира, тот же что настроен в соседней вкладке.
    3. В правилах NAT делаем Аццес правило для трафика туда сюда между этими сетями.

    В роутинг листе должно быть пусто. Если появятся строчки обмена ключами - всё заработало.
    Всё что нужно, но наглядно в статье Site to Site IpSec Tunnel
    Ответ написан
  • Почему не запускается cron скрипт?

    Indermove
    @Indermove Автор вопроса
    C#/.NET back-end разработчик
    Все нашел ответ на свой вопрос:

    1) Кронтаб нужно запускать так: sudo crontab -e - это нужно чтобы cron запускал скрипты из под root.
    2) Инструкции для cron должны быть такими. Нужно обязательно писать bash перед указанием пути к скрипту. После указания пути к скрипту дописать >/dev/null 2>&1
    Пример:
    0 1 * * * bash /bin/bash /usr/share/script.sh >/dev/null 2>&1
    0 2 * * * bash /bin/bash /usr/share/script2.sh >/dev/null 2>&1
    * * * * 1 bash /bin/bash /usr/share/script3.sh >/dev/null 2>&1

    #!/bin/bash
    rsync --archive /home/share --delete /mnt/backup/neon_backup
    rsync --archive /var/www/html/vtgr --delete /mnt/backup/neon_backup

    3) Сами скрипты действительно должны быть лишены sudo, так как и так запускаются из под пользователя root.
    Пример:
    #!/bin/bash
    
    cd /mnt/backup/neon_backup/MySQL_backup
    mysqldump -u root -pnppwd --all-databases > mysql_backup.sql
    set > /tmp/script-environment
    tar cvjf back_mysql.tar.bz2 mysql_backup.sql
    Ответ написан
    Комментировать