SaltStack入門篇之遠程執行和配置管理

一、SaltStack概述

Salt,,一種全新的基礎設施管理方式,部署輕松,在幾分鐘內可運行起來,擴展性好,很容易管理上萬臺服務器,速度夠快,服務器之間秒級通訊。

salt底層采用動態的連接總線, 使其可以用于編配, 遠程執行, 配置管理等等.

多種配置管理工具對比:
Puppet(rubby開發,現在很少使用)
ansible(python開發,輕量級,沒有agent,大規模環境下使用ssh會很慢,串行傳輸)
Saltstack(python開發,遠程執行、配置管理、事件驅動基礎設施、使用saltcloud可以管理私有云和公有云)

官方文檔:<https://docs.saltstack.com/en/getstarted/&gt;
官方提供官方yum源:repo.slatstack.com-->可以使用cobbler自定義yum倉庫進行同步
官方安裝源:<http://repo.saltstack.com/2016.11.html#rhel&gt;
Saltstack組件:
SaltMaster
SaltMinion
Execution Modules

環境說明:

主機名IP地址說明系統
linux-node1.example.com192.168.56.11模式:masterCentos 7.4
linux-node2.example.com192.168.56.12模式:minionCentos 7.4

二、SaltStack安裝

1.安裝指定的yum源

[root@linux-node1 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-2016.11-2.el7.noarch.rpm
[root@linux-node2 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-2016.11-2.el7.noarch.rpm 

2.安裝salt-master和salt-minion

[root@linux-node1 ~]# yum install -y salt-master
[root@linux-node1 ~]# yum install -y salt-minion
[root@linux-node2 ~]# yum install -y salt-minion

3.修改minion配置并啟動

[root@linux-node1 ~]# systemctl start salt-master    #啟動salt-master
[root@linux-node1 ~]# vim /etc/salt/minion           #配置salt-minion
master: 192.168.56.11      #可以是主機名需要解析(指定服務端的IP地址),冒號有空格
id:   唯一標識符,可以不配,不配默認就是主機名
[root@linux-node1 ~]# systemctl start salt-minion    #啟動salt-minion
[root@linux-node2 salt]# vim minion
master: 192.168.56.11      #可以是主機名需要解析(指定服務端的IP地址),冒號有空格
id:   唯一標識符,可以不配,不配默認就是主機名
[root@linux-node2 salt]# systemctl start salt-minionminion配置中有一個id配置,默認是hostname,如果id配置和hostname不一致會導致無法進行通信,那么當hostname做了修改,或者錯誤的時候該怎么配置呢?
①關閉salt-minion  
②salt-key -d id  在master上刪除minion的id  
③minion上刪除pki目錄 
④minion上刪除minion_id文件
⑤修改完成,啟動minion
#此處必須先停掉minion修改,并刪除相應的文件,否則會默認地去查找原先的配置,已踩坑#以下是剛裝完查看minion_id變成了www.test123.com。進行修改成linux-node2.example.com
[root@linux-node2 salt]# cat minion_id 
www.test123.com
[root@linux-node2 salt]# systemctl stop salt-minion
[root@linux-node2 salt]# rm -rf pki
[root@linux-node2 salt]# rm -rf minion_id 
[root@linux-node2 salt]# systemctl start salt-minion
[root@linux-node2 salt]# cat minion_id 
linux-node2.example.com

4.配置說明

[root@linux-node2 salt]# ll
總用量 124
-rw-r----- 1 root root  2624 9月  15 23:19 cloud
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.conf.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.deploy.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.maps.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.profiles.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.providers.d
-rw-r----- 1 root root 46034 9月  15 23:19 master
drwxr-xr-x 2 root root     6 9月  16 00:41 master.d
-rw-r----- 1 root root 35101 1月  16 10:29 minion
drwxr-xr-x 2 root root    27 1月  16 11:47 minion.d
-rw-r--r-- 1 root root    23 1月  16 11:45 minion_id
drwxr-xr-x 3 root root    19 1月  16 11:45 pki
-rw-r----- 1 root root 26984 9月  15 23:19 proxy
drwxr-xr-x 2 root root     6 9月  16 00:41 proxy.d
-rw-r----- 1 root root   344 9月  15 23:19 roster說明:
(1)salt-minion首次啟動會在/etc/salt/pki/minion目錄下生成公鑰和秘鑰
[root@linux-node2 salt]# ll /etc/salt/pki/minion/
總用量 12
-rw-r--r-- 1 root root  450 1月  16 11:47 minion_master.pub
-r-------- 1 root root 1674 1月  16 11:45 minion.pem
-rw-r--r-- 1 root root  450 1月  16 11:45 minion.pub(2)并且在salt-master的/etc/salt/pki/master/minion_pre中存放了salt-minion的公鑰。
[root@linux-node1 ~]# ll /etc/salt/pki/master/minions_pre/
linux-node1.example.com
linux-node2.example.com

5.配置salt-master和slat-minion通信

[root@linux-node1 salt]# salt-key
Accepted Keys:       同意的
Denied Keys:                拒絕的
Unaccepted Keys:            等待同意的
linux-node1.example.com
linux-node2.example.com
Rejected Keys:

同意認證的方法:
分為三種:

[root@linux-node1 salt]# salt-key -A
[root@linux-node1 salt]# salt-key -a 指定id
[root@linux-node1 salt]# salt-key -a 支持通配符
[root@linux-node1 master]# salt-key -a linux*
The following keys are going to be accepted:
Unaccepted Keys:
linux-node1.example.com
linux-node2.example.com
Proceed? [n/Y] Y
Key for minion linux-node1.example.com accepted.
Key for minion linux-node2.example.com accepted.salt-key 命令參數介紹
-L  列出所有
-d 刪除指定的支持通配符
-D 刪除所有
-A 添加所有
-a 指定添加同意之后生成的文件
pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   │   ├── linux-node1.example.com
│   │   └── linux-node2.example.com
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   └── minions_rejected
└── minion├── minion_master.pub  同意之后master發送公鑰├── minion.pem└── minion.pub

三、SaltStack遠程執行和配置管理

1.遠程執行

第一條命令:
[root@linux-node1 master]# salt '*' test.ping
linux-node2.example.com:True
linux-node1.example.com:True說明:
salt:命令
*:匹配目標,使用通配符
test.ping:模塊.方法   
#此處的ping并非ICMP的ping命令,而是master向minion發送了一個包,minion收到了,返回一個True[root@linux-node1 ~]# salt '*' cmd.run 'uptime'
linux-node1.example.com:11:51:47 up 21 days,  5:57,  2 users,  load average: 0.04, 0.03, 0.05
linux-node2.example.com:11:51:47 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05
[root@linux-node1 ~]# salt '*' cmd.run 'w'
linux-node1.example.com:11:52:11 up 21 days,  5:58,  2 users,  load average: 0.03, 0.02, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     pts/2    192.168.56.1     06Jan18  6:51   3.27s  3.27s -bashroot     pts/3    192.168.56.1     06Jan18  3.00s  6:17   0.46s /usr/bin/python /usr/bin/salt * cmd.run w
linux-node2.example.com:11:52:11 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     pts/1    192.168.56.1     Mon10   21:59m  0.28s  0.28s -bashroot     pts/3    192.168.56.1     06Jan18  6:59   4.82s  0.02s -bash
[root@linux-node1 ~]# salt '*' cmd.run 'df -h'
linux-node2.example.com:Filesystem               Size  Used Avail Use% Mounted on/dev/mapper/centos-root   18G   17G  1.1G  95% /devtmpfs                 905M     0  905M   0% /devtmpfs                    916M   12K  916M   1% /dev/shmtmpfs                    916M   41M  876M   5% /runtmpfs                    916M     0  916M   0% /sys/fs/cgroup/dev/sda1                497M  171M  326M  35% /boottmpfs                    184M     0  184M   0% /run/user/0/dev/loop0               4.1G  4.1G     0 100% /mnt
linux-node1.example.com:Filesystem               Size  Used Avail Use% Mounted on/dev/mapper/centos-root   18G   11G  7.2G  60% /devtmpfs                 905M     0  905M   0% /devtmpfs                    916M   28K  916M   1% /dev/shmtmpfs                    916M   57M  860M   7% /runtmpfs                    916M     0  916M   0% /sys/fs/cgroup/dev/sda1                497M  171M  326M  35% /boottmpfs                    184M     0  184M   0% /run/user/0[root@linux-node1 ~]# netstat -tulnp|grep minion
minion不需要監聽端口,說明minion需要主動去鏈接master,master監聽端口為4505、4506
[root@linux-node1 ~]# netstat -tulnp|grep python
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      37039/python        
tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      37045/python       #master和minion默認使用一個叫zeroMQ進行并行通信,zeroMQ屬于底層(傳輸層)的消息隊列,
#相當于一個發布與訂閱系統,比如你訂了一個教室聽課,那么所有訂了此間課室的人都能聽到老師的課程。[root@linux-node1 ~]# lsof -ni:4505
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
salt-mast 37039 root   16u  IPv4 3394584      0t0  TCP *:4505 (LISTEN)
salt-mast 37039 root   18u  IPv4 3412804      0t0  TCP 192.168.56.11:4505->192.168.56.12:43126 (ESTABLISHED)
salt-mast 37039 root   19u  IPv4 3412811      0t0  TCP 192.168.56.11:4505->192.168.56.11:38262 (ESTABLISHED)
salt-mini 39623 root   27u  IPv4 3412810      0t0  TCP 192.168.56.11:38262->192.168.56.11:4505 (ESTABLISHED)

查看4505端口,我們可以發現salt-minion使用一個隨機端口通過4505端口與salt-master通信,master使用4505端口發送指定到salt-minion上進行執行。而4606端口是用于接收數據的返回,用于zeroMQ的請求與響應的系統。

可以通過date命令查看salt的并行通信,可以看到是同時返回
[root@linux-node1 ~]# salt '*' cmd.run 'date'
linux-node2.example.com:Tue Jan 16 12:01:52 CST 2018
linux-node1.example.com:Tue Jan 16 12:01:52 CST 2018

2.配置管理

  • (1)saltstack是使用YAML的格式作為管理文件的格式,下面的YAML的樣例:
    YAML樣例:
    house:
    family:
    name: Doe
    parents:- John- Jane
    children:- Paul- Mark- Simone
    address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345
  • (2)YAML的規則:
    ①縮進表示層級關系,默認縮進是2個空格、4個空格、6個空格
    ②冒號后面有個空格,以冒號結尾可以有空格,可以無空格
    ③短橫線代表一個列表,短橫線后面有個空格

  • (3)定義yaml文件放的位置:salt內置一個fileserver,在master文件配置:file_roots
[root@linux-node1 ~]# vim /etc/salt/master     #定義yaml文件放的位置,base環境是必備的
file_roots:base:- /srv/salt/basedev:- /srv/salt/devtest:- /srv/salt/testprod:- /srv/salt/prod
[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev,test,prod}
[root@linux-node1 ~]# systemctl restart salt-master
[root@linux-node1 ~]# cd /srv/salt/base/
[root@linux-node1 base]# mkdir web
[root@linux-node1 web]# vim apache.sls    #編寫安裝apache的YAML文件
apache-install:pkg.installed:---------->模塊pkg,方法installed,會匹配操作系統進行選擇安裝的方法- name: httpd--------->裝的包的名稱apache-service:----------->id要唯一service.running:-------->狀態模塊service,running為模塊的方法- name: httpd--------->管理服務的名稱- enable: True-------->設置開機自動啟動[root@linux-node1 ~]# salt 'linux-node2.example.com' state.sls web.apache
#如果apache.sls的位置是在prod目錄下,需要在后面增加saltenv=prod
#salt 'linux-node2.example.com' state.sls web.apache saltenv=prod實現自動化安裝,需要寫一個top.sls
[root@linux-node1 base]# pwd
/srv/salt/base
[root@linux-node1 base]# vim top.sls    #必須在base環境下寫
base:'linux-node1.example.com':- web.apache'linux-node2.example.com':- web.apache
****************************
如果只有一個任務在全部機子上執行,也可以:
base:'*'- web.apache
****************************
[root@linux-node1 ~]# salt '*' state.highstate   #去top.sls讀取,*代表通知哪些主機salt '*' state.highstate test=True   #在不想影響當前主機的運行情況,可以使用test=True 進行預測試

轉載于:https://blog.51cto.com/jinlong/2061645

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284475.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284475.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284475.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ArgoCD 用戶管理、RBAC 控制、腳本登錄、App 同步

命令行登錄參考&#xff1a;argocd 登錄登出[1]登錄&#xff1a;echo y | argocd login argocd-server.argocd.svc.cluster.local --password argoadmin.smallsoup --username admin登出&#xff1a;argocd logout argocd-server.argocd.svc.cluster.local創建用戶、授權創建用…

敏捷需要重構嗎?不需要嗎?

在傳統的Scrum中&#xff0c;Sprint的長度為一個月&#xff0c;現在一般時間更短。這意味著團隊就得在項目剛開始的兩周或者一個月內交付完成的軟件。軟件來自于產品負責人的backlog。它必須由特征組成。要正確的做到Scrum&#xff0c;我們不能做基礎架構之類的東西&#xff0c…

【GlobalMapper精品教程】005:影像拼接與裁切(分幅)作業案例教程

本文講述Globalmapper影像拼接與裁剪案例教程。 文章目錄 一、影像的拼接(1)針對少量影像的拼接(2)針對大量影像的拼接二、影像的裁剪一、影像的拼接 (1)針對少量影像的拼接 如果影像數量比較小,可以通過加載→導出的方式進行拼接。 如下圖所示,案例數據(配套實驗數…

元宇宙行業深度研究報告:為什么元宇宙是下一代互聯網?

目錄 1、什么是元宇宙&#xff1f;為什么元宇宙是下一代互聯網 1.1、 元宇宙&#xff1a;下一代沉浸式互聯網 1.1.1、超越虛擬與現實的科幻暢想&#xff1a;元宇宙概念來源 1.1.2、新技術由點突破連接成面&#xff0c;移動互聯網繼承者的孕育 1.1.3、元宇宙的五大要素&…

細節總結(一)

self.XXX與_XXX的區別 通過self.XXX得到的數據相當于調用get函數取值,等價于[self XXX];而通過_XXX獲取的是自己的實例變量,直接對變量進行操作,并未調用get函數。所以,通過懶加載方式初始化的變量只能通過self.XXX調用,否則可能會存在未初始化的問題。self.xxx是對屬性的訪問;…

redis 安裝錯誤 jemalloc.h: No such file or directory

為什么80%的碼農都做不了架構師&#xff1f;>>> 錯誤描述 [rootmysql-rtb-slave redis-4.0.1]# make && make install cd src && make all make[1]: Entering directory /usr/local/src/redis-4.0.1/srcCC Makefile.dep make[1]: Leaving director…

OAuth,JWT ,OIDC你們搞得我好亂啊

hi&#xff0c;這里是桑小榆&#xff0c;這次分享的不是生活文&#xff0c;而是技術文。基于OAuth2.0協議的授權認證&#xff0c;初次接觸授權認證知識的時候&#xff0c;出現了不少熱門名詞&#xff0c;“OAuth”&#xff0c;“JWT”&#xff0c;“OIDC”&#xff0c;這簡直讓…

MyEclipse快捷鍵大全

存盤 Ctrls(肯定知道) 注釋代碼 Ctrl/ 取消注釋 Ctrl\(Eclipse3已經都合并到Ctrl/了) 代碼輔助 Alt/ 快速修復 Ctrl1 代碼格式化 CtrlShiftf 整理導入 CtrlShifto 切換窗口 Ctrlf6 <可改為ctrltab方便> ctrlshiftM 導入未引用的包 ctrlw 關閉單個窗口 F3 跳轉到類、變量的…

軟件測試技術第二次作業——程序錯誤的判斷

在做作業之前我們首先要明確軟件測試過程中的幾個名詞&#xff1a; Fault&#xff1a;在軟件測試中&#xff0c;fault是指程序中靜態的缺陷&#xff0c;也就是指在程序中存在的編程錯誤。 Error&#xff1a;在軟件測試中&#xff0c;error是指由于程序中存在的fault而產生的不正…

【GlobalMapper精品教程】006:Excel等表格(.xls)或文本(.txt .csv)坐標文件生成矢量點

【拓展閱讀】: 【QGIS入門實戰精品教程】4.5:QGIS打開Excel中的點坐標,并生成矢量文件 【ArcGIS微課1000例】0022:ArcGIS點(點坐標)自動連成線操作案例教程 【ArcGIS風暴】ArcGIS 10.2導入Excel數據X、Y坐標(經緯度、平面坐標),生成Shapefile點數據圖層 【ArcGIS風暴】…

Java編程思想 學習筆記1

一、對象導論 1.抽象過程   Alan Kay曾經總結了第一個成功的面向對象語言、同時也是Java所基于的語言之一的Smalltalk的五個基本特性&#xff0c;這些特性表現了純粹的面向對象程序設計方式   1&#xff09;萬物皆對象。   2&#xff09;程序是對象的集合&#xff0c;它們…

不只是日志收集,項目監控工具Sentry的安裝、配置、使用

前言上一篇文章介紹了ExceptionLess這個日志收集系統&#xff1a;ExceptionLess的安裝、配置、使用由于ExceptionLess官方提供的客戶端只有.Net/.NetCore平臺和js的&#xff0c;本文繼續介紹另一個日志收集系統&#xff1a;SentrySentry 是一個實時事件日志記錄和聚合平臺。&am…

64個數據分析常用術語

導讀&#xff1a;本篇文章&#xff0c;我們來講講數據分析常用語。 內容綜合整理自網絡 01 絕對數和相對數 絕對數&#xff1a;是反應客觀現象總體在一定時間、一定地點下的總規模、總水平的綜合性指標&#xff0c;也是數據分析中常用的指標。比如年GDP&#xff0c;總人口等等。…

redis 的bitmap 開源包 bitmapist的應用

2019獨角獸企業重金招聘Python工程師標準>>> 原理&#xff1a;http://my.oschina.net/u/1458120/blog/545224 bitmap包&#xff1a;https://github.com/Doist/bitmapist 要求redis> 2.6.0 bitmapist-master.zip 安裝自己下載解壓 python setup.py install &…

Django Views(視圖函數)

http請求中產生兩個核心對象&#xff1a; http請求&#xff1a;HttpRequest對象 http響應&#xff1a;HttpResponse對象 所在位置&#xff1a;django.http 之前我們用到的參數request就是HttpRequest 檢測方法&#xff1a;isinstance(request,HttpRequest) 1 HttpRequest對象…

Android 4 +https(如何啟動TLS1 1 and TLS1 2)

之前用的網絡請求框架是鴻洋的OkHttpUtils&#xff0c;網絡請求在5.0手機上使用https沒有問題&#xff0c;但是最近突然使用了一個4.4的系統&#xff0c;就報錯SSLException ....咋地咋地 然后 我們的副總給我們找一個博客&#xff0c;如何解決4.系統出現的這個問題&#xff0…

massCode 一款優秀的開源代碼片段管理器

本文將介紹一款適合程序員使用的個人代碼片段管理工具 massCode[1]。massCode小時候&#xff0c;也許我們每個人都會被老師要求有一個到處摘錄優美句子段落的作文素材本 —— 采蜜集。不可否認&#xff0c;這對我們的寫作水平的提高確實有很大的幫助。對開發人員來說當然也需要…

【ArcGIS Pro微課1000例】0021:Win10系統ArcGIS Pro3.0.1安裝教程(附ArcGIS Pro下載)

本文講解Win10系統上ArcGIS Pro3.0.1安裝教程,附軟件包下載。 文章目錄 一、 軟件安裝步驟1. 安裝.net Runtime 62. 安裝ArcGIS Pro3. 安裝中文語言4. 刪除代理二、軟件下載地址一、 軟件安裝步驟 [軟件名稱]: ArcGIS Pro 3.0.1 [軟件大小]:4.33GB [安裝環境]: Win 11/Win …

iOS逆向工程——非越獄調試

其實iOS的逆向分析業界已經十分成熟了&#xff0c;網上也有許多有趣的嘗試(一步一步實現iOS微信自動搶紅包(非越獄)。本文著重于如何在非越獄機器上進行調試&#xff0c;出于學習及總結的目的&#xff0c;記錄于此。 本文以破解游戲夢幻西游為例&#xff0c;逐步講解整個調試流…