ansible自動化運維入門

来源:https://www.cnblogs.com/mushou/archive/2018/07/31/9398405.html
-Advertisement-
Play Games

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

  1. ansible_ssh_host ===>主機IP
  2. ansible_ssh_port ===>ssh的預設埠
  3. ansible_ssh_user ===>ssh的用戶名
  4. 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

  1. [root@ansible .ssh]# ansible all -m ping
  2. webA | SUCCESS => {
  3.     "changed": false,
  4.     "ping": "pong"
  5. }
  6. webB | SUCCESS => {
  7.     "changed": false,
  8.     "ping": "pong"
  9. }

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的執行模板

  1. ---         #開頭三個小-開頭
  2. - hosts: webB  
  3.   tasks:       
  4.   - name: test
  5.     shell: echo "welcome to yunjisaun" >> /tmp/username
  6.   - name: test2
  7.     shell: echo "welcome to yunjisuan" >> /tmp/username
  8. 模板說明:
  9. ---  #開頭必須有三個小-,頂格寫
  10. - hosts   #正文配置代碼的第一級,必須有兩個空格(-占一個空格位)
  11. - host: webB   #webB是host參數的值,值和hosts:之間要有一個空格
  12.   tasks:        #tasks:表示接下來要執行的具體任務
  13.   - name:     #相對於tasks再多縮進兩個格(-占一個空格位),表示屬於tasks的下一級
  14.   - name: test  #test只是要執行的具體命令的名字可以隨便寫。name:後還是有一個空格要註意
  15.     shell:  #表示調用shell模塊執行命令相對於tasks仍舊要多縮進兩個空格
  16.     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

成功登錄。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在做mvc跨控制器傳值的時候發現一個問題,就是有時候TempData的值為null,然後查閱了許多資料,發現了許多都是邏輯什麼的,但是真正解決的辦法什麼的都沒有案例, 於是就把自己的代碼當成案例給貼出來,方便更直觀的解決問題。 因為TempData生命周期確實很短,所以需要持久化一下: 在當前A ...
  • 1、介紹 Logging組件是微軟實現的日誌記錄組件包括控制台(Console)、調試(Debug)、事件日誌(EventLog)和TraceSource,但是沒有實現最常用用的文件記錄日誌功能(可以用其他第三方的如NLog、Log4Net。之前寫過NLog使用的文章)。 2、預設配置 新建.Net ...
  • [TOC] 一、前言 本教程是入門基礎教程,主要是筆者在項目中使用MongoDB .Net官方驅動對MongoDB內嵌文檔的操作時遇到了很多不方便的情況,踩了很多的坑,所以單獨整理出來一篇文章,來講一講筆者踩坑的過程。 筆者水平有限,如有錯誤還請批評指正! (一) 運行環境 .net版本 .Net ...
  • [TOC] 因項目需要,對於部分控制器需要實現偽靜態方便搜索引擎優化(SEO),過程比較曲折,簡單的記錄一下。 1.什麼是偽靜態?為什麼要實現偽靜態? 偽靜態:動態網頁通過重寫URL的方法實現去掉動態網頁的參數,但在實際的網頁目錄中並沒有必要實現存在重寫的頁面。 例如:我們當訪問地址http://w ...
  • [TOC] 一、 前言 這是筆者在參與一個小型項目開發時所遇到的一個BUG,因為項目經驗不足對Entity Framwork框架認識不足導致了這一BUG浪費了一天的時間,特此在這裡記錄。給自己一個警醒希望大家遇到相同問題能幫助到大家。 註:筆者水平有限,大家發現錯誤望批評指正。 二、問題背景 1.本 ...
  • Dictionary<string, string>是一個泛型,什麼是泛型?使用泛型下麵是用泛型來重寫上面的棧,用一個通用的數據類型T來作為一個占位符,等待在實例化時用一個實際的類型來代替。讓我們來看看泛型的威力: public class Stack<T> { private T[] m_item ...
  • 1. 概念: WFI(Wait for interrupt)和WFE(Wait for event)是兩個讓ARM核進入low power standby模式的指令,由ARM architecture定義,由ARM core實現。 2. WFI和WFE 2.1 相同點 WFI和WFE的功能非常類似, ...
  • 字元串是shell編程中最常用最有用的數據類型(除了數字和字元串,也沒啥其它類型好用了),字元串可以用單引號,也可以用雙引號,也可以不用引號。 但是單引號和雙引號是有區別的: 單引號: 單引號里的任何字元都會原樣輸出,單引號字元串中的變數是無效的; 單引號字串中不能出現單獨一個的單引號(對單引號使用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...