Salt 和 Puppet Chef 同樣可讓你同時在多臺服務器上執行命令也包括安裝和配置軟件。Salt 有兩個主要的功能:配置管理和遠程執行。html
wget -q -O- 「http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key」 | apt-key add -node
echo 「deb http://debian.saltstack.com/debian wheezy-saltstack main」 /etc/apt/sources.listpython
add-apt-repository ppa:saltstack/salt 或linux
echo deb http://ppa.launchpad.net/saltstack/salt/ubuntu
lsb_release -sc
main | tee /etc/apt/sources.list.d/saltstack.listgitwget -q -O- 「http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6」 | apt-key add -github
apt-get update apt-get install salt-master # On the salt-master apt-get install salt-minion # On each salt-minion apt-get install salt-syndic
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm或ubuntu
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmvim
yum update yum install salt-master # On the salt-master yum install salt-minion # On each salt-minion
saltstack 的配置文件格式centos
Salt默認使用PyAMl語法(http://pyyaml.org) 做爲它的模板文件的格式,其餘不少模板語言在Salt中是可使用的。
必定要按照正確的格式書寫YAML,好比最基本的,它使用到兩個空格代替tab,: 或 - 後面要有空格。api
例一:
interface: 0.0.0.0 log_file: /var/log/salt/master key_logfile: /var/log/salt/key
例二:
file_roots: base: - /srv/salt
主控端基本設置
編輯配置文件 /etc/salt/master,修改以下所示配置項,去掉前面的註釋符
interface: 0.0.0.0 log_file: /var/log/salt/master # 記錄主控端運行日誌 key_logfile: /var/log/salt/key # 記錄認證證書日誌
受控端基本設置
編輯配置文件 /etc/salt/minion,修改以下所示配置項,去掉前面的註釋符#
master: 42.121.124.237 # 設置主控端IP id: ubuntu-server-001 # 設定受控端編號 log_file: /var/log/salt/minion # 記錄受控端運行日誌 key_logfile: /var/log/salt/key # 記錄認證證書日誌
小技巧 查看配置文件信息,過濾註釋語句:__
sed -e '/^#/d;/^$/d' /etc/salt/minion
主控端,和受控端 啓動各自的服務,確保服務啓動後沒有任何報錯信息,若是異常請檢查相應日誌文件處理
主控端: service salt-master restart 受控端: service salt-minion restart
若是一切順利,請繼續!
saltstack 主控端是依靠openssl證書來與受控端主機認證通信的,受控端啓動後會發送給主控端一個公鑰證書文件,在主控端用 salt-key 命令來管理證書。
salt-key -L # 用來查看證書狀況 salt-key -a # 用來管理接受證書
受控端證書認證後會顯示以下情形:
Accepted Keys: ubuntu-server-001 Unaccepted Keys: Rejected Keys:
主控端和被控端的證書默認都存放在 /etc/salt/pki/ 中,若是遇到證書不生效的狀況下,可在主控端證書存放目錄刪除受控端證書,從新認證一下。
你能夠從master 使用一個內置命令 test.ping 來測試他們之間的鏈接
salt '*' cmd.run test.ping
它應該有以下輸出:
{ubuntu-server-001: True}
測試與外網的鏈接
salt '*' cmd.run "ping -c 4 baidu.com"
若是能返回正確結果,salt的基本配置就完成了。
我的理解,管理一個服務器應用能夠從 軟件包,配置文件,服務管理 這個三個最基本角度來出發,要啓用配置管理,首先應對受控端進行額外的配置
主控端 /etc/salt/master
default_include: master.d/*.conf
受控端 /etc/salt/minion
default_include: master.d/*.conf
user: root
schedule: highstate: function: state.highstate seconds: 60
通常來說,Salt的配置管理指令和文件保存在/srv/salt目錄下,這裏存放着全部的配置文件,和一些你想要拷貝到從服務器的文件。Salt 的特色之一是包含一個文件服務器。雖然Salt不會在你的主服務器建立系統文件,可是全部的配置管理髮生在/srv/salt目錄中。
file_roots: base: - /srv/salt
base: '*': - ubuntu.vim
詳細解釋一下這個本配置文件的參數
一個簡單的例子:ubuntu 基本系統默是不安裝 vim 咱們能夠利用配置管理把被託管的ubuntu主機所有安裝上vim
編輯 /srv/salt/ubuntu/vim.sls
vim: pkg: - name: vim - installed
執行命令
salt '*' state.highstate
請注意觀察返回結果,查看/var/log/salt/下面的日誌來調試saltstack配置。
一個更復雜的例子:管理ssh服務,而且使用salt託管配置文件
ssh: pkg: - name: ssh - installed service: - name: ssh - running - reload: True - watch: - file: /etc/ssh/ssh_config /etc/ssh/ssh_config: file.managed: - source: salt://ubuntu/ssh_config - user: root - group: root - mode: 644
簡要解釋一下配置文件
一樣,使用以下命令來驗證結果須要
salt '*' state.highstate
若是須要管理更復雜的服務器羣,下面是一個稍微複雜的例子
/srv/salt/top.sls 內容:
base: 'ubuntu-server-*': - ubuntu.vim 'ubuntu-server-001': - ubuntu.servers 'centos-server-001': - rhel.servers
配置倉庫目錄層次結構
/srv/salt/ ├── top.sls ├── rhel │ └── servers.sls └── ubuntu ├── servers.sls ├── ssh_config └── vim.sls
最後,補充一點,把配置倉庫和版本控制工具結合起來,將是一件更美好的事情。
rpm deb 不一樣包管理體系,不一樣發行版二進制包拆分命名規則不盡相同,相比之下 deb 拆分的力度要更細些。
RHEL6/CentOS 軟件包列表
Deian/Ubuntu 軟件包列表
下面按照服務端(主控端)和客戶端(受控端)來講明主要功能項。
基本操做命令通用格式
命令 對象 執行模塊 參數 salt '*' cmd.run "ping -c 4 baidu.com" '*' 操做對象 可使用salt命令的擴展模式 -E -G .. cmd.run 執行模塊 參數 傳遞給執行模塊的參數
編輯 /etc/salt/master
nodegroups: UBUNTU: 'ubuntu-12.04-*' CENTOS: 'centos-6.4-*'
創建分組以後,操做對象使用分組功能才生效
測試與受控主機網絡是否通暢
salt '*' cmd.run test.ping
在所有受控主機行執行命令
salt '*' cmd.run 「uptime」
使用 -E 按照正則匹配操做對象
salt -E 'ubuntu*' cmd.run 「uptime」
使用 -N 按照分組匹配操做對象
salt -N 'UBUNTU-GROUPS' cmd.run 「uptime」
使用 -G 按照查詢信息匹配操做對象選項
salt -G 'cpuarch:x86_64' grains.item num_cpus
查看受控端模塊函數幫助信息
salt '*' sys.doc
查看受控端模塊函數幫助信息
salt '*' sys.doc service
salt-master -d
salt-key -L
salt-key -a KeyName
salt-key -A
salt-key -D
salt-key -d KeyName
*批量複製文件到受控主機
salt-cp '*' /home/vmdisk.img /var/lib/libvirtsh/vmdisk.img
*拷貝小文件頗有效,簡單測試,拷貝2.5MB以上的文件就會超時報錯
salt-run 是用於管理虛擬機的命令
查詢虛擬機信息
salt-run virt.hyper_info
查詢虛擬機信息
salt-run virt.query
基於雲鏡像建立一個新的虛擬機
salt-run virt.init centos1 2 512 salt://centos.img
編輯配置文件 /etc/salt/roster
ubuntu-12.04-001: host: 10.8.0.18 user: root passwd: root sudo: True
簡單的測試
salt-ssh '*' test.ping
測試執行命令
salt-ssh '*' -r 「ifconfig -a」
salt的master和minion的交互很大程度上都和網絡有關係,好比在管理多個國家的機器的時候(好比大中華局域網),一個master控制多個master,同時被控制的master又能夠控制不少的minion,就比如是在 master 和 minions 之間又加了一層的分佈式架構。
啓動服務
salt-minion -d
問題:
來自:http://my.oschina.net/u/877567/blog/182923