我的Ansible學習筆記


Ansible
常見錯誤 http://afewbug.com/article/26
官方文檔 http://docs.ansible.com/ansible/
安裝配置 http://sofar.blog.51cto.com/353572/1579894

 

目錄
一、介紹
二、yum安裝
三、Ansible配置
四、模塊
五、playbook
六、實戰演練--用Ansible實現LANMP的安裝

注意:以下實驗環境均為關閉selinux和清空防火牆配置,需要把/etc/my.cnf 改為/etc/my.cnf.bak

 

一、介紹
特性
(1)、no agents:不需要在被管控主機上安裝任何客戶端;
(2)、no server:無服務器端,使用時直接運行命令即可;
(3)、modules in any languages:基於模塊工作,可使用任意語言開發模塊;
(4)、yaml,not code:使用yaml語言定制劇本playbook;
(5)、ssh by default:基於SSH工作;
(6)、strong multi-tier solution:可實現多級指揮。

優點
(1)、輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;
(2)、批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行;
(3)、使用python編寫,維護更簡單,ruby語法過於復雜;
(4)、支持sudo。


二、yum安裝

yum install -y epel-release
yum install -y ansible


附注:編譯安裝參考上述鏈接


三、Ansible配置
(1)SSH免密鑰登陸設置具體參考SSH密鑰登陸

http://www.cnblogs.com/ImJerryChan/p/6002508.html


(2)ansible配置
主機組配置參考:

# vi  /etc/ansible/hosts
# 在里面增加如下配置增加
[testhost]
127.0.0.1
192.168.75.135

配置解析:
在/etc/ansible/hosts文件里指定被監控的主機
其中testhost為自定義的主機組名。
下面兩個ip為組內的機器ip。


(3)簡單測試

ansible 192.168.75.135 -m command -a 'w'   或者
ansible testhost  -m command -a 'w'

如果結果為如下配置,則配置成功

附注:
錯誤:    "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
解決辦法: yum install -y libselinux-python


四、模塊
五、playbook
這兩個部分過兩天再補充吧,畢竟現在還沒學完呢,路還很長

 

六、實戰演練--用Ansible實現LANMP的安裝

(這個也屬於一個未完成版,因為在寫這篇文章的時候還在敲其余部分的代碼,因此這一兩天內補上吧,MySQL部分實驗沒問題)
(一)Mysql

cd /etc/ansible
mkdir mysql_install
mkdir -p mysql_install/roles/{common,delete,install}/{handlers,files,meta,tasks,templates,vars}

cd mysql_install/roles
//安裝前准備
vi ./common/tasks/main.yml
- name: Install initialization require software
  yum: name={{ item }} state=installed
  with_item:
    - gcc
//安裝過程
vi ./install/vars/main.yml
mysql_user: mysql
mysql_port: 3306
mysql_data_dir: /data/mysql
mysql_version: 5.5.54

ls ./install/templates
/etc/init.d/my.cnf   /etc/init.d/mysqld
分別為配置文件以及啟動文件,也就是要拷貝進去

ls ./install/files
mysql-5.5.54.tar.gz
data_mysql.tar.gz
同上,一個小建議就是打包的時候最好到文件/目錄所在處再打包,否則如果前面跟了目錄的話,會把目錄也打包進來的 vi .
/install/tasks/copy.yml - name: Copy MySQL Software To Redhat client copy: src=mysql-{{ mysql_version }}.tar.gz dest=/usr/local/src/mysql-{{ mysql_version }}.tar.gz owner=root group=root when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: Uncompression MySQL Software To Redhat Client shell: tar zxf /usr/local/src/mysql-{{ mysql_version }}.tar.gz -C /usr/local/ when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: Copy Data_Dir To Redhat client copy: src=data_mysql.tar.gz dest=/usr/local/src/data_mysql.tar.gz owner=root group=root when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: Uncompression Data_Dir To Redhat Client shell: tar zxf /usr/local/src/data_mysql.tar.gz -C / when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: Copy MySQL Start Script To Redhat Client template: src=mysqld dest=/etc/init.d/mysqld owner=root group=root mode=0755 when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: Copy MySQL Config To Redhat Client template: src=my.cnf dest=/etc/init.d/my.cnf when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 vi ./install/tasks/install.yml - name: Create MySQL User In Redhat Client user: name={{ mysql_user }} state=present createhome=no shell=/sbin/nologin when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: Start MySQL Service In Redhat Client service: name=mysqld state=started# when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: Add Boot Start MySQL Service In Redhat Client shell: chkconfig --level 345 mysqld on when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 vi ./install/tasks/delete.yml - name: Delete MySQL compression Software In Redhat Client shell: rm -rf /usr/local/src/mysql-{{ mysql_version }}.tar.gz when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 vi ./install/tasks/main.yml - include: copy.yml - include: install.yml - include: delete.yml
//卸載過程
vi ./delete/vars/main.yml
mysql_user: mysql
mysql_port: 3306
mysql_data_dir: /data/mysql
mysql_version: 5.5.54-linux2.6-x86_64

vi ./delete/tasks/delete.yml
- name: Stop MySQL Service
  shell: ps -ef|grep mysql|grep -v grep|awk '{print $2}'|xargs kill -9 >>/dev/null 2>&1
  ignore_errors: yes
  when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6
- name: Delete MySQL Boot Start Script
  shell: chkconfig --del mysql
  when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6
- name: Delete MySQL Dir
  shell: rm -rf /usr/local/mysql
  when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6
- name: Delete MySQL User
  shell: userdel {{ mysql_user }}
  ignore_errors: yes
  when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6
- name: Delete MySQL Service Start Script
  shell: rm -rf /etc/init.d/mysqld
  when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6
- name: Delete MySQL Service Config File
  shell: rm -rf /etc/init.d/my.cnf
  when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6

vi ./delete/tasks/main.yml
- include: delete.yml
//MySQL主入口配置文件
cd ../
vi install.yml
---
- hosts: 192.168.75.135
  remote_user: root
  gather_facts: True
  roles:
    - common
    - install
    
vi delete.yml ---
- hosts: 192.168.75.135
  remote_user: root
  gather_facts: True
  roles:
    - delete
完畢
安裝MySQL:ansible-playbook install.yml
卸載MySQL:ansible-playbook delete.yml

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM