zoukankan      html  css  js  c++  java
  • 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]

  • 相关阅读:
    文件操作
    三级菜单(低端版VS高端版)
    字符串内置方法
    简单购物车的实现
    pandas常用函数
    1.在CentOS 7上安装Docker
    2. IDEA 在同一工作空间创建多个项目
    7.SpringMVC注解@RequestParam全面解析
    6.@RequiresPermissions 注解说明
    1. 构建第一个SpringBoot工程
  • 原文地址:https://www.cnblogs.com/ricklz/p/13527338.html
Copyright © 2011-2022 走看看