301wordpressseo云優(yōu)化如何
一、集群批量管理-密鑰認(rèn)證
1、概述
管理更加輕松:兩個(gè)節(jié)點(diǎn),通過(guò)密鑰形式進(jìn)行訪問(wèn),不需要輸入密碼,僅支持單向.
服務(wù)要求(應(yīng)用場(chǎng)景):
- 一些服務(wù)在使用前要求我們做秘鑰認(rèn)證.
- 手動(dòng)寫批量管理腳本.
名字: 密鑰認(rèn)證,免密碼登錄,雙機(jī)互信.
2、原理
稅鑰對(duì):
公鑰:public key 一般以 .pub 結(jié)尾.
私鑰:private key 沒(méi)有特殊的結(jié)尾
3、上手指南
基本檢查
#檢查網(wǎng)絡(luò)是否能通
ping ip地址
#檢查端口連通性。telnet ip 22也可以,nmap多用于多ip和掃描所有端口
nmap -p22 ip地址
3.1、創(chuàng)建密鑰對(duì)
只能創(chuàng)建一次,否則再次創(chuàng)建會(huì)導(dǎo)致密鑰失效。說(shuō)明其他服務(wù)通過(guò)秘鑰鏈接的全部失效
ssh-keygen -t rsa
#注意創(chuàng)建的啥時(shí)候也可以不加-t
通過(guò)rsa方法對(duì)數(shù)據(jù)進(jìn)行加密,
[root@localhost .ssh]# tree
.
├── id_rsa
└── id_rsa.pub
3.2、分發(fā)公鑰
#傳給你需要免密測(cè)試的那臺(tái)機(jī)器(-i /root/.ssh/id_rsa.pub可省略)
ssh-copy-id root@IP地址
ssh-copy-id -i /root/.ssh/id_rsa.pub root@IP
#傳到對(duì)端服務(wù)器改名為
[root@localhost .ssh]# tree
.
├── authorized_keys
3.3、連接測(cè)試
ssh root@IP地址
4、自動(dòng)化創(chuàng)建與分發(fā)密鑰
阻礙:
- 創(chuàng)建密鑰對(duì)
- 分發(fā)公鑰的時(shí)候:yes/no(yes后會(huì)把信息保存到.ssh/known_hosts)
- 分發(fā)公鑰的時(shí)候:輸入密碼
4.1、自動(dòng)化創(chuàng)建密鑰
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
-f 用于指定私鑰的位置
-P 密碼短語(yǔ) 設(shè)置為空
4.2、自動(dòng)化分發(fā)公鑰
sshpass -p*** ssh-copy-id -oStrictHostKeyChecking=no IP地址#安裝密碼提供密碼
yum install -y sshpass
#sshpass命令基本使用
-p 指定密碼:
sshpass -p*** ssh 10.0.0.7 hostname -I
#使用sshpass 與ssh-copy-id分發(fā)公鑰
sshpass -p*** ssh-copy-id -oStrictHostKeyChecking=no IP
補(bǔ)充說(shuō)明:
sshpass適用于給ssh相關(guān)的命令提供密碼:ssh,scp,ssh-copy-id.
阻礙:第1次連接的時(shí)候提示yes/no
溫馨提示:第1次遠(yuǎn)程的提示 yes/no,主機(jī)密鑰信息檢查,輸入yes后存放到~/.ssh/known_hosts 解決思路:臨時(shí)取消即可,連接的時(shí)候不檢查主機(jī)信息、-oStrictHostKeychecking=no 臨時(shí)不檢查主機(jī)信息。
SSH使用密鑰對(duì)來(lái)進(jìn)行身份驗(yàn)證和加密通信。當(dāng)你連接一個(gè)未知的主機(jī)時(shí),SSH會(huì)生成一個(gè)主機(jī)密鑰對(duì),并將公鑰發(fā)送給你的客戶端。你的客戶端會(huì)提示你是否要保存這個(gè)公鑰。如果你選擇保存,該公鑰將被存儲(chǔ)在你的本地計(jì)算機(jī)上的一個(gè)文件中,通常是 known_hosts 文件中。之后,當(dāng)你再次連接該主機(jī)時(shí),SSH會(huì)使用這個(gè)已保存的公鑰來(lái)驗(yàn)證主機(jī)的身份,以確保連接的安全性。
4.3、自動(dòng)化創(chuàng)建密鑰與分發(fā)腳本
1.0
#!/bin/bash
# author: linux皆文件
# version: v1.0
# desc: creating key, distributing key# 1 vars
password=1
ips="10.0.0.7 10.0.0.31"# 1.4 Networking or not
# 1.5 Whether yum is supported# 2 Creating a key_pair
if [ -f ~/.ssh/id_rsa ] ;thenecho "The key_pair already exists"
elseecho "Creating a key_pair..."ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
fi# 3 Batch send public_key through a loop
for ip in $ips
dosshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStricHostKeyChecking=no $ip &>/dev/nullecho "$ip success..."
1.1
#!/bin/bash
# author: linux皆文件
# version: v1.1
# desc: creating key, distributing key# 1 vars
password=a
ips="10.0.0.7 10.0.0.31"
. /etc/init.d/functions# 1.4 Networking or not
# 1.5 Whether yum is supported# 2 Creating a key_pair
if [ -f ~/.ssh/id_rsa ] ;thenecho "The key_pair already exists"
elseecho "Creating a key_pair..."ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/nullif [ $? -eq 0 ] ;thenaction "Key_pair created successfully" /bin/trueelseaction "Key_pair creation failure" /bin/falsefi
fi# 3 Batch send public_key through a loop
for ip in $ips
dosshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/nullif [ $? -eq 0 ] ;thenaction "$ip success..." /bin/trueelseaction "$ip failure..." /bin/falsefi
done
密鑰自動(dòng)化檢查腳本
[root@m01 ~]# cat /server/scripts/check.sh
#!/bin/bash
# author: linux皆文件
# desc: 批量在所有機(jī)器上執(zhí)行命令
for ip in 10.0.0.7 10.0.0.31
dossh $ip hostname
done
二、集群自動(dòng)化維護(hù)-必備工具-Ansible
官方文檔:鏈接指南
linux下幫助指令:ansible-doc -s 摸塊名稱
1、概述
自動(dòng)化運(yùn)維: 批量管理,批量分發(fā),批量執(zhí)行,維護(hù)
Ansible是python寫的.
批量管理工具 | 說(shuō)明 |
---|---|
Ansible | 無(wú)客戶端,基于ssh進(jìn)行管理和維護(hù) |
Saltstack | 需要安裝客戶端,基于shh進(jìn)行管理 |
terraform | tf批量管理基礎(chǔ)設(shè)施(批量創(chuàng)建100臺(tái)公有云)例如:騰訊云 |
2、Ansible管理架構(gòu)
- Inventory 主機(jī)清單:被管理主機(jī)的ip列表,分類
- ad-hoc模式:命令行批量管理(使用ans模塊),臨時(shí)任務(wù)
- playbook 劇本模式:類似于把操作寫出腳本,可以重復(fù)運(yùn)行這個(gè)腳本
3、配置與部署
3.1、部署
yum install -y ansible
3.2、配置
修改配置文件
- 關(guān)閉主機(jī)認(rèn)證Host_key_checking
- 開(kāi)啟日志功能.
root@m01 ~]# egrep -nv '^$|^#' /etc/ansible/ansible.cfg
10:[defaults]
71:host_key_checking = False
111:log_path = /var/log/ansible.log
327:[inventory]
340:[privilege_escalation]
346:[paramiko_connection]
370:[ssh_connection]
431:[persistent_connection]
445:[accelerate]
460:[selinux]
469:[colors]
485:[diff]
4、Ans-inventory主機(jī)清單
- 什么是主機(jī)清單: 讓ansible管理的節(jié)點(diǎn)的列表.
- ansible默認(rèn)讀取在/etc/ansible/hosts文件,并非/etc/hosts.
- 未來(lái)實(shí)際使用中一般我們會(huì)把主機(jī)清單文件存放在指定的目錄中,運(yùn)行ansible的時(shí)候通過(guò)
- i
選項(xiàng)指定主機(jī)清單文件即可.
4.1、主機(jī)清單必會(huì)格式
主機(jī)清單格式: [分類或分組的名字] #注意分類要體現(xiàn)出服務(wù)器的作用 ip地址或主機(jī)名或域名 #注意主機(jī)名要能解析才行
[root@m01 ~]# cat /etc/ansible/hosts
[backup]
10.0.0.41
[web0]
10.0.0.7
主機(jī)清單分組詳解:
需要我們進(jìn)行分組:按照層次進(jìn)行分組,按照功能/業(yè)務(wù).
ansible命令格式
ansible主機(jī)ip / 分組 / all
-m 指定使用的模塊名字,這里的ping模塊用于檢查被管理端是否可以訪問(wèn)。
4.2、子組
創(chuàng)建新的分組data包含已有的分組web和nfs
[root@m01 ~]# cat /etc/ansible/hosts
[backup]
10.0.0.41
[web]
10.0.0.7
[data:children]
web
backup[root@m01~]# ansible data -m ping
4.3、指定用戶和密碼
不推薦,推薦先配置密鑰認(rèn)證,然后管理
[root@m01~]# cat /etc/ansible/hosts
[web]
10.0.0.7
[nfs]
10.0.0.31 ansible_user=root ansible_password=*** ansible_port=22
4.4、報(bào)出錯(cuò)誤提示
- 主機(jī)清單為空
- 沒(méi)有關(guān)閉主機(jī)認(rèn)證,去配置文件中host_key_checking = False
5、Ansible必知必會(huì)模塊
-
Ansible模塊概述
- ansible中的模塊就類似于Linux中的命令,我們Linux命令管理系統(tǒng),我們通過(guò)ansible模塊實(shí)現(xiàn)批量管理.
- ansible中模塊一般相當(dāng)于Linux中的一些命令.yum模塊,file模塊,user模塊.
- ansible中的模塊擁有不同的選項(xiàng),這些選項(xiàng)一般都是一些單詞.。Ansible模塊 modules
-
Ansible中通過(guò)各種模塊實(shí)現(xiàn)批量管理
-
一般來(lái)說(shuō)這些模塊對(duì)應(yīng)著Linux里面的基本操作或服務(wù)管理
-
找出Linux場(chǎng)景操作對(duì)應(yīng)的模塊即可
模塊分類 | 模塊 |
---|---|
命令和腳本模塊 | command模塊 ans默認(rèn)的模塊,執(zhí)行簡(jiǎn)單命令,不支持特殊符號(hào) |
shell模塊 執(zhí)行命令,支持特殊符號(hào) | |
script模塊 分發(fā)腳本并執(zhí)行 | |
文件 | file創(chuàng)建目錄,文件,軟連接, |
copy遠(yuǎn)程分發(fā)文件,修改權(quán)限,所有者,備份 | |
服務(wù) | systemd服務(wù)管理 |
service服務(wù)管理(了解) | |
軟件包 | yum源 yum_repository |
yum命令 | |
get_ur1下載軟件 | |
系統(tǒng)管理 | mount模塊 掛載 |
cron模塊定時(shí)任務(wù) | |
用戶管理 | group模塊 管理用戶組 |
user模塊 管理用戶 | |
其他可以研究 | 壓縮解壓(unarchive),rsync模塊(synchronize),數(shù)據(jù)庫(kù)模塊(mysql_db,mysq1_user)… |
其他 | ansible管理docker k8s zabbix grafana … |
用于調(diào)試模塊 | ping模塊檢查ansible與其他節(jié)點(diǎn)連通性. |
debug模塊用于檢查/顯示變量 |
ansible | |||
---|---|---|---|
ansible | 主機(jī)清單(all/web/172.16.1.7) | -m模塊 | -a模塊中的選項(xiàng) |
-i 指定主機(jī)清單文件 | |||
-m 指定模塊 | |||
-a 指定模塊中的選項(xiàng) |
5.1、命令與腳本模塊
a)command 模塊
可以省略。
是ans默認(rèn)的模塊,適用于執(zhí)行簡(jiǎn)單的命令,不支持特殊符號(hào).
批量獲取所有主機(jī)的主機(jī)名
ansible all -m command -a 'hostname'
b)shell模塊
與command模塊類似,但是shell支持特殊符號(hào).
批量獲取ip地址
ansible all -m shell -a "ip a s eth0 |awk -F'[ /]+' 'NR==3{print \$3}' "
溫馨提示:
shell模塊不推薦執(zhí)行較為復(fù)雜的指令,如果需要執(zhí)行放在腳本中執(zhí)行
c)script模塊
分發(fā)腳本(傳輸腳本)
運(yùn)行腳本
ansible all -m script -a '/sh/xunjian.sh'
5.2、文件相關(guān)模塊
a)file模塊
管理文件,管理目錄,軟連接
file模塊 | 模塊說(shuō)明 |
---|---|
path | 路徑(目錄,文本)必須寫 |
src | 源文件,一般用于link(創(chuàng)建軟連接模式)用于指定源文件 |
state | 狀態(tài)(模式) state=directory 創(chuàng)建目錄 state=file (默認(rèn)) 更新文件,如果文件不存在也不創(chuàng)建 state=link 創(chuàng)建軟連接 state=touch 創(chuàng)建文件 |
state | state=absent 刪除(注意遞歸刪除目錄) |
mode | mode=755 創(chuàng)建并修改權(quán)限 |
owner | owner=root |
group | group=root |
創(chuàng)建文件
ansible all -m file -a 'path=/data/test.txt state=touch'
創(chuàng)建目錄
ansible all -m file -a 'path=/app/a/b/c/d state=directory'
修改權(quán)限
ansible all -m file -a 'path=/data mode=700'
刪除目錄及其下面文件
ansible all -m file -a 'path=/app/ state=absent'
不能表示刪除目錄下的文件(表示只刪除app目錄下名叫
*
的文件)ansible all -m file -a 'path=/app/* state=absent'
創(chuàng)建軟連接 /etc/hosts創(chuàng)建軟連接到/opt/下
ansible all -m file -a 'src=/etc/hosts path=/opt/hosts state=link'
b)copy模塊
批量分發(fā):scp
copy模塊 | |
---|---|
src | source 源文件 |
dest | destination 目標(biāo) |
backup | backup=yes 則會(huì)在覆蓋前進(jìn)行備份 |
mode | 修改權(quán)限 |
owner | 修改為指定所有者 |
group | 修改為指定用戶組 |
把本機(jī)解析hosts覆蓋全部
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'
5.3、服務(wù)管理-sysytemd
systemd模塊相當(dāng)于是linux systemctl命令:
- 開(kāi)啟/關(guān)閉/重啟服務(wù)
- 開(kāi)機(jī)自啟動(dòng)
systemd模塊 | 說(shuō)明 |
---|---|
name | 用于指定服務(wù)名稱 |
enabled | yes開(kāi)機(jī)器啟動(dòng)(yes/no) |
state | 表示服務(wù)開(kāi),關(guān),重啟. state=started 開(kāi)啟 state=stopped 關(guān)閉 state=reloaded 重讀配置文件 starte=restsrted 重啟(關(guān)閉再開(kāi)啟) |
daemon-reload | yes是否重新加載對(duì)應(yīng)的服務(wù)的管理配置文件(未來(lái)講解書(shū)寫systemctl配置文件) |
ansible all -m systemd -a 'name=crond enabled=yes state=started'
#關(guān)閉服務(wù)
ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
#重啟ssh
ansible all -m systemd -a 'name=sshd state=reloaded'
額外擴(kuò)展: systemd模塊適用于目前大部分的Linux系統(tǒng). service模塊適用于管理舊的Linux系統(tǒng).
5.4、軟件管理
yum模塊
get_url模塊,wget命令
yum_repository模塊yum源配置模塊,未來(lái)可以通過(guò)copy模塊
a)yum模塊
yum模塊 | |
---|---|
name | 指定軟件包名字,可以指定多個(gè),通過(guò) ,分割 |
state | installed 安裝(也可以寫為present)(默認(rèn)) removed 刪除(也可以號(hào)為absent) lastest 安裝或更新 |
update_cache | 可以設(shè)置為no加加速,表示不更新本地yur緩存,實(shí)際應(yīng)用建議開(kāi)啟 |
ansible all -m yum -a 'name=htop,tree,lrzsz,sshpass'
b)get_url 模塊
相當(dāng)于是wget命令.所有主機(jī)能訪問(wèn)網(wǎng)絡(luò)才行.
推薦在管理節(jié)點(diǎn)下載好,使用copy僅分發(fā)即可.
get_url下載功能 | |
---|---|
url | 指定要下載的地址 |
dest | 下載到哪個(gè)目錄 |
ansible all -m file -a 'path=/app/tools/ state=directory'
ansible all -m get_url -a 'url="https://mirrors.aliyun.com/zabbix/zabbix/6.0/rh el/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpm" dest=/app/tools/'
c)yum_repository模塊
未來(lái)書(shū)寫好yum配置文件,copy分發(fā)過(guò)去即可.
ansible all -m copy -a 'src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/ backup=yes'
yum源模塊 yum_repository | |
---|---|
name | yum源中名字 [epel] |
description | yum源的注釋說(shuō)明 對(duì)應(yīng)的 是name的內(nèi)容 |
baseurl | yum源中 baseurl 下載地址 |
enabled | 是否啟動(dòng)這個(gè)源 yes/no |
gpgcheck | 否啟動(dòng)gpgcheck功能 no |
file | 指定yum源的文件 自動(dòng)添加.repo 默認(rèn)與模塊名字一致, |
5.5、用戶管理
user用戶管理:useradd,userdel
group用戶組管理:groupadd
user模塊
user模塊 | |
---|---|
name | 用戶名 |
uid | 指定uid |
group | 指定用戶組,一般用于事先創(chuàng)建好了用戶組,通過(guò)選項(xiàng)指定下 |
shell | 指定命令解釋器:默認(rèn)是/bin/bash /sbin/nologin |
create_home | 是否創(chuàng)建家目錄(yes/no) |
state | present 添加 absent 刪除 |
創(chuàng)建www-ans用戶uid 2000虛擬用戶
ansible all -m user -a 'name=www-ans uid=2000 shell=/sbin/nologin create_home=no state=present'
批量更新密碼
ansible all -m user -a "name=test password={{ '1' | password_hash('sha512', 'lidao') }} state=present"
ansible all -m shell -a 'echo 1 |passwd --stdin test'
關(guān)于{{}}相關(guān)的解釋 {{ ‘1’ | password_hash(‘sha512’, ‘lidao’) }} 表示1是密碼,經(jīng)過(guò)管道,傳遞給了password_hash()插件, sha512加密算法,lidao是隨機(jī)字符用于生成隨機(jī)加密后的密碼.
group模塊
group模塊 | |
---|---|
nane | 指定用戶組名字 |
gid | 指定組的gid |
state | present添加 absent 刪除 |
6、mount模塊
實(shí)現(xiàn)mount命令進(jìn)行掛載可以修改/etc/fstab實(shí)現(xiàn)永久掛載.
mount選項(xiàng) | 說(shuō)明 |
---|---|
fstype | filesystem type指定文件系統(tǒng),xfs,ext4,nfs |
src | 源地址(43.135.140.22:/backup-nfs/) |
path | 掛載點(diǎn)(要把源掛載到哪里) |
state | 參考下表 |
mount模塊的state參數(shù)可使用的值 | |
---|---|
absent | 卸載升修改fstab |
unmounted | 卸載不修改/etc/fstab |
present | 僅修改/etc/fstab 不掛載 |
mounted | 掛載并修改/etc/fstab |
remounted | 重新掛載 |
通過(guò)ans管理在web01上掛載nfs:/data掛載到web01的/ans-upload/
nfs 服務(wù)端配置,目錄
web 掛載
web 是否安裝nfs
web 創(chuàng)建掛載點(diǎn)#在web服務(wù)器上安裝nfs
ansible web -m yum -a 'name=nfs-utils state=present'
#創(chuàng)建掛載點(diǎn)
ansible web -m file -a 'path=/ans-upload/ state=directory'
#掛載nfs
ansible web -m mount -a 'src=172.16.1.31:/data/ path=/ans-upload/ fstype=nfs state=mounted'
#檢查
ansible web -a 'df -h'
ansible web -a 'grep upload /etc/fstab '
7、cron模塊
用于管理系統(tǒng)的定時(shí)任務(wù),替代了crontab -e功能.
cron模塊 選項(xiàng) | 說(shuō)明 |
---|---|
name | 定時(shí)任務(wù)名字(一定要加上),對(duì)應(yīng)下面注釋的內(nèi)容 |
minute | 分鐘 minute=“*/2” |
hour | 小時(shí) |
day | 日期 |
month | 月份 |
week | 周幾 |
job | 指定命令或腳本(定向到空)job=“/sbin/ntpdate ntp1.aliyun.com &>/dev/null” |
state | present 添加定時(shí)任務(wù)(默認(rèn)) absent 刪除 |
創(chuàng)建定時(shí)任務(wù)
ansible all -m cron -a 'name="sync time by linux" minute="*/3" job="/sbin/ntpdate ntp1.aliyun.com &>/dev/null"