一. ansible#
ansible
是什麼?由哪些組成?
有什麼作用?
paramiko --> 這個庫 / 模組 ansible 實現 ssh 功能
是什麼?
ansible 是一個自動化運維工具的名稱
由哪些組成?
ansible 組成:
1、host inventory --# 定義客戶機,可以對客戶機進行分類:db 類,web 類... 等等
2、playbook --# 劇本 讓主機按照我給定的劇本去完成一些事情
3、module --# 模組 實現一個個功能的程序
4、pluging --# 插件 實現一些額外的小功能
---------------------------------------
有什麼作用?
裝軟體、卸軟體、改配置、打補丁、做備份、跑腳本(運維工作)
---------------------------------------
ansible 是 python 寫的,底層是 ssh
---------------------------------------
paramiko --》 這個庫 / 模組 ansible 實現 ssh 功能
---------------------------------------
sshpass 模組 --》linux 命令 實現 ssh 登錄
---------------------------------------
[root@cPen_A ~]# ansible --version # 注:查看版本
ansible 2.9.15
二. grep#
#grep相關命令
[root@cPen_B network-scripts]# cat /etc/passwd|grep -B 5 mail #注:查看前5行
[root@cPen_B network-scripts]# cat /etc/passwd|grep -A 5 mail #注:查看後5行
[root@cPen_B network-scripts]# cat /etc/passwd|grep -C 5 mail #注:中間 查看前後5行
[root@cPen_A ~]# vim /etc/ansible/ansible.cfg #注:ansible配置文件
forks = 5 #注:起5個進程去處理 -f 選項
ip地址顯示不出來
service NetworkManager stop #注:這個服務影響的
service network restart
template 模板 --> 絕大部分固定的,有幾個是變數,根據ansible取機器上的值
[root@cPen_A ansible]# ansible web -m setup #注:查看節點伺服器的信息 以字典形式展示
192.168.0.79 | SUCCESS => {
"ansible_facts": {
……
}
[root@cPen_A ansible]# ansible web -m setup -a "filter=ansible_all_ipv4_addresses"
#注:過濾獲得指定信息
#注:獲取 ansible-demo3 主機的 IPV4 地址
192.168.0.79 | SUCCESS => {
"ansible_facts": { #注:ansible_事實
"ansible_all_ipv4_addresses": [
"192.168.0.79"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
==========================================================
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用戶名", "口令")
==========================================================
解決使用密碼連接,第一次ssh過去的時候,需要輸入yes的問題
[root@C ansible]# vim hosts
[web]
192.168.0.77
[db]
192.168.0.35 ansible_ssh_user=root ansible_ssh_pass=123456
[root@C ansible]# vim ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False
api 接口 --> application interface
#注:寫接口
json 有什麼用?輕量級的數據交換格式
[root@cPen_A ansible]# ansible-doc -l #注:查看ansible的模組
#注:doc 文檔,l list
lastest表示安裝 不是指最新的
專案
ansible
專案名稱:使用ansible批量部署nginx集群和mysql集群
專案環境:centos8.2,ansible2.9.15,nginx1.19.5,mysql5.7.31
專案描述:
使用ansible去批量部署6台nginx伺服器,1台NFS文件伺服器,3台MySQL伺服器,其中nginx採用源碼編譯安裝,MySQL採用二進制安裝,NFS採用yum安裝方法。nginx的編譯安裝和MySQL的二進制安裝過程提前編寫好腳本,通過ansible下發到nginx和MySQL伺服器上執行,全程採用playbook來實現批量自動化部署
專案步驟:
1.部署好11台linux虛擬機,全部的配置,採用1核2G的內存的配置,安裝好centos8.2的系統。
2.然後在一台linux系統裡安裝部署ansible,採用yum安裝。
3.編寫好一鍵安裝nginx的腳本,連同nginx.conf配置文件都指定好內容,方便後面的playbook使用。
4.編寫好一鍵安裝MySQL的腳本,連同my.cnf配置文件都指定好內容,方便後面的playbook使用。
5.在ansible伺服器和所有的nginx,MySQL,NFS伺服器之間建立ssh免密通道
6.最後編寫ansible的playbook文件去統一部署nginx,MySQL,nfs伺服器
7.測試整個安裝部署是否成功
專案心得:
1.對ansible的在大規模集群裡的使用有了一些了解,深入體會到批量部署的便捷
2.對集群有了一定的認識
3.編寫腳本的能力有了提升
4.自己對*個故障的排除,提升自己的troubleshooting的能力
============================================================================================
寫專案時
1.擺數據
nginx
是什麼?有什麼用?
nginx 是一個 web 伺服器
web 就是網站
dns
domain name system 域名解析系統
www.aliyun.com --> ip
為什麼需要 DNS?
方便記住某個網站名字
ip 很難記
正向解析:域名 --> ip
反向解析: ip --> 域名
在瀏覽器輸入 www,baidu.com 回車後發生了什麼?
1、瀏覽器快取
2、hosts 文件
3、本地 dns 伺服器
4、轉發伺服器
5、根域名伺服器
6、迭代過程
7、遞歸返回
8、直接訪問
CDN 內容分發網路:加速 (就近解析)
#注:快取有滯後的
#注:視頻業務大量使用 CDN
記錄類型
A 記錄 --> address record
www --> 120.77.248.190
需要上線一個自己的網站,有哪些流程 (工作要做)?
1、購買雲伺服器,部署 nginx,mysql,Python 等環境
2、購買域名 www.chenpeng.com,綁定域名和雲伺服器 --> A 記錄 --> 备案 (伺服器在國內必須备案)
3、開發網站 --> 寫網站
4、測試網站
5、上傳到雲伺服器的 nginx 網頁根目錄下 --> 上線
[root@cPen_C lianxi]# yum provides nslookup
#注:查看命令從哪個包安裝
NFS
network file system 網路文件系統
有什麼用?
共享文件 --> 多台伺服器使用相同的內容
#注:NFS 是最廉價的解放方案,受網路影響、伺服器硬體配置低,磁碟的速度,CPU,內存,網路帶寬都是比較差的
#注:比較貴的解決方案:上專業存儲
#注:更好的是 SAN 光纖設備
SAN -->
NAS --> 網路附加存儲
SAN 一般指存儲區域網路。存儲區域網路(Storage Area Network,簡稱 SAN)採用網狀通道(Fibre Channel ,簡稱 FC,區別與 Fiber Channel 光纖通道)技術,通過 FC 交換機連接存儲陣列和伺服器主機,建立專用於數據存儲的區域網路
NAS(Network Attached Storage:網路附屬存儲)按字面簡單說就是連接在網路上,具備資料存儲功能的裝置,因此也稱為 “網路存儲器”。
ansible
專案
dns
nginx 一鍵部署
網站上線
NFS
SAN
NAS
nginx一鍵安裝 腳本
#!/bin/bash
#author:cali
#time:2020-49
#company:sanchuang
#email:695811769@qq.com
mkdir -p /nginx2
cd /nginx2
#download nginx
curl -O http://nginx.org/download/nginx-1.17.9.tar.gz
#創建用戶
useradd lihu
#解壓
tar xf nginx-1.17.9.tar.gz
#進入解壓目錄
cd nginx-1.17.9
#解決依賴關係
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make
#配置
./configure --prefix=/usr/local/nginx9 --user=lihu --group=lihu --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --with-stream
#編譯和安裝
make -j 2 ; make install
#開機啟動
echo "/usr/local/nginx9/sbin/nginx" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local
#修改PATH變數
echo "PATH=/usr/local/nginx9/sbin:$PATH" >>/etc/profile
PATH=/usr/local/nginx9/sbin:$PATH
#啟動
nginx