1.ansible的安裝 1)使用源碼安裝Python3.5 安裝支持包 yum -y install lrzsz vim net-tools gcc gcc-c++ ncurses ncurses-devel unzip zlib-devel zlib openssl-devel openssl ...
1.ansible的安裝
1)使用源碼安裝Python3.5
安裝支持包
yum -y install lrzsz vim net-tools gcc gcc-c++ ncurses ncurses-devel unzip zlib-devel zlib openssl-devel openssl
tar xf Python-3.5.2.tgz -C /usr/src/
./configure --prefix=/usr/local/python/
make && make install
ln -s /usr/local/python/bin/python3 /usr/bin/python3
2)使用pip3安裝ansible
/usr/local/python/bin/pip3 install ansible
ln -s /usr/local/python/bin/ansible /usr/local/bin/
2.模塊簡單使用
1)ansible的配置文件
vim /etc/ansible/hosts
機器1 ansible_ssh_host=ip ansible_ssh_port=22 ansible_ssh_user=root
機器2 ansible_ssh_host=ip ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=666666
ansible_ssh_host ===>主機IP
ansible_ssh_port ===>ssh的預設埠
ansible_ssh_user ===>ssh的用戶名
ansible_ssh_pass ===>ssh的用戶的連接密碼
如果我們已經設置了ssh免密鑰了。那麼就不需要寫密碼了。例如:webA
我們要是沒有設置免密鑰,那麼就需要安裝sshpass工具,併在/etc/ansible/hosts文件里寫上主機的連接密碼。
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install sshpass
2)進行ansible遠程執行命令測試
ansible -i /etc/ansible/hosts 主機或主機組 -m 指定模塊 -a 命令
使用ping模塊用來查看伺服器是否連接正常,ping模塊不需要-a指定參數
ansible 主機1 -m ping
[root@ansible .ssh]# ansible all -m ping
webA | SUCCESS => {
"changed": false,
"ping": "pong"
}
webB | SUCCESS => {
"changed": false,
"ping": "pong"
}
3)ansible模塊command(不支持管道,不建議使用)
ansible all -m command -a "pwd"
ansible all -m command -a "echo bb >> /tmp/testansible"
4)ansible模塊shell(支持管道,支持重定向)
ansible all -m shell -a "echo testansible | grep a"
ansible all -m shell -a "echo bb >> /tmp/testansible"
ansible all -m shell -a "cat /etc/passwd | awk -F":" '{print \$1}'"
5)ansible的copy模塊批量下發文件或文件夾
ansible all -m copy -a "src=/service/scripts/test.txt dest=/service/scripts/"
ansible webB -m copy -a "src=/service/scripts/test.txt dest=/service/scripts/"
copy模塊拷貝文件夾,如果目標路徑里有與我拷貝的文件同名文件的話,會直接覆蓋目標路徑下的文件
參數:backup=yes ===>意思是,如果目標路徑下,有與我同名但不同內容的文件時,在覆蓋前,對目標文件先進行備份。
ansible webB -m copy -a "src=/service/scripts/ dest=/service/scripts/ backup=yes"
6)ansible的script模塊批量運行腳本
ansible all -m script -a "/root/service/mysql/auto_mysql.sh"
在指定的機器上執行本地腳本
3.ansible-playbook的初步使用
playbook的使用,playbook可以把ansible的模塊進行組合
cat test_shell.yaml #playbook的執行模板
--- #開頭三個小-開頭
- hosts: webB
tasks:
- name: test
shell: echo "welcome to yunjisaun" >> /tmp/username
- name: test2
shell: echo "welcome to yunjisuan" >> /tmp/username
模板說明:
--- #開頭必須有三個小-,頂格寫
- hosts: #正文配置代碼的第一級,必須有兩個空格(-占一個空格位)
- host: webB #webB是host參數的值,值和hosts:之間要有一個空格
tasks: #tasks:表示接下來要執行的具體任務
- name: #相對於tasks再多縮進兩個格(-占一個空格位),表示屬於tasks的下一級
- name: test #test只是要執行的具體命令的名字可以隨便寫。name:後還是有一個空格要註意
shell: #表示調用shell模塊執行命令相對於tasks仍舊要多縮進兩個空格
shell: echo "xxx" >> xxx #shell:後邊還是要有個空格,需要註意。
執行playbook配置文件,ansible-playbook test_shell.yaml #執行playbook配置文件
實例:用ansible-playbook,在兩台機器上自動化部署mysql 資料庫
1)準備三台Linux,其中一臺安裝好ansible,三台機器互相連通
2)準備.yaml文件,setup.yaml
---
- hosts: all #hosts文件中全部主機
vars: #定義變數
- dst: "/service/" #變數名為dst
tasks: # 任務
- name: cp cmake mysql #第一個任務名
copy: src=/root/service/mysql/ dest={{ dst }} #拷貝MySQL下的文件到變數dst中
- name: install mysql #第二個任務名
script: /root/service/mysql/auto_mysql.sh #執行腳本模塊, 後邊跟腳本路徑
register: print_result #列印執行結果
- debug: var=print_result
3)準備腳本文件auto_mysql.sh
#!/bin/bash
#in ansible use
#install myysql
#20180731
mysql_tar="mysql-5.6.40.tar.gz"
mysql_dir="mysql-5.6.40"
cmake_tar="cmake-2.8.6.tar.gz"
cmake_dir="cmake-2.8.6"
dest="/service/"
#刪舊版本
rpm -e mariadb-libs --nodeps &>/dev/null
rpm -e mysql mysql-server --nodeps &>/dev/null
#關防火牆
rpm -q make gcc gcc-c++ &>/dev/null
if [ $? -ne 0 ];then
yum -y install make gcc gcc-c++ &>/dev/null
fi
#安裝cmake
cd $dest
tar xf $cmake_tar -C /usr/src/ &>/dev/null
cd /usr/src/$cmake_dir
./configure &>/dev/null && make &>/dev/null && make install &>/dev/null
#刪除包
rm -fr /usr/src/$cmake_dir &>/dev/null
cd $dest
rm -fr $cmake_tar
#安裝依賴
yum -y install ncurses ncurses-devel &>/dev/null
groupadd mysql &>/dev/null
useradd -M -s /sbin/nologin -g mysql mysql &>/dev/null
#解壓源碼包
tar xf $mysql_tar -C /usr/src/ &>/dev/null
#安裝
cd /usr/src/$mysql_dir
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc &>/dev/null &&make &>/dev/null &&make install &>/dev/null
#優化
cd /usr/local/mysql
cp support-files/my-default.cnf /etc/my.cnf &>/dev/null
#安裝數據
yum -y install autoconf &>/dev/null && /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql &>/dev/null
echo "PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
source /etc/profile &>/dev/null
chown -R mysql:mysql /usr/local/mysql/ &>/dev/null
cp support-files/mysql.server /etc/init.d/mysqld &>/dev/null
chmod +x /etc/init.d/mysqld
sed -i -e '1a #chkconfig: 35 50 45' /etc/init.d/mysqld
cd $dest
rm -fr /usr/src/$mysql_dir &>/dev/null
rm -fr $mysql_tar
#啟動服務
/usr/sbin/chkconfig --add mysqld
/etc/init.d/mysqld start
3)準備好安裝包
cmake-2.8.6.tar.gz mysql-5.6.40.tar.gz放到與腳本同一目錄下
4)ansible-playbook setup.yaml
剩下的時間,你可以喝杯茶了,休息一下。兩台機器部署完成,登錄下機器看是否服務啟動
mysql -uroot -p123456 -h ip
成功登錄。