Ansible安装服务集合

Ansible安装

安装依赖及版本信息如下:

===========================================================================================================================================================================
 Package                                         Arch                                 Version                                     Repository                          Size
===========================================================================================================================================================================
Installing:
 ansible                                         noarch                               2.8.1-1.el7                                 epel                                15 M
Installing for dependencies:
 python-babel                                    noarch                               0.9.6-8.el7                                 base                               1.4 M
 python-httplib2                                 noarch                               0.9.2-0.2.el7                               epel                               115 k
 python-jinja2                                   noarch                               2.7.2-2.el7                                 base                               515 k
 python-markupsafe                               x86_64                               0.11-10.el7                                 base                                25 k
 python-paramiko                                 noarch                               2.1.1-5.el7                                 base                               268 k
 python2-jmespath                                noarch                               0.9.0-1.el7                                 epel                                39 k
 sshpass                                         x86_64                               1.06-1.el7                                  epel                                21 k

Transaction Summary
===========================================================================================================================================================================

Ansible简单方式 二进制安装mariadb

1.配置基于key的ssh远程登录

[root@CentOS7 ~]#ssh-keygen
[root@CentOS7 ~]#ssh-copy-id 192.168.37.30
[root@CentOS7 ~]#ssh-copy-id 192.168.37.102
[root@CentOS7 ~]#ssh-copy-id 192.168.37.103

2.主控端安装ansible

[root@CentOS7 ~]#yum install ansible

3.配置主机清单:

[root@CentOS7 ~]#vim /etc/ansible/hosts
[webservers]
192.168.37.102
192.168.37.103

[appservers]
192.168.37.30 

4.测试主机联通性

[root@CentOS7 ~]#ansible all -m ping

5.编写剧本yml文件

[root@CentOS7 data]#vim mariadb.yml 
---                                                                                                                                                                        
#二进制安装mariadb
#mariadb版本10.2.25
#安装步骤
#1.添加mysql用户
#2.创建存放数据库文件目录
#3.修改存放数据库文件目录权限
#4.解压缩二进制包,同时设置解压后的mysql安装目录权限
#5.创建软链接
#6.准备配置文件(配置文件不修改再次执行playbook,需要删除已经生成的数据库文件,否则会报错)
#7.准备数据库文件 (每执行一次playbook,生成数据库文件脚本都会重新执行,重新生成数据库文件)
#8.准备服务启动脚本 (更改数据库配置端口后重新执行playbook,原先已经启用服务占用的端口需手动禁用掉)
#9.设置环境变量
#10.source环境变量,使之生效
#11.启动mariadb服务


- hosts: all
  remote_user: root

  tasks:
    - name: create user mysql
      user: name=mysql system=yes home=/data/mysql create_home=no shell=/sbin/nologin
    - name: create mysql data directory
      file: path=/data/mysql state=directory
    - name: chown mysql data directory
      file: path=/data/mysql owner=mysql group=mysql
    - name: unarchive package to remote hosts
      unarchive: src=/data/mariadb-10.2.25-linux-x86_64.tar.gz dest=/usr/local copy=yes owner=root group=root
      tags:
        unarchmariadb
    - name: create soft link
      file: src=/usr/local/mariadb-10.2.25-linux-x86_64 dest=/usr/local/mysql state=link
    - name: copy config file
      copy: src=/data/my.cnf  dest=/etc
    - name: prepare data file
      shell: chdir=/usr/local/mysql ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
    - name: prepare start scripts
      shell: cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    - name: set environment path variable
      copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
    - name: source path variable
      shell: source /etc/profile.d/mysql.sh
    - name: start mariadb service
      shell: /etc/init.d/mysqld start
    handlers:
    - name: restart mariadb service
      service: name=mysqld state=restarted

6.准备安装包和配置文件

[root@CentOS7 data]#vim /etc/my.cnf

[mysqld]
datadir=/data/mysql

[root@CentOS7 data]#cp /etc/my.cnf /data/
[root@CentOS7 ~]#rz         #mariadb-10.2.25-linux-x86_64.tar.gz

7.检查语法

#如果yml文件有关键字或模块名称错误,会直接报红色错误
#如果yml模拟执行过程中有错,会在具体执行步骤处报错,前面的通过的步骤会显示
[root@CentOS7 ~]#ansible-playbook -C /data/mariadb.yml

8.执行剧本:

#第一次执行剧本
[root@CentOS7 ~]#ansible-playbook /data/mariadb.yml 

#如果是后面改了配置文件,再次执行,由于压缩文件解压缩需要一段时间,可以选择跳过解压阶段
[root@CentOS7 ~]#ansible-playbook /data/mariadb.yml --skip-tags="unarchmariadb"

#更改数据库配置端口后重新执行playbook,原先已经启用服务占用的端口需手动禁用掉
#ss -nltp
#kill -9 pid

配置文件中带有变量的称为模板template
批量引入文件名到main.yml

[root@CentOS7 tasks]#for file in *;do echo "- include: $file" >> main.yml;done

1.role角色名即roles目录下的子目录名(一个文件夹对应一个角色)
2.执行playbook的yml文件要与roles目录在同一级
3.template模板文件名必须是.j2后缀;调用的yml文件与templates文件夹在同级目录
4.tasks的yml文件中指定的包路径不需要指定绝对路径

默认的roles目录路径:/etc/ansible/roles ,可修改 ansible.cfg 配置文件自定义roles目录路径
#:nohl  vim中取消高亮
#:set number     vim中查看行号
vim /etc/ansible/ansible.cfg
roles_path    = /data/playbook/roles

在这里插入图片描述

项目方式部署安装

使用项目的目录结构:
将原先的tasks任务分别拆成roles/tasks目录下的单个yml文件,方便局部调整,而不影响整体
在这里插入图片描述
项目文件写法与简单写法区别:

[root@CentOS7 ~]#cat /etc/ansible/playbooks/roles/mariadb/tasks/unarchive_install_package.yml
- name: unarchive package to remote hosts
#压缩包的路径放到了files目录中,所以不需要指定压缩包路径,Ansible可以自己找到
  unarchive: src=mariadb-10.2.25-linux-x86_64.tar.gz dest=/usr/local copy=yes owner=root group=root
  tags:
    unarchmariadb
[root@CentOS7 ~]#cat /etc/ansible/playbooks/roles/mariadb/tasks/config_template.yml 
- name: copy config file
#配置文件放在了templates目录中,无需指定配置文件路径
  template: src=my.cnf.j2  dest=/etc/my.cnf
  notify: restart mariadb service

在这里插入图片描述

-----------------------------案例1:模板仅需重复1条服务的变量------------------------------
vim for.yml
- hosts: appsrvs
  vars:
    ports:     //变量列表名
      - 81     //  - listen_port:81  变量列表,可以是字典形式
      - 82     //  - listen_port:82  
      - 83     //  - listen_port:83   // 键(变量):值:字典形式
  tasks:
     - name: config
       template: src=aa.j2 dest=


 vim templates/aa.j2
{% for port in ports %}  //port:for循环中定义使用的变量;ports是yml中定义的变量列表

server {
	
    listen {{port}}   
 //listen {{port.listen_port}} 调用字典变量

}
{%endfor%}


结果形式:

server{

   port:81  
}

server{

   port:82
}
server{

   port:83  
}

-----------------------------------------------------------------------------------

---------------案例2:模板中需重复多个服务的变量-----------------

vim for.yml
- hosts: appsrvs
  vars:
    ports:
      - web1:     //第1个列表元素,以键值对存储
        listen_port: 81    
        name: web1.magedu.com
        dir: /data/web1
      - web2:     //第3个列表元素,以键值对存储
        listen_port: 81    
        name: web2.magedu.com
        dir: /data/web2
      - web3:     //第3个列表元素,以键值对存储
        listen_port: 81    
        name: web3.magedu.com
        dir: /data/web3
     
  tasks:
     - name: config
       template: src=aa.j2 dest=


 vim templates/aa.j2
{% for port in ports %}  //这里的ports是3个列表

server {
  
    listen {{port.listen_port}}
    server_name {{port.name}}
    root  {{port.dir}}   


}
{%endfor%}

效果: 
server{

   port:81  
   server_name:web1.magedu.com
   root:/data/web1
}
server{

   port:82  
   server_name:web2.magedu.com
   root:/data/web2
}
server{

   port:83 
   server_name:web3.magedu.com
   root:/data/web3
}
--------------------------------------------------------------------------

----------案例3:条件判断来重复多个服务变量-----------------------
vim for.yml
- hosts: appsrvs
  vars:
    ports:
      - web1:     //第1个列表元素,以键值对存储
        listen_port: 81    
        dir: /data/web1
      - web2:     //第3个列表元素,以键值对存储
        listen_port: 81    
        name: web2.magedu.com
        dir: /data/web2
      - web3:     //第3个列表元素,以键值对存储
        listen_port: 81    
        dir: /data/web3
     
  tasks:
     - name: config
       template: src=aa.j2 dest=


 vim templates/aa.j2
{% for port in ports %}  //这里的ports是3个列表

server {
  
    listen {{port.listen_port}}
{%if port.name is defined %}    //变量定义则执行,变量没定义则不执行
    server_name {{port.name}}
{%endif%}
    root  {{port.dir}}   


}
{%endfor%}

效果: 
server{

   port:81  
   root:/data/web1
}
server{

   port:82  
   server_name:web2.magedu.com
   root:/data/web2
}
server{

   port:83 
   root:/data/web3
}
--------------------------------------------------------------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章