溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

saltstack第三波《遠程執(zhí)行》

發(fā)布時間:2020-06-12 03:50:28 來源:網(wǎng)絡 閱讀:723 作者:陳發(fā)哥007 欄目:數(shù)據(jù)庫

第3章 SaltStack遠程執(zhí)行

3.1 目標(Targeting)

指定目標,用來匹配minion,默認是以minion ID作為目標來匹配minion的。

匹配目標,非常重要,因為匹配錯了,執(zhí)行命令錯了,后面會很嚴重的。

 

[root@saltstack-node1 ~]# salt '*' test.ping
saltstack-node2.example.com:
    True
saltstack-node1.example.com:
    True

詳解命令【salt '*' test.ping】如下:

r salt是固定的命令

r *是遠程執(zhí)行時的目標(代表匹配所有),是本節(jié)學習的重點

r test.ping代表要遠程執(zhí)行的模塊

r test是模塊的名稱

r .(點)代表引用這個模塊

r pingtest模塊里的一個方法

3.1.1minion ID

這個minion ID是不能隨便改動的,因為master端認證minion端時,默認是以minion ID的內(nèi)容命名minion端的公鑰。所以,如果修改minion ID后,該minion就不能被管理了,解決方法是,必須把這個minion刪掉,再重新添加,認證,才可以管理。

注意:主機的FQDN名和minionID不要隨便改!

~查看minionID

[root@saltstack-node1 ~]# cat /etc/salt/minion_id   #默認是主機的FQDN名
saltstack-node1.example.com

~查看minion的公鑰(即證書)

[root@saltstack-node1 ~]# ll/etc/salt/pki/master/minions
總用量 8
-rw-r--r-- 1 root root 451 8月   4 14:35saltstack-node1.example.com
-rw-r--r-- 1 root root 451 8月   4 13:26saltstack-node2.example.com

3.1.2不同寫法概述

3.1.2.1 minion id有關

r globbing(通配符)

r regex(正則)

r list (列表)

范例:redis-node1-redis03-idc04-soa.example.com

r redis-node1:運行的服務是redis,這個是第一個節(jié)點

r redis03:說明這個redisredis集群編號03里面的節(jié)點

r idc04:這臺服務器運行在編號04IDC機房中

r soa:這臺服務器是給soa服務使用的

r example.com是域名

3.1.2.2 minion id無關

r 子網(wǎng)/IP地址

r grains

r pillar

r compound matchers(復合匹配)

r node groups(節(jié)點組)

r batching execution(批處理執(zhí)行)

3.1.3匹配目標的不同寫法

3.1.3.1 通配符

r 任意字符

r ?    單個字符

r !  取反

salt 'saltstack-node*' test.ping
salt '*.example.com' test.ping
salt 'saltstack-node?.example.com' test.ping
salt 'saltstack-node[1-2].example.com' test.ping
salt 'saltstack-node[!2].example.com' test.ping
3.1.3.2 列表(不推薦)
salt -L 'saltstack-node1.example.com,saltstack-node2.example.com' test.ping
3.1.3.3 正則
salt -E 'saltstack-(node1|node2).example.com'test.ping

~正則表達式在top file里的寫法

[root@saltstack-node1 ~]# cat/srv/salt/top.sls   
base:
 'saltstack-(node1|node2).example.com':
    - match:pcre    #一定要加上這一行,聲明使用正則匹配。
    - apache
3.1.3.4 子網(wǎng)/IP地址
salt -S 10.0.0.0/24 test.ping
salt -S 10.0.0.22 test.ping
3.1.3.5 grains
salt -G 'os:CentOS' test.ping
salt -G cloud:openstack cmd.run 'df -h'
# key(os、cloud)
# value(CentOS、openstack)

~grainstop file里的寫法

[root@saltstack-node1 ~]# cat /srv/salt/top.sls
base:
 'saltstack-(node1|node2).example.com':
    - match:pcre
    - apache
 
 'os:CentOS':
    - match:grain   #一定要加上這一行,聲明使用grain匹配,不加s
    - apache
3.1.3.6 pillar
salt -I 'Zabbix_Server:10.0.0.22' test.ping
3.1.3.7 compound matchers(復合匹配)
salt -C 'saltstack-node1* orI@Zabbix_Server:10.0.0.22' test.ping
salt -C '* and not I@Zabbix_Server:10.0.0.22'test.ping
#注意not參數(shù)的寫法,前面一定要有target,才能用。
3.1.3.8 node groups(節(jié)點組)

可以在master的主配置文件里修改,指定好,大約在712行。很少用。

3.1.3.9 batching execution(分批處理執(zhí)行)
salt '*' -b 1 test.ping
#同一時刻只允許一臺機器執(zhí)行命令,很少用。

3.1.4salt命令參數(shù)列表

[root@saltstack-node1 ~]# salt -h
-b  --batch   #允許一批機器,同一時刻執(zhí)行命令,用來控制同時執(zhí)行命令的機器數(shù)量
-C, --compound  #混合
-E, --pcre    #正則
-L, --list    #列表
-G, --grain    #grain
-I, --pillar   #pillar
-S, --ipcidr(IP無類域間路由)Subnet #子網(wǎng)或IP地址
-R, --range    #范圍

 

3.2 執(zhí)行模塊(Modules)

模塊是遠程執(zhí)行中的重要組成部分。

遠程執(zhí)行中的模塊叫做執(zhí)行模塊(executionmodules,配置管理的模塊稱之為狀態(tài)模塊(executionmodules

我們學習執(zhí)行模塊時,必須要學會看官方文檔,它的優(yōu)點是全,缺點也是全,太豐富了。

官網(wǎng)(執(zhí)行模塊): https://docs.saltstack.com/en/latest/

模塊的數(shù)量,至少有300加,而且數(shù)量還在不停的遞增中……

接下來,我們一起來簡單學習幾個常用的模塊。

注意:cmd.run這個模塊,生產(chǎn)環(huán)境中,不建議使用,因為比較危險

 

3.2.1network模塊

模塊由名稱和方法組成。

注意,有些地方需要指定參數(shù)。

3.2.1.1 active_tcp

~返回minion端所有的TCP鏈接

salt 'saltstack-node1.example.com'network.active_tcp
3.2.1.2 arp

~Return the arp table from theminion

salt 'saltstack-node1.example.com' network.arp
3.2.1.3 default_route

~Return default route(s) fromrouting table

salt 'saltstack-node1.example.com'network.default_route
3.2.1.4 get_hostname

~Get hostname

salt '*' network.get_hostname
3.2.1.5 hw_addr

~Return the hardware address(a.k.a. MAC address) for a given interface

salt '*' network.hw_addr eth0
3.2.1.6 interface

~Return the inet address for agiven interface

salt '*' network.interface eth0
3.2.1.7 traceroute

~Performs a traceroute to a 3rdparty host

salt '*' network.traceroute baidu.com

 

3.2.2service模塊

3.2.2.1 available

~Returns True if the specifiedservice is available, otherwise returns False.

salt '*' service.available sshd
3.2.2.2 get_all

~Return a list of all availableservices

salt 'saltstack-node1*' service.get_all
3.2.2.3 start

~Start the specified service

salt 'saltstack-node1*' service.start postfix
3.2.2.4 stop

~Stop the specified service

salt 'saltstack-node1*' service.stop postfix
3.2.2.5 status

~Return the status for aservice, returns the PID or an empty string if the service is running or not,pass a signature to use to find the service via ps

salt 'saltstack-node1*' service.status postfix

 

3.2.3 state模塊

作用:Control the state system on the minion.

3.2.3.1 show_top

~Return the top data that theminion will use for a highstate

salt 'saltstack-node1*' state.show_top
3.2.3.2 show_highstate

~Retrieve the highstate datafrom the salt master and display it

salt 'saltstack-node1*' state.show_highstate
3.2.3.3 highstate

~Retrieve the state data fromthe salt master for this minion and execute it

salt '*' state.highstate
3.2.3.4 sls

~Execute the states in one ormore SLS files

salt '*' state.sls apache env=base

3.2.4控制cmd模塊的方法

我們可以編輯master的主配置文件:/etc/salt/master

 

~ACL

client_acl:      #訪問控制列表
  larry:      #用戶larry
    -test.ping  #只能執(zhí)行test模塊的ping方法
    -network.*  #只能執(zhí)行network模塊的所有方法


~黑名單


client_acl_blacklist:    #配置黑名單
  users:         #所有的用戶
    - root       #用戶root
    -'^(?!sudo_).*$'  #所有非sudo用戶
  modules:        #模塊關鍵字
    - cmd       #cmd模塊,里面的方法全部都不能用


~所有用戶不能執(zhí)行cmd模塊的設置方法如下:

client_acl_blacklist:
  modules:
    - cmd

 

3.3 返回程序(Returnners)

如果salt minion太多的時候,每次查看執(zhí)行結果都要看很久,而且屏幕都占滿了。也不方便查看是否執(zhí)行成功。這個時候saltsackreturner功能上場了。我們可以把執(zhí)行的命令結果存入數(shù)據(jù)庫,通過數(shù)據(jù)庫查看就很方便了。

最大的作用,可以把所有的返回結果,統(tǒng)一存放在同個地方,做統(tǒng)計、分析時會比較好用。

默認情況下,返回程序是minion端將結果返回給master端。

我們可以自定義返回程序,將結果寫入到redis或是MySQL。需要注意,返回結果是minion發(fā)送的,和master沒有關系。也就是說,minion直接把結果寫入到redisMySQL中。

參考網(wǎng)址:

https://docs.saltstack.com/en/latest/ref/returners/index.html#full-list-of-returners

https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html

3.3.1salt.returners.mysql(案例)

返回數(shù)據(jù)到mysql服務器上,注意minion端依賴一個python包:python-mysqldb。

官網(wǎng)介紹:可以在master或者minion端配置文件里面寫上mysql相關的配置,如果是minion端,需要在每個minion的配置文件里面寫,如果寫到master端的配置文件,minion端則無需配置。因此,我們可以把這些配置寫到master端的配置文件。

但是,我在做實驗的時候,把相關配置寫入到master的配置文件,minion端沒寫,結果發(fā)現(xiàn)mysql的表里是空的,沒有記錄。注:系統(tǒng)環(huán)境的版本是CentOSrelease 6.7 (Final)。

所以,為了防止出錯,我們就把mysql的相關配置寫入到所有minion的配置文件里。

mysql返回程序操作流程如下:

3.3.2安裝mysql和依賴包

~master

yum install -y mysql-server MySQL-python
/etc/init.d/mysqld start

~所有minion端要安裝:MySQL-python

如果不裝,這個minion端的執(zhí)行返回結果是不會寫到mysql數(shù)據(jù)庫表的。

yum install -y MySQL-python

3.3.3mysql的相關配置

因為要把客戶端執(zhí)行命令的結果直接返回給mysql服務器,所以客戶端也要配置mysql信息的,在minion的配置文件中加入如下信息,你也可以把它單獨寫在一個文件中。為了方便管理推薦寫在單獨文件中:

~所有minion端都要配置

cat >/etc/salt/minion.d/mysql.conf<<EOF
######      Returner settings        ######
############################################
# Whichreturner(s) will be used for minion's result:
#return: mysql
mysql.host:'10.0.0.21'
mysql.user:'salt'
mysql.pass:'salt'
mysql.db:'salt'
mysql.port:3306
EOF
cat/etc/salt/minion.d/mysql.conf

~所有結點的minion服務都要重啟

/etc/init.d/salt-minion restart

3.3.4創(chuàng)建salt的數(shù)據(jù)庫和表結構

3.3.4.1 創(chuàng)建庫
mysql
---------------------------------
CREATE DATABASE `salt`
  DEFAULTCHARACTER SET utf8
  DEFAULTCOLLATE utf8_general_ci;

 

3.3.4.2 創(chuàng)建三個表
use salt;
# 在salt庫里創(chuàng)建三張表
---------------------------------
CREATE TABLE `jids` (
  `jid`varchar(255) NOT NULL,
  `load`mediumtext NOT NULL,
  UNIQUE KEY`jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE;
---------------------------------
CREATE TABLE `salt_returns` (
  `fun`varchar(50) NOT NULL,
  `jid`varchar(255) NOT NULL,
  `return`mediumtext NOT NULL,
  `id`varchar(255) NOT NULL,
  `success`varchar(10) NOT NULL,
  `full_ret`mediumtext NOT NULL,
 `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id`(`id`),
  KEY `jid`(`jid`),
  KEY `fun`(`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


---------------------------------
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
---------------------------------
show tables;
# 查看所有的表

 

3.3.4.3 授權
grant all on salt.* tosalt@'10.0.0.0/255.255.255.0' identified by 'salt';
exit;

3.3.5驗證

我們可以在master端打開兩個窗口,一個看shell執(zhí)行返回結果,一個看mysql中返回的結果。

返回程序把執(zhí)行結果寫入到mysql中,但是,返回程序無論寫到哪里,master端都會顯示執(zhí)行結果。

3.3.5.1 shell

我們輸入下面兩條命令,將遠程執(zhí)行的結果,返回給mysql

salt '*' test.ping --return mysql
salt '*' cmd.run 'uptime' --return mysql

 

執(zhí)行結果(命令行):

 saltstack第三波《遠程執(zhí)行》

3.1.1.1 mysql

我們可以登錄數(shù)據(jù)庫,查看遠程執(zhí)行的結果是否已被保存在數(shù)據(jù)庫的salt_returns表里。

mysql
use salt;
show tables;
select * from salt_returns;
select * from salt_returns\G;
# 倒數(shù)第二條命令,顯示的結果,看的很混亂。
# 最后一條命令,顯示的結果,更加人性化。推薦!

 

執(zhí)行命令:select *from salt_returns\G;

結果如下所示:

salt '*' cmd.run 'uptime' --returnmysql命令相對應的圖:

saltstack第三波《遠程執(zhí)行》

salt '*' test.ping --return mysql命令相對應的圖:

saltstack第三波《遠程執(zhí)行》

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI