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 将会从整个 playbook 的 rotation 中移除. 如果发生执行失败的情况,请修正 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]
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号