LINUX.ORG.RU
ФорумAdmin

А кто в монге и репликации понимает?

 ,


0

1

Хочу в докере собрать кластер из пары монг.

беру докер от монги, собираю кластер в docker-compose

version: '3.4'
      
services:
  mongo-ev-1:
    networks:
      - mongo
    container_name: mongo-ev-1
    restart: on-failure
    image: mongo:4
    ports:
      - "7017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: test
      MONGO_INITDB_ROOT_PASSWORD: test
      MONGO_INITDB_DATABASE: test
    command: mongod --replSet rs0
  
  mongo-ev-2:
    networks:
      - mongo
    container_name: mongo-ev-2
    restart: on-failure
    image: mongo:4
    ports:
      - "7018:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: test
      MONGO_INITDB_ROOT_PASSWORD: test
      MONGO_INITDB_DATABASE: test
    command: mongod --replSet rs0
    links:
      - mongo-ev-1
    volumes:
      - ./docker-data/mongo:/docker-entrypoint-initdb.d
networks:
  mongo:
    driver: bridge

и кладу скрипт initCluster.sh в каталог docker-entrypoint-initdb.d :

mongo <<EOF
config = {
    "_id": "rs0",
    "members": [
        {
            "_id": 0,
            "host": "mongo-ev-1:27017"
        },
        {
            "_id": 1,
            "host": "mongo-ev-2:27017"
        }
    ]
};

rs.initiate(config, {"force": true});
rs.reconfig(config, { force: true });
EOF

Дальше смотрю как запущены в каждом докере монги:

docker exec -it mongo-ev-2 ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl    0:05 mongod --replSet rs0 --auth --bind_ip_all
   65 pts/0    Rs+    0:00 ps ax

видно что опция replSet установлена, всё ок

в docker logs вижу ошибки:

Implicit session: session { "id" : UUID("4ef9e731-3529-4db3-895c-4baabbc08ea7") } 
MongoDB server version: 4.2.0
{
        "_id" : "rs0",
        "members" : [ 
                {
                        "_id" : 0,
                        "host" : "mongo-ev-1:27017"
                },
                {
                        "_id" : 1,
                        "host" : "mongo-ev-2:27017"
                }
        ]               
}                       
{               
        "ok" : 0,
        "errmsg" : "This node was not started with the replSet option",
        "code" : 76,
        "codeName" : "NoReplicationEnabled"
}
2019-10-03T09:08:46.389+0000 E  QUERY    [js] uncaught exception: Error: Could not retrieve replica set config: {
        "ok" : 0,
        "errmsg" : "not running with --replSet",
        "code" : 76,
        "codeName" : "NoReplicationEnabled"
} :
rs.conf@src/mongo/shell/utils.js:1531:11

и что-то не вкурю что я не так делаю?

Перемещено a1batross из talks

★★

Так вот же ответ:

"errmsg" : "not running with --replSet"

Если правильно помню (не трогал монгу лет пять), чтоб оно вообще работало, надо это в конфиге или в параметром при старте указать.

rusty_angel ()
Ответ на: комментарий от rusty_angel

правильно помню (не трогал монгу лет пять), чтоб оно вообще работало, надо это в конфиге или в параметром при старте указать.

ну вот в ps ax видно что указано в аргументах командной строки

rsync ★★ ()
Ответ на: комментарий от rusty_angel

А, вижу, у тебя там оно в command в docker-compose.yml. Выглядит правильно вроде. И в ps тоже ок. В конфиге там ничего лишнего нету? Хотя приоритет вроде у явных параметров/аргументов.

rusty_angel ()
Ответ на: комментарий от rusty_angel

в общем напедалил решение

  1. запускаем 1-n докеров с монгами
  2. запускаем 1 докер setup из которого вызываем rs.initiate на предыдущих
  3. PORFIT

но есть одно но

после пункта 2 весь кластер сидит еще 10 секунд и думает «а кто же будет у нас мастером?»

не знаете как инициировать досрочные перевыборы?

rsync ★★ ()