linux運(yùn)維:一鍵搭建集群腳本流程

學(xué)習(xí)linux運(yùn)維已經(jīng)3個(gè)多月了,搭建8臺(tái)的小型集群對(duì)學(xué)習(xí)效果的一次檢驗(yàn)和復(fù)習(xí)


一鍵搭建集群腳本流程.jpeg

其實(shí)還可以把分發(fā)公鑰也寫(xiě)到各服務(wù)器的腳本里,甚至在遍歷IP腳本里用三次for循環(huán)來(lái)免去生成IP文件及腳本列表的依賴(lài),但這這些只是在此流程上的優(yōu)化,總的思路還是一樣的.當(dāng)然用工具也是一樣的,比如sshpass免交互工具,ansible自動(dòng)化工具等等,這里用純腳本的思路,更重要的是能對(duì)學(xué)習(xí)來(lái)一次全面復(fù)習(xí).

因?yàn)閷?shí)體機(jī)與虛擬機(jī)在用密鑰連接出現(xiàn)bug,本次直接在管理機(jī)m01上操作,所以只有7臺(tái)服務(wù)器的腳本.

主機(jī)網(wǎng)絡(luò)參數(shù)配置:

主機(jī)名 網(wǎng)卡ens33 網(wǎng)卡ens37 用途
lb01 10.0.0.5/24 172.16.1.5/24 nginx負(fù)載均衡服務(wù)器01
lb02 10.0.0.6/24 172.16.1.6/24 nginx負(fù)載均衡服務(wù)器02
web02 10.0.0.7/24 172.16.1.7/24 apache web服務(wù)器
web01 10.0.0.8/24 172.16.1.8/24 nginx web服務(wù)器
db01 10.0.0.51/24 172.16.1.51/24 mysql數(shù)據(jù)庫(kù)服務(wù)器
nfs01 10.0.0.31/24 172.16.1.31/24 NFS存儲(chǔ)服務(wù)器
backup 10.0.0.41/24 172.16.1.41/24 存儲(chǔ)服務(wù)器
m01 10.0.0.61/24 172.16.1.61/24 管理服務(wù)器

必要的配置文件安裝包等

深度截圖_選擇區(qū)域_20190424141318.png

深度截圖_選擇區(qū)域_20190424141529.png

腳本
遍歷IP.sh

#!/bin/sh
echo "一鍵搭建集群腳本啟動(dòng)..."
#清空ip.txt
> ip.txt
#因?yàn)閐hcp設(shè)定在此區(qū)間
for i in {100..254}
do
    ip=10.0.0.$i
    ping -c1 -w1 $ip &>/dev/null
    if [ $? -eq 0 ];then
    echo "獲取到$ip"
    echo "$ip" >>ip.txt
    fi
done
echo "ip查找完成"
sh sshdsapub.sh

ssh公鑰分發(fā)(sshdsapub.sh)

#!/usr/bin/expect
#!/bin/sh
pass="password"
#檢測(cè)本機(jī)上已經(jīng)有公鑰
ls ~/.ssh/id_dsa.pub
if [ $? -eq 0 ];then
    echo "ssh-keygen已創(chuàng)建"
else
    echo "ssh-keygen未創(chuàng)建"
    ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa >/dev/null 2>&1
    echo "ssh-keygen已創(chuàng)建"
fi
for i in $(cat ip.txt)
do
    echo "正在往$i推送公鑰"
    #expect免交互推送公鑰
    /usr/bin/expect <<-EOF
    set timeout 10
    spawn ssh-copy-id -i /home/xhlieren/.ssh/id_dsa.pub root@$i
    expect {
        "yes/no" { send "yes\r"; exp_continue }
        "password:" { send "$pass\r" }
    }
    expect eof
EOF
done
wait
echo "公鑰推送完成"
sh 集群服務(wù)器腳本IP注入.sh

集群服務(wù)器腳本IP注入.sh
初始時(shí),各服務(wù)器安裝配置腳本中(如,backup.sh,nfs.sh...)并沒(méi)有寫(xiě)入IP(因?yàn)閐hcp下,ip并不是固定的),把遍歷到的ip注入到這些腳本的第二行.

#!/bin/bash
echo "ip注入腳本啟動(dòng)"
cp 集群8臺(tái)服務(wù)器腳本分發(fā)配合文本.txt 集群8臺(tái)服務(wù)器腳本分發(fā)配合文本.txt.ori
for i in $(cat ip.txt)
do
    for n in $(cat 集群服務(wù)器腳本分發(fā)配合文本.txt.ori)
    do
        sed -i "2 i\ip=$i" $n
        echo "$n:ip已注入"
        #通過(guò)刪除首行和跳出循環(huán)的方式寫(xiě)入ip,如果有更方便的交替執(zhí)行循環(huán)方式,請(qǐng)告訴我
        sed -i '1d' 集群服務(wù)器腳本分發(fā)配合文本.txt.ori
        break
    done
done
echo "ip注入完成"
rm -f 集群服務(wù)器腳本分發(fā)配合文本.txt.ori
sh 集群服務(wù)器并發(fā)安裝配置優(yōu)化.sh

集群服務(wù)器腳本分發(fā)配合文本.txt
供ip注入及并發(fā)執(zhí)行安裝配置腳本使用的文本,僅寫(xiě)入各服務(wù)器安裝配置腳本名

nfs01.sh
backup.sh
web01.sh
db01.sh
web02.sh
lb01.sh
lb02.sh

集群服務(wù)器并發(fā)安裝配置優(yōu)化.sh

#!/bin/sh
for i in $(cat 集群服務(wù)器腳本分發(fā)配合文本.txt)
do
    #后臺(tái)執(zhí)行各服務(wù)器安裝配置腳本
    {
        echo "$i腳本啟動(dòng)"
        sh $i
    }&
done
#等待所有后臺(tái)腳本全部執(zhí)行完成
wait
echo "集群安裝完成"
sh 集群服務(wù)器重啟.sh

集群服務(wù)器重啟.sh

#!/bin/sh
echo "服務(wù)器重啟腳本開(kāi)啟..."
for i in $(cat ip.txt)
do
    {
        echo "$i重啟中..."
        ssh root@$i reboot
    }&
wait
echo "服務(wù)器重啟完畢,請(qǐng)使用設(shè)定的IP地址連接"

至此,一鍵搭建集群腳本的流程就結(jié)束了


下面是各服務(wù)器的安裝配置腳本,軟件用到的配置文件和軟件包要結(jié)合需求來(lái)設(shè)定
backup.sh
這是未注入ip時(shí)的腳本內(nèi)容

#!/bin/sh

echo "backup服務(wù)器配置中..."
#關(guān)閉防火墻并禁止開(kāi)機(jī)自啟
ssh root@$ip systemcat stop firewalld
ssh root@$ip systemcat disable firewalld
#安裝必要的軟件包
ssh root@$ip yum install -y rsync nfs-utils gcc lib* ntp mailx
#name
ssh root@$ip echo "backup" >/etc/hostname
#ntp時(shí)間同步
ssh root@$ip systemctl enable ntpd
ssh root@$ip systemctl start ntpd
ssh root@$ip timedatectl set-timezone Asia/Shanghai
ssh root@$ip timedatectl set-ntp yes
ssh root@$ip ntpq -p
#配置ens33
scp ~/conf/ifcfg-ens33 root$ip:/etc/sysconfig/network-scripts/ifcfg-ens33
ssh root@$ip sed -i "s#IPADDR=#IPADDR=10.0.0.41#g" /etc/sysconfig/network-scripts/ifcfg-ens33
#配置ens37
scp ~/conf/ifcfg-ens37 root$ip:/etc/sysconfig/network-scripts/ifcfg-ens37
ssh root@$ip sed -i "s#IPADDR=#IPADDR=172.16.1.41#g" /etc/sysconfig/network-scripts/ifcfg-ens37
#配置rsync
ssh root@$ip useradd rsync -s /sbin/nologin -M
scp ~/conf/rsyncd.conf root@$ip:/etc/rsyncd.conf
ssh root@$ip echo "rsync_backup:123456" >/etc/rsync.password
ssh root@$ip chmod 600 /etc/rsync.password
ssh root@$ip mkdir /backup -p
ssh root@$ip chown rsync.rsync /backup/
ssh root@$ip systemcat start rsync
ssh root@$ip systemcat enable rsync
#sersync實(shí)時(shí)同步配置,配合NFS
ssh root@$ip mkdir /data/ -p
ssh root@$ip mkdir /dataweb/ -p
#mail配置
scp ~/conf/mail.rc root@$ip:/etc/mail.rc
#crontab-check_and_del,如果文件存在就直接寫(xiě)入定時(shí)任務(wù),如果文件不存在先創(chuàng)建文件,設(shè)定權(quán)限后再寫(xiě)入定時(shí)任務(wù)
ssh root@$ip ls /var/spool/cron/root
if [ $? -eq 0 ];then
    ssh root@$ip echo "01 00 * * * /usr/bin/sh /server/scripts/check_and_del.sh >/dev/null 2>&1" >>/var/spool/cron/root
else
    ssh root@$ip touch /var/spool/cron/root
    ssh root@$ip chmod 600 /var/spool/cron/root
    ssh root@$ip echo "01 00 * * * /usr/bin/sh /server/scripts/check_and_del.sh >/dev/null 2>&1" >>/var/spool/cron/root
fi
#check_and_del.sh
ssh root@$ip mkdir /server/scripts -p
scp ~/conf/scripts/check_and_del.sh root@$ip:/server/scripts/check_and_del.sh
ssh root@$ip chmod +x /server/scripts/check_and_del.sh
#ssh優(yōu)化
scp ~/conf/sshd_config root@$ip:/etc/ssh/sshd_config
#執(zhí)行完成后刪除第2行ip,注意腳本中其它位置也不要出現(xiàn)"ip=地址",正則匹配指定行刪除還不明白,sed的sg可以指定行匹配,但只會(huì)清空指定行增加行數(shù),而不是刪除行
sed -i "/^ip.*[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/d" backup.sh
#sudo審計(jì)要結(jié)合實(shí)際情況,配置/etc/sudoers文件即可

nfs01.sh

#!/bin/sh
echo "nfs01服務(wù)器配置中..."
#關(guān)閉防火墻并禁止開(kāi)機(jī)自啟
ssh root@$ip systemcat stop firewalld
ssh root@$ip systemcat disable firewalld
#安裝必要的軟件包
ssh root@$ip yum install -y rsync nfs-utils gcc lib* ntp rpcbind
#name
ssh root@$ip echo "nfs01" >/etc/hostname
#ntp時(shí)間同步
ssh root@$ip systemctl enable ntpd
ssh root@$ip systemctl start ntpd
ssh root@$ip timedatectl set-timezone Asia/Shanghai
ssh root@$ip timedatectl set-ntp yes
ssh root@$ip ntpq -p
#配置ens33
scp ~/conf/ifcfg-ens33 root$ip:/etc/sysconfig/network-scripts/ifcfg-ens33
ssh root@$ip sed -i "s#IPADDR=#IPADDR=10.0.0.31#g" /etc/sysconfig/network-scripts/ifcfg-ens33
#配置ens37
scp ~/conf/ifcfg-ens37 root$ip:/etc/sysconfig/network-scripts/ifcfg-ens37
ssh root@$ip sed -i "s#IPADDR=#IPADDR=172.16.1.31#g" /etc/sysconfig/network-scripts/ifcfg-ens37
#rsync配置
ssh root@$ip echo "123456" >/etc/rsync.password
ssh root@$ip chmod 600 /etc/rsync.password
ssh root@$ip systemcat start rsync
ssh root@$ip systemcat enable rsync
#sersync配置
ssh root@$ip mkdir ~/tools/ -p
scp ~/tools/sersync2.5.4.tar.gz root@$ip:~/tools/
ssh root@$ip tar xf ~/tools/sersync-2.5.4.tar.gz
ssh root@$ip mkdir /application/ -p
ssh root@$ip cp ~/tools/sersync2.5.4/ /application/
ssh root@$ip chmod +x /etc/rc.local
ssh root@$ip echo "/application/bin/sersync2 -d -r -n 8 -o /application/conf/confxml.xml" >>/etc/rc.local
ssh root@$ip /application/bin/sersync2 -d -r -n 8 -o /application/conf/confxml.xml
#nfs
useradd -u 1001 www -s /sbin/nologin -M
ssh root@$ip mkdir /data -p
ssh root@$ip chown -R nfsnobody.nfsnobody /data
ssh root@$ip mkdir /dataweb/nfs-blog -p
ssh root@$ip chown -R www.www /dataweb/
scp ~/conf/exports root@$ip:/etc/exports
ssh root@$ip systemctl start rpcbind.service
ssh root@$ip systemctl start nfs.service
ssh root@$ip systemctl enable rpcbind.service
ssh root@$ip systemctl enable nfs.service
#bak.sh,重要配置定時(shí)備份
ssh root@$ip mkdir /server/scripts -p
scp ~/conf/scripts/bak.sh root@$ip:/server/scripts/bak.sh
ssh root@$ip chmod +x /server/scripts/bak.sh
#crontab+bak.sh
ssh root@$ip ls /var/spool/cron/root
if [ $? -eq 0 ];then
    ssh root@$ip echo "01 00 * * * /usr/bin/sh /server/scripts/bak.sh >/dev/null 2>&1" >>/var/spool/cron/root
else
    ssh root@$ip touch /var/spool/cron/root
    ssh root@$ip chmod 600 /var/spool/cron/root
    ssh root@$ip echo "01 00 * * * /usr/bin/sh /server/scripts/bak.sh >/dev/null 2>&1" >>/var/spool/cron/root
fi
#ssh優(yōu)化
scp ~/conf/sshd_config root@$ip:/etc/ssh/sshd_config
#執(zhí)行完成后刪除第2行ip,注意腳本中其它位置也不要出現(xiàn)IP地址,正則匹配指定行刪除還不明白,sed的sg可以指定行匹配,只會(huì)清空指定行增加行數(shù),而不是刪除行
sed -i "/^ip.*[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/d" backup.sh
#sudo審計(jì)要結(jié)合實(shí)際情況,配置/etc/sudoers文件即可

其他服務(wù)器安裝配置腳本即平時(shí)學(xué)習(xí)中的配置步驟,就不一一上傳了,完成所有腳本后,基本上會(huì)把學(xué)到知識(shí)重新梳理一遍,加深對(duì)集群框架的了解.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剧蹂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亿傅,更是在濱河造成了極大的恐慌菲宴,老刑警劉巖坯辩,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宿礁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)茬射,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹦蠕,“玉大人,你說(shuō)我怎么就攤上這事在抛≈硬。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵刚梭,是天一觀的道長(zhǎng)肠阱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)朴读,這世上最難降的妖魔是什么屹徘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮衅金,結(jié)果婚禮上噪伊,老公的妹妹穿的比我還像新娘。我一直安慰自己典挑,他們只是感情好酥宴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著您觉,像睡著了一般拙寡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琳水,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天肆糕,我揣著相機(jī)與錄音,去河邊找鬼在孝。 笑死诚啃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的私沮。 我是一名探鬼主播始赎,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仔燕!你這毒婦竟也來(lái)了造垛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晰搀,失蹤者是張志新(化名)和其女友劉穎五辽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體外恕,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杆逗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年乡翅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罪郊。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蠕蚜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出排龄,到底是詐尸還是另有隱情波势,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布橄维,位于F島的核電站尺铣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏争舞。R本人自食惡果不足惜凛忿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竞川。 院中可真熱鬧店溢,春花似錦、人聲如沸委乌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遭贸。三九已至戈咳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壕吹,已是汗流浹背著蛙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耳贬,地道東北人踏堡。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像咒劲,于是被迫代替她去往敵國(guó)和親顷蟆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容