Max
13.04.2018
20:01:15
не могу порнять как назначить ноде роль арбитра (чтобы только выборами занималась и не учавствовала в синхронизации данных)
ptchol
13.04.2018
20:17:04
там mongodb_replset
там есть arbiter
Max
13.04.2018
20:29:02
@ptchol спс - нашел.
А нету примера как с данными в хаира ?
Google
Max
13.04.2018
20:39:18
mongodb::server::replset: 'rs0'
mongodb::replset::rs0:
members:
- '10.10.10.183:27017'
- '10.10.10.84:27017'
- '10.10.10.215:27017'
arbiter: '10.10.10.215:27017'
так не конает. Может нужно класс новый дернуть из профайла? Я просто пытаюсь обойтись только хаирой
dk
13.04.2018
21:12:31
А кто лукапит mongodb::replset::rs0?
https://github.com/voxpupuli/puppet-mongodb#provider-mongodb_replset
Судя по доке - надо патчить :3
Max
13.04.2018
21:33:45
это мой фейл
mongodb::server::replset: 'rs0'
mongodb::server::replica_sets:
rs0:
members:
- '10.10.10.183:27017'
- '10.10.10.84:27017'
- '10.10.10.215:27017'
arbiter: '10.10.10.215:27017'
C тестов класса вижу:
context 'when setting up replicasets' do
describe 'should fail if providing both replica_sets and replset_members' do
let(:params) do
{
replset: 'rsTest',
replset_members: [
'mongo1:27017',
'mongo2:27017',
'mongo3:27017'
],
replica_sets: {}
}
end
it { expect { is_expected.to raise_error(%r{Puppet::Error: You can provide either replset_members or replica_sets, not both}) } }
end
describe 'should setup using replica_sets hash' do
let(:rsConf) do
{
'rsTest' => {
'members' => [
'mongo1:27017',
'mongo2:27017',
'mongo3:27017'
],
'arbiter' => 'mongo3:27017'
}
}
end
Но не могу описать структуру правильно для хаиры
'rsTest' => {
'members' => [
'mongo1:27017',
'mongo2:27017',
'mongo3:27017'
],
'arbiter' => 'mongo3:27017'
}
dk
13.04.2018
21:41:07
mongodb::server::replset_config:
rs0:
...
Max
15.04.2018
09:15:56
нет. Не было пока поддержки этого всего (арбитров).
Есть пулл-реквест, так что в след версии возможно добавлят. Пока что создание кластера из нод.
dk
15.04.2018
09:17:32
Вообще, судя по наличию params.pp - модуль довольно древний, его давно отрефакторить пора
Max
15.04.2018
09:18:36
ну после создания кластра нету арбитра (ноды сами решают кто из них мастер или слейв).
Древний - но рабочий) Думал что есть уже все из коробкы (наделся). Но пока этого достаточно. Рефактором там занимаются, но пока не выкотили новую версию
а самому писать - времени нету )))
dk
15.04.2018
09:21:01
Можно собирать статусы кластера в факты и управлять кластером в зависимости от того, что было получено в этих самых фактах (экспортируемые ресурсы подсобят). Правда, оно будет работать только при запущенных с ранинтервалом агентами
Google
dk
15.04.2018
09:21:43
Max
15.04.2018
09:23:44
@dkguest угу. Мне пока достаточно развертвывания кластера. Арбитра я и сам добавить могу. Пока нужно автоматизировать бутстрап кластера. Вылизывать буду немного позже. Буде держать в курсе.
ptchol
15.04.2018
09:44:50
есть всё в модуле.
Max
15.04.2018
09:47:44
@ptchol да. я в курсе. Не получилось добавить ее использую паппет - монгодб модуль. Модуль подымает кластер с 3 нодами (нету ArbiterOnly true)
Пытался через хаиру сделать кластер с 3 нодами (1 М, 1 С, 1 Арбитр)
ptchol
15.04.2018
09:48:40
и как ты делал и каким моуделм ?
Max
15.04.2018
09:49:02
https://forge.puppet.com/puppet/mongodb/readme
mongodb::server::replset: 'rs0'
mongodb::server::replset::members:
- '10.10.10.183:27017'
- '10.10.10.84:27017'
- '10.10.10.215:27017'
mongodb::server::replset: 'rs0'
mongodb::replset::rs0:
members:
- '10.10.10.183:27017'
- '10.10.10.84:27017'
- '10.10.10.215:27017'
arbiter: '10.10.10.215:27017'
eplset_members так же - создаются только 1 М 2 С
раньше был признак Master: true - можно было сказать, что одна нода мастер - все остальные слейвы. Но уже деприкейтер - значит нету смысла сетить в тру
ща сброшу что из тестов было
ptchol
15.04.2018
09:52:03
class mongodb::server {
replset => 'rsmain',
replset_config => { 'rsmain' => { ensure => present, members => ['host1:27017', 'host2:27017', 'host3:27017'] } }
}
там пример вот такой.
если не веришь примеру https://github.com/voxpupuli/puppet-mongodb/blob/master/manifests/server.pp
откуда ты все эти параметры вытащил ?
Max
15.04.2018
09:52:38
context 'when setting up replicasets' do
describe 'should fail if providing both replica_sets and replset_members' do
let(:params) do
{
replset: 'rsTest',
replset_members: [
'mongo1:27017',
'mongo2:27017',
'mongo3:27017'
],
replica_sets: {}
}
end
it { expect { is_expected.to raise_error(%r{Puppet::Error: You can provide either replset_members or replica_sets, not both}) } }
end
describe 'should setup using replica_sets hash' do
let(:rsConf) do
{
'rsTest' => {
'members' => [
'mongo1:27017',
'mongo2:27017',
'mongo3:27017'
],
'arbiter' => 'mongo3:27017'
}
}
end
из тестов )
хотя - не факт что тесты просто не забыли переписать или выпилить
вот есть этот replica_sets: {}
ptchol
15.04.2018
09:53:57
горе от ума
Google
Max
15.04.2018
09:54:05
от туда же
master
Set to true to configure the current instance to act as master instance in a replication configuration. Default: False Note: deprecated – use replica sets
почему) ?
ptchol
15.04.2018
09:54:41
да хз. Я буквально неделю назад выпиливал этот модуль, всё там ок работает
Max
15.04.2018
09:54:56
а есть примеры с арбитром?
у меня ситуация какая - кластр работает - при падении свич делается. Но когда старый мастер возвращается - свич обратно не происходит
ptchol
15.04.2018
09:56:51
и не должен
у нас через врапер было сделано но как то примерно так
::services::mongodb::server::rs:
drm:
members:
- drmdb1-dl.:27017
- drmdb2-sd.:27017
- meta1-dl.:27017
arbiter: meta1-dl.:27017и внутри класса это пробрасывалось целиком
mongodb_replset { $server['replset']: * => $rs[$server['replset']] }
}
dk
15.04.2018
10:27:51
А у вас точно ванильный модуль с форджа? Может кто-то там уже сделал его локальным и накатил патчи с пулреквестов (а может и своих правок внес)
ptchol
15.04.2018
10:29:59
ваниальный.
я его еще апдейтил перед тем как снести, когда мучался с той проблемой хиеровой
и обнаружил что у нас изначально был модуль паппетлабсовый который депрекейтнули
и я накатил этот, от вокспопули
dk
15.04.2018
10:33:36
https://github.com/voxpupuli/puppet-mongodb/blob/master/lib/puppet/type/mongodb_replset.rb
Вообще, да, тут есть такое
Но фиговая документация, что приходится по исходникам лазать в поисках параметров :)
Max
15.04.2018
10:35:29
да я перепробывал кучу этих самых параметров ) к примеру :
ongodb::server::repl_set -> выругается что стринг надо эму (ожидает стрингЩ, а получает структуру)
и так далее
но сейчас попробую этот вариант
у меня в коде:
class { 'mongodb::server':
replset => 'rs0',
}
class {'mongodb::replset':
sets => { 'rs0' => { ensure => present, members => [ '10.10.10.183:27017', '10.10.10.84:27017', '10.10.10.215:27017'], arbiter => '10.10.10.215:27017' } },
}
в ноды признак Арбитра появляется?
ptchol
15.04.2018
10:38:57
ща посмотрю в с тарых репортах если осталось
"arbiters" : [ "meta1-dl.:27017" ], "setName" : "drm", "setVersion" : 2, "ismaster" : false, "secondary" : false, "primary" : "drmdb1-dl.:27017", "arbiterOnly" : true, "me" : "meta1-dl.:27017",
Google
ptchol
15.04.2018
10:42:19
там кривой вывод фактера в репорте, но суть понятна
У меня ещё кстати есть фидбек по опенстековскому свифту.
мы 2 года с ним живём где то, храним всякие картинки пользователей \ плейлистов \ аватарки и всяккую такую мелочь
Max
15.04.2018
10:47:36
угу - похоже на правду
@ptchol по ходу у тебя версия модуля не 2.1.2
В 2.1.2 replset имет стринг значение - не структуру.
Optional[String] $replset = undef,
Мой вариант
class { 'mongodb::server':
replset => 'rs0',
}
class {'mongodb::replset':
sets => { 'rs0' => { ensure => present, members => [ '10.10.10.183:27017', '10.10.10.84:27017', '10.10.10.215:27017'], arbiter => '10.10.10.215:27017' } },
}
делает тоже самое, но :
`
rs0:SECONDARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2018-04-15T11:07:21.407Z"),
"myState" : 2,
"term" : NumberLong(7),
"syncingTo" : "10.10.10.215:27017",
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"appliedOpTime" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"durableOpTime" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.10.10.10.183:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 90415,
"optime" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"optimeDate" : ISODate("2018-04-15T11:07:19Z"),
"syncingTo" : "10.10.10.10.215:27017",
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "10.10.10.10.84:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 90413,
"optime" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"optimeDurable" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"optimeDate" : ISODate("2018-04-15T11:07:19Z"),
"optimeDurableDate" : ISODate("2018-04-15T11:07:19Z"),
"lastHeartbeat" : ISODate("2018-04-15T11:07:20.758Z"),
"lastHeartbeatRecv" : ISODate("2018-04-15T11:07:20.762Z"),
"pingMs" : NumberLong(0),
"electionTime" : Timestamp(1523699975, 1),
"electionDate" : ISODate("2018-04-14T09:59:35Z"),
"configVersion" : 1
},
{
"_id" : 2,
"name" : "10.10.10.10.215:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 90413,
"optime" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"optimeDurable" : {
"ts" : Timestamp(1523790439, 1),
"t" : NumberLong(7)
},
"optimeDate" : ISODate("2018-04-15T11:07:19Z"),
"optimeDurableDate" : ISODate("2018-04-15T11:07:19Z"),
"lastHeartbeat" : ISODate("2018-04-15T11:07:20.256Z"),
"lastHeartbeatRecv" : ISODate("2018-04-15T11:07:19.974Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.10.10.84:27017",
"configVersion" : 1
}
],
"ok" : 1,
"operationTime" : Timestamp(1523790439, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1523790439, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
rs0:SECONDARY> rs.conf()
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "10.10.10.10.183:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "10.10.10.84:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "10.10.10.215:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5ad1c978b6ca3fb1484db3c8")
}
}
`
ptchol
15.04.2018
11:14:16
ты серьезно ?
а я в примере где то этому параметру структуру передавал ?
туда передаётся имя реплики, а ресурсу mongodb_replset уже структура
и для этого ресурса есть какие то обертки там вроде аля mongodb::replset
Max
15.04.2018
11:15:31
ну в реплсет имя не попадает?
я сам врапер не могу понять
# Wrapper class useful for hiera based deployments
class mongodb::replset(
$sets = undef
) {
if $sets {
create_resources(mongodb_replset, $sets)
}
# Order replset before any DB's and shard config
Mongodb_replset <| |> -> Mongodb_database <| |>
Mongodb_replset <| |> -> Mongodb_shard <| |>
Mongodb_replset <| |> -> Mongodb_user <| |>
}
sets этот для меня не очевиден
dk
15.04.2018
11:18:19
Не читай это, это - "приватный" класс для класса mongodb::server
:)
Max
15.04.2018
11:19:46
@dkguest )) ну тогда все понятно
я то думал я погу накотить используя по дефу 1 кластер
ptchol
15.04.2018
11:20:35
mongodb::replset::set:
здесь должна лежать структура, которая подходит по формату для mongodb_replset
dk
15.04.2018
11:20:43
В ::server есть условие if $replset { ... } где он накатывает это класс и готовит для него данные для $sets
Вот за это я и не люблю модули с форджа для многих сервисов (особенно, которые нашпигованы всяким хламом типа подключения сторонних реп, попыток настроить фаервол или слазать в sysctl/pam и пр)
Google
dk
15.04.2018
11:27:03
Пока их раскуришь, поубираешь ненужное, поправишь застарелые корявости и согласуешь с имеющейся паппетовой конфигурацией... Можно три раза этот модуль переписать с нуля
ptchol
15.04.2018
13:08:51
а почему ? потому что паппет уныл. и не умеет в индивидуальные зависимости модуля
а шеф к примеру умеет
а с докерами, так вобще можно не думать об этом )
dk
15.04.2018
13:55:30
Умеет же, поди-объяви несуществующий ресурс или коллекцию ресурсов :)
Другое дело, что паппет "из коробки" оперирует базовыми понятиями (файл, программа, сервис, пакет) и ничего не знает про сорта дистрибутивов, особенности их конфигураций и оптимальной реализации этих самых конфигураций (вообще-то кое-что он знает про редхат-подобные, но этого мало)
У разных разработчиков разное видение того, как надо конфигурировать, что при этом использовать и как согласовывать с прочими разработками.
В совокупности все это порождает зоопарк несовместимых модулей, боль и страдания.
ptchol
15.04.2018
14:50:54
вобще это как бы плюсом было когда то
паппет это DSL позволяющий реализовать ещё более высокоуровневый DSL оперирующий сущностями твоей конкретной инфраструктуры
в зависимости от бизнеса эти сущности могут быть разные, и это как бы круто что паппет нам четко не ограничивает объявление того что такое "приложение", "окружение", а даёт лишь базовую либу + пару тройку примтивов аля класс, дефайн, функция.
это как раз та гибкость которая нужно в больших инфраструктурах.
но технологии ушли вперед, и часть задач при скейлинге, решается лучше уже другими инструментами)
dk
18.04.2018
08:03:55
Хм, а можно как-то в манифесте узнать, какие ямл-файлы были заинклюжены из хиеры?
Max
18.04.2018
11:07:18
@dk idea ide может помочь.
Или нужно по депенденсах смотреть.
Айтуар
24.04.2018
09:11:16
Здравствуйте.
Подскажите как через паппет ставить модули pip, желательно в виртуальное окружение?
Вроде есть в package provider pip, но как-то мало по нему информации и примеров не нашёл.
dk
24.04.2018
09:12:15
Это скорее всего будет очень больно
Dmitriy
24.04.2018
09:12:57
dk
24.04.2018
09:13:05
Само по себе использовать более одного провайдера пакетов - уже больновато, а с виртуальными окружениями - очень больно
Айтуар
24.04.2018
09:15:07
Да я уже подумывал сделать rpm на всё это.