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
}
--------------------------------------------------------------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章