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]

posted on 2020-08-19 09:16  ZhanLi  阅读(826)  评论(7编辑  收藏  举报