Pull to refresh
18
Karma
0
Rating
eisenhorn @d1m

Dev/SRE

Резервное копирование базы mysql и файлов на удаленный FTP — Python 3

Про MySQL. Зависит от сложности и размера БД, но я бы посоветовал обратить внимание на следующее:


  • В приведенном варианте восстановить БД отдельно взятого клиента так просто не получится. Лучше бекапить каждую БД отдельно.
  • Если у кого-то были процедуры, то их в бекапе не окажется.
  • mysqldump делает дамп в текстовом виде. Если БД большая, то это и долго, и много места занимает. Потому лучше вывод mysqldump сразу передавать в gzip, минуя промежуточный этап записи на диск.
  • Можно легко поймать ситуацию когда целостность данных в дампе нарушится. Потому хорошо добавить ключ --single-transaction.
  • Посмотреть percona xtrabackup. В этом случае получится делать бекап всех/некоторых БД быстро и не мешая пользователям, и с гарантированой целостностью.

Работа с Ansible — задачи с несколькими неизвестными

Сразу скажу, я не очень разбираюсь во внутренностях Zookeeper.

По идее в кластере zookeeper-ам надо вписывать в конфиг уникальное значение zoo_id (0-255).
Плагин берет указанное значение (node_zoo_id), либо в случае если оно не указано — номер хоста из группы «zookeeper».

Работа с Ansible — задачи с несколькими неизвестными

В моем случае инвенторий был статический, и выкрутился написанием плагина на питоне:

# vars_plugins/zookeeper_vars.py
from ansible import errors
from ansible import utils
import ansible.constants as C
from ansible.callbacks import display

class VarsModule(object):

    def __init__(self, inventory):
        self.inventory = inventory
        self.group_cache = {}
        self.known_zoo_ids = []

    def run(self, host, vault_password=None):
        inventory = self.inventory
        group = inventory.get_group('zookeeper')
        zk_addr = []
        if group is not None:
            hosts = group.get_hosts()
            for idx, host in enumerate(hosts):
                host_vars = host.get_variables()
                addr = host_vars.get('node_private_ip')
                if addr is None:
                    addr = host_vars.get('ansible_ssh_host', host.name)

                zk_port = host_vars.get('zookeeper_port', '2181')
                zk_addr.append({'host': addr, 'port': zk_port})

                node_zoo_id = host_vars.get('node_zoo_id', idx + 1)
                self.assign_zoo_id(host, node_zoo_id)

        result = {}
        result['zookeepers'] = zk_addr
        result['zookeepers_list'] = ','.join([':'.join([i['host'], i['port']]) for i in zk_addr])

        return result

    def assign_zoo_id(self, host, zoo_id):
        if zoo_id not in self.known_zoo_ids:
            host.set_variable('node_zoo_id', zoo_id)
            self.known_zoo_ids.append(zoo_id)
        else:
            display("warning: node_zoo_id of %s is already used!" % zoo_id, color='purple')
            new_zoo_id = int(zoo_id) + 1
            if new_zoo_id > 255:
                raise errors.AnsibleError("zoo_id (%s) for host %s is over 255!" % (new_zoo_id, host.name))
            self.assign_zoo_id(host, str(new_zoo_id))

Рубин на рельсах: продакшен и деплой для чайников

Минималистичный конфиг того же monit'а не повредит. Ну и как минимум упоминание о том что этим стоит озаботиться.

Рубин на рельсах: продакшен и деплой для чайников

Как правильно заметил farcaller, именно для этого и есть Gemfile.lock.
И нет, не может если:

1. в репозитории хранится как Gemfile, так и сгенерированный Gemfile.lock
2. и если выполняется все через bundle exec

От младшего разработчика к старшему

Одни со временем становятся старше и умнее, другие — просто старше.
«Потому что я так сказал», «потому что я лучше знаю» и прочие — не аргумент. Это следствие некого опыта, проб и ошибок. И надо докопаться до причины.
Иногда таки приходится делать плохо если «сделать хорошо» просто нет возможности (hotfix для упавшего продакшена вместо переписывания библиотеки спровоцировавшей падение, ...).

Если всё действительно упирается в заросшего мхом и непробиваемого для здравого смысла руководителя то есть же вариант сменить место работы.
И я не поверю что программисту с головой на плечах и горящими глазками тяжело найти работу.
Хотя легко поверю что это будет чертовски тяжело для замшелого программера не желающего учиться чему-то новому.

От младшего разработчика к старшему

Что бы ни говорил старший (и вероятно более опытный) сотрудник — это аж никак не отменяет необходимости думать своей головой и как минимум понимать почему посоветовали сделать именно так.

Лонч-трейлер Metal War Online

Решил еще раз посмотреть на таблички. Где говорится что скорость «АСК» — 80км/ч. Скорость «Зверя» — 40км/ч. Как, как «зверь» его догнал?

Лонч-трейлер Metal War Online

Черт. Cmd+enter работает неожиданно.

б) таки добавить 10-20 секунд чтобы закрыть явные нестыковки

Лонч-трейлер Metal War Online

Вы знаете, это звучит как «мы вот как-то так сделали, а потом сделаем лучше». В этот же минутный трейлер можно было а) не добавлять явную последовательность, а сделать набор разных боевых ситуаций

Лонч-трейлер Metal War Online

Эффекты — 4. Продуманность минутного ролика — 0.

Едет «АСК» по дороге, и тут СОВЕРШЕННО НЕОЖИДАННО сзади него обнаружился «Зверь». Метрах в 100. В пустыне. Иначе почему бы башня не была развернута в его сторону с самого начала?

И вот мы видим как артиллерия стоит в чистом поле. Где патрули и прочие наблюдательные посты? К ним через пустыню несутся шумно перестреливаясь как миниум 2 машины. По пустыне. Где их видно еще на горизонте. И по радио никто ничего не слышал, и глазками не видел. Не говоря уже о радарах. Но вот в ста метрах от артиллерии вдруг радиосвязь появилась, и внезапно «тролли» внезапно обрели способность видеть.

Далее. Подъехал «Барьер» дабы отремонтировать подбитую машину. Еще одна машина у него в прикрытии. Тут мы видим что за «зверем» ехало еще 2 машины. И тут они рванулись в чистое поле гоняться за шустриком. Перед артилерийскими установками. И это вместо того чтоб уничтожить стоящие на дороге цели.

В общем, выглядит красиво. Но пока-что не более того.

bash: Бэкап без лишнего ПО

Большой минус — история хранится с самого первого бекапа. И если в него попадет что-то лишнее и большого размера — оно там так и останется если не транкейтить git-репо периодически.

Расширяем рамки вэба. Релиз Chrome

Обновился и точно, в Lion скролы наконец-то исчезают, и вернулся фулскрин.

«Не спеши ты нас хоронить»: вторая жизнь технологий

Тут есть проблема. Когда кодишь, ты видишь расположение клавиш которые нажимаешь. Ок, для слепого метода набора — ощущаешь. Потому просто в перчатках позиционировать руки в воздухе ни на что не опираясь будет очень затруднительно.

Потому требуется комбинация из очков/шлема/etc с дополненой реальностью, чтобы сквозь обычные прозрачные очки было видно клавиатуру/… в воздухе — дабы сопостовлять положение рук с положением объектов и сразу же видеть реакцию системы на «ввод».

«Не спеши ты нас хоронить»: вторая жизнь технологий

Из хорошо забытого можно выделить шлемы виртуальной реальности — в свое время именно уровень развития железа сдерживал их.

Администрирование сети компьютеров с Ubuntu через web-интерфейс

А почему бы вместо того чтоб пускать апач от админа не взять apache2-itk в котором только этот вхост пустить из-под админа? Либо же вообще — cgi-скрипт на котором стоит setuid.

А мы пойдем другим путем. Перемещаем модель в базу данных

Если думать об этом заранее, то можно написать приложение так, чтобы создание API занимало минут 5.
Не могу сказать как в ZF, а в Rails используя RESTful routes можно уже облегчить себе жизнь, и данные запрашивать в XML/JSON/… Для простых случаев этого более чем достаточно.

XML-RPC/SOAP/… также никто не отменял для более тяжелых случаев.

Установка и настройка Linux Ubuntu 10.04 LTS под Hyper-V в Windows Server 2008 R2

hdparm, dd.

SCSI и есть синтетический.

Еще плохо что загрузочный диск может быть только IDE.

Установка и настройка Linux Ubuntu 10.04 LTS под Hyper-V в Windows Server 2008 R2

Производительность IDE-дисков у меня была просто чудовищно малой. Подключение дисков как scsi эту проблему решало, но при активном использовании ядро раз в дня два впадало в панику. Обычный LAMP-стек на ubuntu 10.04 server x86_64.

Prostopleer для iPhone, RIAA и просьбы убиться об стену

Увы, не скажу что столь активно как хотелось бы.

Information

Rating
Does not participate
Location
США
Registered
Activity