2

我們通過AWS EC2實例上的ansible來部署mongodb集羣。 一旦設置了數據庫實例,我們會爲其提供相應的主/輔助標籤。我們有3個節點 - 1個用於Primary,2個用於Secondary。AWS MongoDB集羣通過Ansible進行配置

在運行的第一次ansible腳本,我們根據標籤類型選擇主實例,啓動它,並添加輔助節點到它

rs.initiate() 
rs.add(secodnaryHost1) 
rs.add(secondaryHost2) 

這工作得很好。

但是有時,當其中一個輔助節點成爲主節點時,我們的實例標記類型 - primary和mongoDB - primary不一樣。 在這種情況下,如果我們運行我們有用的腳本,它們會失敗,因爲主標籤類型(現在是輔助標籤)無法在命令之上運行。

處理這種不匹配的最佳方法是什麼?

+0

這是不利於使用標籤來指示哪個節點是主要的,哪些是次要的,因爲(如你已經注意到),當現有主節點將脫機,然後另一個節點將[選舉](https://docs.mongodb.com/manual/core/replica-set-elections/)擔當主角色。有什麼特別的原因讓你的Ansible腳本需要知道哪個節點是主節點? –

回答

2

您應該閱讀the current status並在模板中或通過命令行定義適當的設置。 請在available ansible-galaxy roles中搜索。

PS:

示例模板repset_init.j2及其提供

- name: Create the file to initialize the mongod replica set 
    template: src=repset_init.j2 dest=/tmp/repset_init.js 

- name: Pause for a while 
    pause: seconds=20 

- name: Initialize the replication set 
    shell: /usr/bin/mongo --port "{{ mongod_port }}" /tmp/repset_init.js