Обновить
11
0
Dmitry Kireev@AutomationD

DevOps

Отправить сообщение
Было бы здорово, если существовала такая волшебная кнопка! :) Сейчас у меня не существует решения, т.к. практически задачи не стоит, но если говорить на словах, то выходит следующее:
Ресурс mongo_node, который я описал — верхушка айсберга. За ним — стоит ruby code и другие классы puppet. Но это был всего лишь пример, глянул глубже, вот пример который лежит по второй ссылке, который я присылал в одном из комментариев выше:

    node mongo_sharding_default {

        # Install MongoDB
        include mongodb

        # Install the MongoDB shard server
        mongodb::mongod {'mongod_Shard1': mongod_instance => "Shard1", mongod_port => '27019', mongod_replSet => "Shard1", mongod_shardsvr => 'true' }
        mongodb::mongod {'mongod_Shard2': mongod_instance => "Shard2", mongod_port => '27020', mongod_replSet => "Shard2", mongod_shardsvr => 'true' }
        mongodb::mongod {'mongod_Shard3': mongod_instance => "Shard3", mongod_port => '27021', mongod_replSet => "Shard3", mongod_shardsvr => 'true' }
        mongodb::mongod {'mongod_Shard4': mongod_instance => "Shard4", mongod_port => '27022', mongod_replSet => "Shard4", mongod_shardsvr => 'true' }

        # Install the MongoDB Loadbalancer server
        mongodb::mongos {
            'mongos_profile':
                mongos_instance      => 'mongoproxy',
                mongos_port          => 27017,
                  mongos_configServers => 'mongo1.my.domain:27018,mongo2.my.domain:27018,mongo3.my.domain:27018'
        }
    }

    node 'mongo1.my.domain',
        'mongo2.my.domain',
        'mongo3.my.domain' inherits mongo_sharding_default {

        # Install the MongoDB config server
        include mongodb
        mongodb::mongod {
            'mongod_config':
                mongod_instance  => 'profileConfig',
                mongod_port      => '27018',
                mongod_replSet   => '',
                mongod_configsvr => 'true'
        }
    }

    node 'mongo4.my.domain' inherits mongo_sharding_default { }


Здесь создается базовый тип сервера монго при помощи inherits mongo_sharding_default наследуем эти параметры на нужные хосты, а далее дополнительно ставим на те же хосты конфиг ноды.

На 4й сервер ни mongos ни конфиги не ставятся.

Я это не проверял, но по мне вполне удовлетворительная конфигурация.

Как вы добавите шард в кластер, даже если кол-во нод не будет меняться? Как вы настроите реплику?

Как добавлять шард в кластер — добавляем в базовое описание:

mongodb::mongod {'mongod_Shard5': mongod_instance => "Shard5", mongod_port => '27023', mongod_replSet => "Shard5", mongod_shardsvr => 'true' }


Я ни разу не использовал chef, поэтому ни в коем случае не холиварю здесь. Знаю о нем только по-наслышке и из недостатков лично для меня вижу (если это не так, буду рад услышать опровержение):

— Puppet декларативный, мне проще думать о конечном состоянии сервера а не о пути к нему, когда я внедряю новый конфиг — девелоперы не запариваются о том, в каком состоянии сейчас находится сервер. Отсюда другой подход, в том числе на первый взгляд бедном DSL. Если рассматривать DSL как «умный» .ini или .conf файл, тогда все встает на свои места и heavy lifting делается в самом провайдере, а не в манифесте, что увеличивает читабельность кода.

Типичное сравнение:

service "example_service" do
  action :start
end

и

service {"example_service":
  ensure => running,
}


— Уровень абстракции «ресурс» позволяет мыслить на этом уровне, забывая местами о типе операционной системы, что очень удобно и позволяет сильно унифицировать код для инфраструктуры-зооопарка (У меня Windows + CentOS + Ubuntu) — в chef это тоже поддерживается и тот же пример со службой сработает, но для меня концепт «продвинутого конфигурационного» выглядит удобнее чем «инструкции к применению», но опять же это все очень субъективно. На сайте puppet labs этот DSL называют «Человеческий интерфейс» :)
Так, вот, говоря о конфигурации mongo кластера — я буду уверен в результате, если скажу «Должно быть вот так», вместо «Нужно сделать последовательность действий» (а какой результат Вы хотели)?..
Все остальное очень схоже, и особенно сравнивать технологии смысла нет =)
Все это ИМХО человека, который почти 3 года пишет инфраструктуру на puppet и не пробовал, но слышал об особенностях chef.
Это явно проще, но в puppet, как оказалось такое можно сделать при помощи puppetdb и puppetdbquery.

Кстати, где chef хранит информацию о текущем состоянии той или иной конфигурации?
А чем это лучше чем DropBox?
Количество нод в реплике есть смысл увеличивать только когда нужно много read либо redundancy, чаще проще масштабировать «в ширь» и добавлять шарды, что увеличит не только read но и write производительность, это если я правильно Вас понял.
Но основной вопрос не в этом, о каком способе авто-масштабировании идет речь? Из программного кода? На виртуальные инстансы? Если да, то это будет чуть сложнее, но не на много: нужно интегрироваться с foreman или puppet dashboard, используя их api проделывать тоже самое, устанавливая соответствующие параметры для ресурса mongo_node. Но когда есть настоящее авто-масштабирование, например на EC2, это не должно быть проблемой поднять ноду с нуля.

Я правильно понял вопрос?
Допустил пару ошибок, вот что в идеале имелось в виду:
node "mongo-1a" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"  #Я из awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_1
	  rs => rs_1_sh1, #Я часть репликасет rs_1_sh1
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"  
	  shard => sh_2,
	  rs => rs_1_sh2,
	}
}

node "mongo-1b" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"  
	  shard => sh_1,
	  rs => rs_1_sh1,
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"  
	  shard => sh_2,
	  rs => rs_1_sh2,
	}
}


node "mongo-2a" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"  
	  shard => sh_1,
	  rs => rs_2_sh1,
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"
	  shard => sh_2,
	  rs => rs_2_sh2,
	}
}

node "mongo-2b" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"
	  shard => sh_1,
	  rs => rs_2_sh1,
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"
	  shard => sh_2,
	  rs => rs_2_sh2,
	}
}
Оооочень разумный комментарий — Спасибо!

По поводу «красивых» примеров — да, Вы отчасти правы. Но все преимущество puppet в том, что весь heavy-lifting прячется в коде модуля, который написан на ruby, и очень часто конечными точками, с которыми работают девелоперы/админы являются манифесты на puppet DSL, где обычно задаются параметры ресурса. Поэтому такой ресурс вполне имеет смысл.

Вот идеальный вариант (mock code):
node "mongo-1a" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_1
	  rs => rs_1, #Я часть репликасет rs_1_sh1
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_2
	  rs => rs_1, #Я часть репликасет rs_1_sh2
	}
}

node "mongo-1b" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_1
	  rs => rs_1, #Я часть репликасет rs_1_sh1
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_2
	  rs => rs_1, #Я часть репликасет rs_1_sh2
	}
}


node "mongo-2a" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_1
	  rs => rs_1, #Я часть репликасет rs_2_sh1
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_2
	  rs => rs_1, #Я часть репликасет rs_2_sh2
	}
}

node "mongo-2b" {
	mongo_node {"data_27001":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_1
	  rs => rs_1, #Я часть репликасет rs_2_sh1
	}

	mongo_node {"data_27002":
	  type => "awesome_cluster_type"  #Я - часть кластера awesome_cluster_type
	  shard => sh_1, #Я - часть шарда sh_2
	  rs => rs_1, #Я часть репликасет rs_2_sh2
	}
}

А сам модуль уже позаботится о том, чтобы все встало куда нужно (вот он и heavy-lifting) — как раз там будут все циклы и условия.

Сейчас я делаю всю конфигурацию вручную (не так часто поднимаются новые кластеры). Но каждый раз когда я читаю (свою же) документацию — это огромная головная боль не ошибиться в портах, так-как у меня на одном сервере 3 конфиг ноды от другого шарда, mongos, arbiter и 3 дата-ноды :)

Посмотрел на существующие решения и на мой первый взгляд установка всех компонентов на сервер при помощью puppet достаточно тривиальная задача (есть puppetlabs/mongodb и echocat/puppet-mongodb).

Основная сложность в синхронизации нод между собой, сейчас мы используем foreman, и для выполнения этой задачи, возможно, потребуется использовать node.pp (как в примере выше) с описанием всех нод разом — удобнее портировать в облако или на другой новый кластер, к примеру.

Также описание кластера в виде конфигурации puppet явно поможет улучшить понимание кластера другими разработчиками.

Как только появится задача по поднятия еще одного кластера (думаю достаточно скоро) — зафиксирую все в puppet, обещаю :)
Спасибо за ответ, интересно почитать Ваше мнение. Мое мнение, если хотите, что puppet не чуть не уступает chef, т.к. весь функционал написан на том же ruby, с дополнением приятного DSL для людей, которые не хотят вникать в то, что конкретно puppet делает для достижения цели, а хотят сфокусироваться на самой конфигурации и конечном состоянии инфраструктуры (ИМХО, конечно:). Проверено на .net девелоперах, которые уже сами создают свои манифесты и конфигурируют IIS хосты при помощи puppet — для них это как INI файл =)
Видел статьи epam о puppet, как считаете, где usecase для puppet а где для chef?
Интересно в технологическом плане. Скажите, а сколько у Вас занял весь процесс от начала и до возможности наблюдать счастливых юзеров?
Причиной того, что Windows и MacOS more user-friendly — они все коммерческие продукты, что еще раз подтверждает что деньги правят миром, и сейчас (сегодня) это сильнее чем желание создать бесплатную свободную ОС.
Кстати говоря, для большинства пользователей Linux — это бесплатная ОС. Что случится тогда, когда Windows станет бесплатна?
Честно? не люблю узколобые минуса.
Кажется в этом топике люди ставят Linux и отписываются «Я перевел на Linux всю семью». А ведь Linux — это не панацея, тем более в мире бизнеса.
Прошу прощения людей, если задел религиозные чувства, но я живу в стране где время — это все, и именно от времени зависит сколько ты заработаешь. Для меня рабочая машина — это инструмент, который должен быть 99.99% надежен, как мое SLA. В России — несколько по-другому, можно потратить часик-другой на исправление бага, если вцелом рабочая машина будет относительно недорогой — это вполне нормально: другое отношение к клиентам, другой уровень срочности и важности (и если Вы не работали в штатах, огромная просьба оставить свое мнение по этому вопросу при себе). А теперь доводы для тех, кто яро против MacOS (типа: «Изыйди, нечистое произведение Apple, мы против!):
Во-первых, Вы мне ответьте, зачем мне ставить Linux на мой Mac в качестве основной системы, если у меня есть бесплатный OSX Mavericks, который имеет намного больше преимуществ чем Linux (хотя бы потому что это не community)? Я этого не понимаю, честно.
Во-вторых, посмотрите как работает трекпад в убунту, с этим просто невозможно жить (кто-то скажет: „Это проблема Apple и то что у них закрытый драйвер“ — и будет прав). Весь смысл что мы (и вы тоже) живем в рыночном мире, и для работы, опять же, нужен хороший инструмент, а не дешевая железка, которая ломается.
В-третьих, все преимущества Linux (Desktop/Headless — для меня не важно) я получаю через виртуализацию на том же macbook pro.
Ах да, Macbook Pro Retina 15» у меня рабочий так что выходит что выбора железной платформы у меня нет.

Я бы сравнил Desktop Linux сегодня с ТазОМ с кустарно-установленным движком от самолета: ездит быстро, но иногда откручиваются крепления сидений.

Конечно, как всегда, я рискую получить минус от очередного «инженера» который перевел семью на Linux, так как этот топик явное их скопление. Моя основная мысль — перестаньте «чисто-по-русски» использовать шаблоны: кто-то один сказал «Linux — хорошо» — все побежали ставить убунту а потом кричать об этом. Вероятнее всего это был инженер по поддержке серверов, либо десктопов в гос. учреждении, который не упомянул чем жертвуют сотрудники и техподдержка такого парка машин, а знакомый админ подхватил — и понеслось. Поставили — отлично, работает — еще лучше. А вот дальше включаются шаблоны: «теперь везде Linux, теперь вообще ничего не видим» — точно также размышляют наши власти (и не только про Linux, история имеет не мало примеров), для того, чтобы «обхитрить весь мир забесплатно». Думайте cвоей головой, пожалуйста, и тогда Linux будет стоять только там, где он приносит деньги и счастье людям (или просто счастье или просто деньги — кому как нравится).
Класс, рад что пригодилось!
… Как я с Вами согласен. Я еще добавлю, что когда есть выбор между Windows, Linux и MacOS лично я выберу MacOS, потому что работаю я с Linux на серверах. Как сказал один мой товарищ: «В данный момент мне надо работать, а не баги файлить в Open Source»
Статья по большому счету для поднятия флейма и холиваров.
Сам давно использую Linux на серверах, а рабочая машина — MacOSx. И стоит Ubuntu в Parallels. Так вот, я ее использую только через SSH, так-как те проблемы Desktop, которые были упомянуты в комментариях, сводят на нет всю бесплатность.

И есть огромная «опасность» что вскоре бесплатные MacOS и Windows могут потеснить Linux с десктопов. В итоге, для конечного пользователя получится картина:

Цена:
Linux — бесплатно
Windows — бесплатно
MacOSx — бесплатно

Поддержка Производителя
Linux — Community / Canonical (платно)
Windows — Community + Ограниченная поддержка производителя + Поддержка вендора ПК
MacOS — Полная поддержка производителя + Community

Открытость
Что это такое?
Лично я бы хотел чтобы меня сразу переключали на Tier 2 или даже Tier 3.
Я бы даже отправил им свои сертификаты, чтобы меня не мурыжили на первой линии!
От Tier 1 бессмысленно ждать осмысленных вопросов =)
Как же приятно получать минус от человека, который даже не удосужился привести контр-аргумент :)
Я не по наслышке знаком с тем, как работает TimeWarner cable — в России, поверьте, первая проблема именно в руководстве, которое нанимает персонал с таким уровнем (их можно понять, за такие-то деньги), а вторая — в том, что то же руководство не считается с рынком и просто не хочет заполнять базы Tier 1 для пользователей той же Ubuntu (которые, как минимум, могли бы избежать ступора после «Я: У меня линукс. Убунту 10.x»)

Еще раз повторюсь, я не защищаю неквалифицированных работников которые должны знать как траблшутить Ubuntu/Fedora, я защищаю тех сотрудников, которые не должны по своей природе знать что это такое, а их начальство ставит на такие должности, а потом новоиспеченные Ubuntu-гении им названивают.

Ничего личного, но я защищаю таких сотрудников от троллей, которые поставили себе Ubuntu и понимая что на их провайдере за $10 в месяц эта ОС вряд ли будет поддерживаться — звонят им и требуют от Tier 1 пересобрать ядро (да, для них за их зарплату это именно так и звучит). Выйдите из вакуума, в штатах такой же канал стоит раза в 3 больше, догадайтесь почему?

А то что Вы минусуете — это нормально, и всего лишь означает что Вы отрицаете теорию рыночных отношений. Это работает просто: есть пользователи Ubuntu — есть саппорт. Нет пользователей — нет саппорта. Мыслите чуть шире, видимо пользователей Ubuntu не так много что руководство даже не удосужилось обучить сотрудников.

А теперь, уважаемый, минусующий, сравните поддержку домашнего интернета на котором Вы находитесь и поддержку Билайн бизнес, к примеру. Я могу привести совершенно другой опыт (в дополнению к «умникам», которые еще вчера поставили Ubuntu на все компьютеры дома и считают себя генииям):

2010 год, Небольшая (менее 100 офисных сотрудников) компания такси в Туле, 3 сервера на CentOS, на одном из них Asterisk. На этапе подключения объекта к интернету и телефону была необходимость завести 2 DID от билайна, а также дополнительно один сотовый номер от мегафона через SIP для экономии средств. Так вот, на этапе настройки Asteriska я был с их спецом на телефоне и мы вместе настраивали все Inbound и Outbound правила, настроили SIP trunk для мегафина после чего я еще несколько раз звонил им, когда возникали какие-то вопросы с маршрутизацией и они всегда помогали. И это 2010 год!
А рассказываю я это для того, что спецы в России есть, просто мы «не умеем их готовить».

Все еще отрицаете теорию рынка? — Тогда ставьте еще один минус.
За что минусуем?
Не соглашусь, в штатах абсолютно тоже самое. Дело не в том, что специалистов нет, а в том, что при подборе персонала используется статистика. И ради 1.73% никто не будет нанимать в штат Tier 1 поддержки людей с такими знаниями. Это просто не выгодно экономически для управляющих, которые для принятия решений руководствуются таблицами статистики как по мне — проблема именно в этом.
Второй момент — «Поддерживаемость» операционной системы. Linux обладает свойством Tim Toady, что означает причин проблемы может быть несколько, и многие могут быть авторскими (скрипт демона, написанный на «коленке»). Тогда как в Windows и (подчеркиваю) в стандартизированных Enterprise Linux системах большинство проблем и их решений задокументировано (а именно так работает Tier 1). Версия по поводу «Проверяют по скриншотам» — очень близка с правде, все более-менее современные службы поддержки работают по ITIL, так-как это наиболее эффективно. Поэтому если Вы звоните в Enterprise Tier 1 и жалуетесь что у Вас на сервере под RHEL 5 не поднимается openvpn туннель с последней версией tap драйвера — они Вам посоветуют обновиться до версии с более новым ядром либо использовать старый openvpn, так-как это было когда-то задокументировано. Если же Ваша проблема уникальна — грамотный Tier 1 Вас должен эскаллировать выше, где Вашу проблему решат и задокументируют ее.
Так что я не до конца понимаю Ваших изумлений — это нормально, если Вы попали в 1.73%. Попробуйте позвонить в техподдержку в России, если у Вас будет Mac OS, думаю ситуация будет лучше (может и не на много), в то время как в штатах Вам, вероятнее всего, помогут/не откажут в Tier 1. Не помогает Tier 1 — просите эскаллации, и все будет хорошо (ведь кто-то строил эти сети, значит спецы есть:)
Добро пожаловать в сборище экспертов-космологов.
Прекрасная тулза. Не забывайте ставить шрифты Monaco или Consolas, и приятная работа Вам обеспечена.

Доступна через репозиторий chocolatey.org.

Информация

В рейтинге
Не участвует
Откуда
New York, New York, США
Дата рождения
Зарегистрирован
Активность