ansible使用,搭建mongo的replica-set小結


ansible

前言

用到了就總結下吧

常用到的指令

查看ip是否可用

ansible all -m ping 

執行

ansible-playbook xxxx.yml  

執行,查看日志輸出

ansible-playbook xxxx.yml -vvv 

查看這個 playbook 的執行會影響到哪些 hosts

ansible-playbook playbook.yml --list-hosts

ansible了解

Ansible是使用Python開發的自動化運維工具,如果這么說比較抽象的話,那么可以說Ansible可以讓服務器管理人員使用文本來管理服務器,編寫一段配置文件,在不同的機器上執行。

Ansible的使用需要在目標服務器上添加自己電腦的公鑰,設置免密登錄。

設置服務器免密登錄

添加本機的pub,公鑰到目標服務器~/.ssh/authorized_keys中,然后設置權限chmod 600 /root/.ssh/authorized_keys

變量名的使用

在使用變量之前最好先知道什么是合法的變量名. 變量名可以為字母,數字以及下划線.變量始終應該以字母開頭. “foo_port”是個合法的變量名.”foo5”也是. “foo-port”, “foo port”, “foo.port” 和 “12”則不是合法的變量名.

playbooks了解

Playbooks可用於聲明配置,更強大的地方在於,在 playbooks 中可以編排有序的執行過程,甚至於做到在多組機器間,來回有序的執行特別指定的步驟.並且可以同步或異步的發起任務.

在運行 playbook 時(從上到下執行),如果一個 host 執行 task 失敗,這個 host 將會從整個 playbookrotation 中移除. 如果發生執行失敗的情況,請修正 playbook 中的錯誤,然后重新執行即可.

modules 具有”冪等”性.重復多次執行playbook是安全的。

比如對於創建文件夾,如果不存在就創建,存在了就不創建了。

Handlers

在發生改變時執行的操作

Handlers 也是一些 task 的列表,通過名字來引用,它們和一般的 task 並沒有什么區別.Handlers 是由通知者進行 notify, 如果沒有被 notify,handlers 不會執行.不管有多少個通知者進行了 notify,等到 play 中的所有 task 執行完成之后,handlers 也只會被執行一次.

handlers:
    - name: restart memcached
      service:  name=memcached state=restarted
    - name: restart apache
      service: name=apache state=restarted

Handlers 最佳的應用場景是用來重啟服務,或者觸發系統重啟操作.除此以外很少用到了.

task

對於playbook,我們一般使用 include 語句引用 task 文件的方法,將playbook進行拆分。

register使用

register的作用一般用於獲取命令輸出和判斷執行是否成功。

register可以存儲指定命令的輸出結果到一個自定義的變量中,我們可以通過訪問這個自定義的變量來獲取命令的輸出,然后判斷是否執行成功。

- name: Check than logfile exists
  stat: path={{ DATA_PATH }}/mongos/log/mongo.log
  register: logfile_start
  when: MONGO_SYSYTEMLOG_DESTIANTION == "file"

- name: Create log if missing
  file:
    state: touch
    dest: "{{ DATA_PATH }}/mongos/log/mongo.log"
    owner: mongod
    group: mongod
    mode: 0644
  when: ( MONGO_SYSYTEMLOG_DESTIANTION == "file"
        and logfile_start is defined
        and not logfile_start.stat.exists )

通過判斷logfile_start來判斷目標目錄是否存在。

set_fact使用

set_fact用來做變量的賦值。

- name: 注冊replicaset_host變量
  set_fact:
    replicaset_host: []

- name: 循環處理host
  set_fact:
    replicaset_host: "{{replicaset_host}} + [ '{{ item }}:{{ MONGO_NET_PORT }}' ]"
  with_items: "{{ groups['mongo'] }}"

比如上面注冊了一個replicaset_host數組,下面通過with_items循環對replicaset_host進行了賦值操作,之后后面的task就可以直接使用這個變量了。

- name: 初始化副本集
  mongodb_replicaset:
    login_host: localhost
    login_port: "{{ MONGO_NET_PORT }}"
    login_user: "{{ MONGO_ROOT_USERNAME }}"
    login_password: "{{ MONGO_ROOT_PASSWORD }}"
    replica_set: mongos
    members: "{{ replicaset_host }}"
ansible構建mongo的replicaset

構建的思路:

1、通過rpm安裝mongo的包,然后安裝依賴的程序
2、配置mongo.service
3、配置mongo.conf,初始化的mongo是沒有賬號密碼的,所以先初始化一個無需驗證的mongo.conf。配置好之后,重啟服務。
4、設置登錄的賬號密碼,之后修改mongo.conf為需要認證的。重啟服務。
5、初始化副本集,設置開機啟動。

項目結構:

.
├── deploy-mongo.yml
└── roles
    └── mongo
        ├── defaults  // 一些配置信息
        │   └── main.yml
        ├── files  // mongo的安裝包
        │   └── rpms
        │       ├── mongodb-org-unstable-mongos-4.1.8-1.el7.x86_64.rpm
        │       ├── mongodb-org-unstable-server-4.1.8-1.el7.x86_64.rpm
        │       ├── mongodb-org-unstable-shell-4.1.8-1.el7.x86_64.rpm
        │       └── mongodb-org-unstable-tools-4.1.8-1.el7.x86_64.rpm
        ├── handlers // notify重啟服務的task
        │   └── main.yml
        ├── tasks
        │   ├── auth_initialization.yml
        │   ├── authorization.yml
        │   ├── configure.yml
        │   ├── init_replicaset.yml
        │   ├── install_task.yml
        │   └── main.yml
        └── templates
            ├── mongodb.service.j2
            └── mongod.conf.j2

項目的地址[https://github.com/boilingfrog/ansible-mongo-replicaset-role]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM