Ansible安裝配置


1  軟件安裝

Ansible是用Python開發的,使用ansible需要操作系統有Python,建議Python版本2.6以上。

Ansible安裝所依賴插件較多,具體安裝過程如下:

注:所有的軟件包全部在/usr/local/目錄下進行安裝 

基本安裝

安裝gcc,用於編譯Python源碼

yum install gcc

安裝zlib(如果沒安裝,在安裝setuptools時可能會出現的錯誤RuntimeError:Compression requires the (missing) zlib module)

yum install zlib zlib-devel -y

安裝openssl(如果不安裝,使用easy_install時可能會出現的錯誤:error:Could not find suitable distribution for Requirement.parse('jinja2'))

本實踐未使用這種安裝方式,就如下一個一個模塊來安裝(具體命令:easy_install pycrypto pyyaml jinja2 markupsafe ecdsa paramiko simplejson)

yum install openssl openssl-devel -y

(1)、python2.7安裝

https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

# tar xvzf Python-2.7.8.tgz

# cd Python-2.7.8

# ./configure --prefix=/usr/local

# make

# make install

 

## 將python頭文件拷貝到標准目錄,以避免編譯ansible時,找不到所需的頭文件

# cd /usr/local/include/python2.7

# cp -a ./* /usr/local/include/

 

## 備份舊版本的python,並符號鏈接新版本的python

# cd /usr/bin

# mv python python.old

# ln -s /usr/local/bin/python2.7 /usr/local/bin/python

# rm -f /usr/bin/python && cp /usr/local/bin/python2.7 /usr/bin/python

 

## 修改yum腳本,使其指向舊版本的python,已避免其無法運行

# vim /usr/bin/yum

#!/usr/bin/python  -->  #!/usr/bin/python2.4

 

(2)、setuptools模塊安裝

https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz

# tar xvzf setuptools-7.0.tar.gz

# cd setuptools-7.0

# python setup.py install

安裝好setuptools后就可以利用easy_install這個工具安裝下面的python模塊了,但我的電腦是虛擬機,配置太低了,所以基本無法安裝,所以只好一個一個下載下來再安裝了。

(3)、pycrypto模塊安裝

https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz

# tar xvzf pycrypto-2.6.1.tar.gz

# cd pycrypto-2.6.1

# python setup.py install

 

(4)、PyYAML模塊安裝

http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz

# tar xvzf yaml-0.1.5.tar.gz

# cd yaml-0.1.5

# ./configure --prefix=/usr/local

# make --jobs=`grep processor/proc/cpuinfo | wc -l`

# make install

 

https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz

# tar xvzf PyYAML-3.11.tar.gz

# cd PyYAML-3.11

# python setup.py install

 

(5)、Jinja2模塊安裝

https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz

# tar xvzf MarkupSafe-0.9.3.tar.gz

# cd MarkupSafe-0.9.3

# python setup.py install

 

https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz

# tar xvzf Jinja2-2.7.3.tar.gz

# cd Jinja2-2.7.3

# python setup.py install

 

(6)、paramiko模塊安裝

https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz

# tar xvzf ecdsa-0.11.tar.gz

# cd ecdsa-0.11

# python setup.py install

 

https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz

# tar xvzf paramiko-1.15.1.tar.gz

# cd paramiko-1.15.1

# python setup.py install

 

(7)、simplejson模塊安裝

https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz

# tar xvzf simplejson-3.6.5.tar.gz

# cd simplejson-3.6.5

# python setup.py install

 

(8)、ansible安裝

https://github.com/ansible/ansible/archive/v1.7.2.tar.gz

# tar xvzf ansible-1.7.2.tar.gz

# cd ansible-1.7.2

# python setup.py install

3 ansible配置

注:centos7.0安裝ansible后發現找不到ansible.cfg,配置文件的路徑如下圖,並將配置文件拷貝過去

默認配置文件位置為/etc/ansible/ansilble.cfg,配置文件位置可以修改。

Ansible 按照如下位置和順序來查找ansible.cfg 文件:

1.ANSIBLE_CONFIG 環境變量所指定的文件。

2../ansible.cfg(當前目錄下的ansible.cfg)。

3.~/.ansible.cfg(家目錄下的.ansible.cfg)。

4./etc/ansible/ansible.cfg。

4  配置ssh登錄

 4.1  由於ansible使用的登陸方式是ssh所以,在做實驗的兩台主機需要配置ssh秘鑰對,這樣ansible才能正常使用。

服務端:192.168.186.131   客戶端:192.168.186.130

 在131的主機上,執行:

  #  ssh-keygen -t rsa  直接回車即可,不用設置密鑰密碼。

  然后將公鑰(id_rsa.pub)拷貝到130的機器上:

 # ssh-copy-id   -i /root/.ssh/id_rsa.pub 192.168.186.130  這個命令就能生成authorized_keys文件的,沒必要一個一個無復制.pub文件,那樣反而麻煩容易錯誤的

本機131也要操作:

 # cat  /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

 #  chmod  600 /root/.ssh/authorized_keys

  在131和130的機器上關閉selinux

#  setenforce  0

在131的機器測試ssh是否可以登錄:

# ssh   192.168.186.130

成功登錄130的機器。

4.2  修改ansible的hosts文件

  在131的機器:

  #  vim  /etc/ansible/hosts

 在末尾添加:

[testhosts]    #  testhosts 是服務器組的名字,用來統一管理服務器

127.0.0.1

gx.com         #gx.com是192.168.186.130 這台服務器,當然,這里可以直接寫IP地址。

 如果寫成域名的形式,則需要修改一下dns的指向或者/etc/hosts ,讓dns可以找到gx.com的IP指向了哪個服務器。

修改

# vim  /etc/hosts

加入:192.168.186.130 gx.com

4.3  進行遠程連接測試

4.3.1  執行w命令,查看服務器的狀態:

#  ansible  testhosts  -m command -a  ‘w‘

 

  4.3.2  ansible拷貝文件或者目錄

在服務端創建文件

# vi  /tmp/test.sh

  #!/bin/bash

  echo `date` > /tmp/ansible_test.txt

利用ansible可以方便地將本地的目錄或者文件同步到遠程服務器,具體命令:

#  ansible testhosts -s -m copy -a 'src=/tmp/test.sh dest=/tmp/test.sh mode=0755'

復制結果:

然后,可以批量執行該腳本:

#  ansible testhosts -m shell -a '/tmp/test.sh'

已經創建了/tmp/ansible_test.txt文件了,並在該文件中成功寫入了結果。測試成功

4.3.3  ansible實現遠程任務執行

利用ansible的cron模塊,給遠程的服務器批量增加任務計划

每個星期天都重新創建一個文件/tmp/day.txt

# ansible testhosts -m cron -a "name='testday cron' job='/bin/touch /tmp/day.txt' weekday=6"

如果想要刪除任務計划,只需增加state=absent,如下圖,已經將剛剛添加的任務刪除了

========================華麗的分割線===========================

 

生產環境中jenkins主機ansible配置如下:

[defaults]

hostfile       = ./hosts

library        = /usr/share/ansible

remote_tmp     = $HOME/.ansible/tmp

pattern        = *

transport      = smart

remote_port    = 22

log_path = /home/jenkins/ansible/ansible.log

pipelining = True

module_lang    = C

gathering = implicit

host_key_checking = False

sudo_exe = sudo

timeout = 10

ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}

action_plugins     = /usr/share/ansible_plugins/action_plugins

callback_plugins   = /usr/share/ansible_plugins/callback_plugins

connection_plugins = /usr/share/ansible_plugins/connection_plugins

lookup_plugins     = /usr/share/ansible_plugins/lookup_plugins

vars_plugins       = /usr/share/ansible_plugins/vars_plugins

filter_plugins     = /usr/share/ansible_plugins/filter_plugins

[paramiko_connection]

[ssh_connection]

[accelerate]

accelerate_port = 5099

accelerate_timeout = 30

accelerate_connect_timeout = 5.0

accelerate_daemon_timeout = 30

主要配置項有:

hostfile:指定ansible inventory文件路徑,默認路徑為/etc/ansible/hosts,生產環境Jenkins主機已修改為./hosts,也可以在使用ansible或ansible-playbook命令時通過-i參數指定其路徑。

log_path:指定日志文件。

remote_port:指定連接遠程主機的默認端口。

4 ansible使用

Ansible常用命令有三個:ansible  ansible-playbook  ansible-doc

4.1 ansible用法

首先是集群hosts列表的配置。如下:

root@localhost[/home/centos/ansible-demo]cat hosts

[bpm:children]

bpm57

bpm58

[bpm57]

192.168.100.57 ansible_ssh_user=bpm  ansible_ssh_pass=******Zhang

[bpm58]

192.168.100.58 ansible_ssh_user=bpm  ansible_ssh_pass=*******Zhang

[110]

192.168.100.110 ansible_ssh_user=yangsw ansible_ssh_pass=bs bsP********

[64]

192.168.100.64:2202 ansible_ssh_user=yangsw ansible_ssh_pass=bsP********

其中,中括號(類似[110])表示一個節點組,下面每行表示一個節點,一個節點組可以包括多個節點,也可以通過指定children節點組(類似[bpm:children])將多個節點組組成一個新的組,hosts文件中每行需要指定的有ip:port(端口也可以通過ansible_ssh_port=22來指定,默認為配置文件中remote_port的值) 遠程主機用戶名 遠程主機密碼(配置為免密登陸則不用指定)。

密碼中如果包含$ ” ‘ \ 字符時,需要進行轉義。

Ansible命令:ansible  host_clluster -m 模塊 -a 命令

-m:指定模塊

-a:指定模塊參數

-i:指定inventory路徑(hosts文件位置)

-e:指定變量

-f :指定並行進程數,默認5

root@localhost[/home/centos/ansible-demo]ansible bpm -m shell -a"pwd"  

192.168.100.58 | SUCCESS | rc=0 >>

/home/bpm

 

192.168.100.57 | SUCCESS | rc=0 >>

/home/bpm

 

Ansible 常用模塊有file shell command copy template fetch script croon ping等

可以使用ansible-doc -l查看ansible都有哪些模塊及各個模塊功能,模塊具體用法可以使用ansible-doc命令查看,如file模塊可以使用ansible-doc file查看。

 

4.2 ansible-playbook

playbook簡單的說就是定義一個配置文件,文件中寫入你需要安裝的服務,配置文件,變量等信息,使他們可以按照事先定義好的機制完成一個任務。Playbook使用YAML語法結構,所以配置閱讀起來都比較簡單。

Playbooks常用參數:

hosts:指定遠程主機組

vars:定義所用到的變量,可以使用變量名:變量值的方式,也可使用var_files指定存放變量的文件。

Ansible變量命名規則:變量由字母、數字、下划線組合而成,且必須以字母開頭。

roles: ansible的roles用於層次性、結構化地組織palybook。roles能夠根據層次型結構自動裝載變量文件、tasks及handlers等。

tasks:指定要執行的任務列表。

如下為mzone發布的一個簡單的playbook:

 

Playbook文件一般命名成.yml形式,hosts指定要操作的遠程主機組,可以用變量表示,ansible中以雙花括號{{ }}的形式表示變量,變量值可以在執行命令時通過-e參數指定,如:ansilbe-playbook deploy_mzone.yml -e”host_cluster=web”

Tasks表示要執行的操作,-name指定執行playbook該語句時在屏幕上顯示的信息,為提示信息。copy 以及 shell 為要執行的模塊,冒號后面跟模塊所需指定的參數。

Ansible-playbook常用到的還有template模塊,用法與copy模塊相似,不同的是template模塊可以使用變量,其與copy模塊的區別在於,拷貝到遠程可以替換src文件中變量的值。


免責聲明!

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



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