15-saltstack(8)_saltstack架構(gòu)擴(kuò)展

前言

前面我們均以單master管理多minion的方式開(kāi)展學(xué)習(xí),在saltstack架構(gòu)擴(kuò)展中,我們將學(xué)習(xí)如何擴(kuò)展salt的架構(gòu),解決salt在管理大量minion時(shí)的擴(kuò)展問(wèn)題以及salt master的高可用問(wèn)題。

1、salt的多master高可用架構(gòu)
  • salt多master只需要在minion端配置多個(gè)master地址即可實(shí)現(xiàn)。salt支持多master的配置,salt多master方式只是讓一臺(tái)minion可以同時(shí)接受兩臺(tái)或多臺(tái)master的管理而已。因此,多個(gè)master之間不會(huì)有任何感知,也沒(méi)有狀態(tài)的同步,我們只需要自己維護(hù)多個(gè)master,讓它們的配置文件、狀態(tài)文件和密鑰文件完全相同,否則只從minion端配置多個(gè)master是無(wú)法實(shí)現(xiàn)高可用架構(gòu)的。
  • 舊master:192.168.184.132,新master:192.168.184.139
#### 新master
## yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-2017.7-1.el6.noarch.rpm
## yum install -y salt-master

#### 舊master
## 同步配置文件
rsync -av /etc/salt/master root@192.168.184.139:/etc/salt/
## 同步狀態(tài)文件
rsync -av /srv root@192.168.184.139:/
## 同步密鑰文件:
rsync -av /etc/salt/pki/master/ root@192.168.184.139:/etc/salt/pki

#### minion
## 修改minion的master配置文件,并重啟minion:
## vim /etc/salt/minion
master: 
  - 192.168.184.132
  - 192.168.184.139
## service salt-minion restart

###### 重啟新的master服務(wù)
## service salt-master restart
## salt-key -L

###### 在新的master服務(wù)器上查看minion并運(yùn)行命令
## salt 192.168.184.133 test.ping
  • 在生產(chǎn)環(huán)境中,應(yīng)注意master之間的配置文件、狀態(tài)文件和密鑰文件的實(shí)時(shí)同步問(wèn)題,可以用比較成熟的rsync+inotify或sersync方式完成實(shí)時(shí)同步。
2、syndic方式擴(kuò)展salt的管理架構(gòu)
image

前言

  • 通過(guò)salt的多master高可用的方式我們可以避免了salt-master的單點(diǎn)問(wèn)題,但是如果管理主機(jī)的數(shù)量非常巨大,那一臺(tái)master性能就會(huì)出現(xiàn)問(wèn)題,這時(shí)候我們需要對(duì)salt進(jìn)行多級(jí)擴(kuò)展,用syndic的方式可以完成多級(jí)擴(kuò)展,syndic的擴(kuò)展架構(gòu)如上圖。
  • 什么是syndic?它是一種中間層,接受來(lái)自master的任務(wù),然后將任務(wù)下發(fā)給所有由syndic管理的minion機(jī)器,最后將所有minion執(zhí)行的結(jié)果返回給syndic,syndic再將結(jié)果發(fā)回給master。有了syndic作為中間層,大大減輕了master的壓力,不需要master和每一臺(tái)被管理的minion直接進(jìn)行通信。
  • 實(shí)例配置syndic管理minion
## master:192.168.184.132
## syndic:192.168.184.139
## minion:192.168.184.133  192.168.184.138

###### syndic:192.168.184.139
yum install -y salt-master salt-syndic
#### vim /etc/salt/master
#syndic_master: masterofmasters
syndic_master: 192.168.184.132

/etc/init.d/salt-master start
/etc/init.d/salt-syndic start

###### master:192.168.184.132
#### vim /etc/salt/master
#order_masters: False
order_masters: True

/etc/init.d/salt-master restart

###### minion:192.168.184.133  192.168.184.138
#### vim /etc/salt/minion
#master: salt
master: 192.168.184.139

/etc/init.d/salt-minion restart
  • 驗(yàn)證salt syndic是否與minion端連通(192.168):
[root@139 ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
192.168.184.138
192.168.184.133
Proceed? [n/Y] y
Key for minion 192.168.184.138 accepted.
Key for minion 192.168.184.133 accepted.
[root@139 ~]# salt "*" cmd.run "ip a"
192.168.184.133:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:c8:b2:12 brd ff:ff:ff:ff:ff:ff
        inet 192.168.184.133/24 brd 192.168.184.255 scope global eth0
        inet6 fe80::20c:29ff:fec8:b212/64 scope link 
           valid_lft forever preferred_lft forever
192.168.184.138:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:81:7c:0a brd ff:ff:ff:ff:ff:ff
        inet 192.168.184.138/24 brd 192.168.184.255 scope global eth0
        inet6 fe80::20c:29ff:fe81:7c0a/64 scope link 
           valid_lft forever preferred_lft forever
  • 驗(yàn)證salt-master跟minion端是否連通(syndic端 192.168.184.139主機(jī)名變更為139):
[root@localhost ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
139
Proceed? [n/Y] y
Key for minion 139 accepted.
[root@localhost ~]# salt "*" cmd.run "ip a"
192.168.184.138:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:81:7c:0a brd ff:ff:ff:ff:ff:ff
        inet 192.168.184.138/24 brd 192.168.184.255 scope global eth0
        inet6 fe80::20c:29ff:fe81:7c0a/64 scope link 
           valid_lft forever preferred_lft forever
192.168.184.133:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:c8:b2:12 brd ff:ff:ff:ff:ff:ff
        inet 192.168.184.133/24 brd 192.168.184.255 scope global eth0
        inet6 fe80::20c:29ff:fec8:b212/64 scope link 
           valid_lft forever preferred_lft forever
139:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:4b:27:b0 brd ff:ff:ff:ff:ff:ff
        inet 192.168.184.139/24 brd 192.168.184.255 scope global eth0
        inet6 fe80::20c:29ff:fe4b:27b0/64 scope link 
           valid_lft forever preferred_lft forever

補(bǔ)充:syndic也可以監(jiān)控自己主機(jī)上的minion端(如上所示的minion端139),操作是更改/etc/salt/minion配置文件的master: 192.168.184.139

==可能會(huì)碰到master端緩存了minion_id的問(wèn)題,執(zhí)行rm -rf /etc/salt/pki/minion/*即可==

3、salt的無(wú)master模式
[root@138 ~]# salt-call --local cmd.run "whoami"
local:
    root
  • 通過(guò)salt-call加--local參數(shù)可直接調(diào)用本機(jī)模塊,通常用在調(diào)試任務(wù)。另外可設(shè)置/etc/salt/minion中的file_root和pillar_root參數(shù)在本機(jī)添加狀態(tài)文件,通過(guò)salt-call --local state.sls命令來(lái)測(cè)試文件執(zhí)行情況。
  1. salt-ssh實(shí)現(xiàn)無(wú)master管理minion

前言

Anside也是一款集配置管理和遠(yuǎn)程執(zhí)行于一身的軟件,并且Anside不需要被管理端安裝任何agent進(jìn)程,只需要開(kāi)啟默認(rèn)的SSH并且安裝了Python即可完成管理任務(wù),而salt也有這個(gè)功能。通過(guò)salt的組件salt-ssh工具管理服務(wù)器,被管理的服務(wù)器不需要安裝salt-minion,同時(shí)管理端甚至不需要啟動(dòng)salt-master就能實(shí)現(xiàn)大部分salt的功能。但是,salt-ssh這種通信方式不通過(guò)ZeroMQ,而是使用ssh,所以在執(zhí)行速度上相比salt的標(biāo)準(zhǔn)協(xié)議會(huì)有非常大的差別。所以,通常使用salt管理服務(wù)器都會(huì)用salt的普通架構(gòu)而不會(huì)選用salt-ssh。

2.安裝salt-ssh

## yum install -y salt-ssh
## salt-ssh --version
salt-ssh 2017.7.1 (Nitrogen)
## rpm -ql salt-ssh
/etc/salt/roster
/usr/bin/salt-ssh
/usr/share/man/man1/salt-ssh.1.gz
  1. 配置roster文件
    salt-ssh的配置文件是/etc/salt/roster
## vim /etc/salt/roster
#web1:                                              # id值(例如syndic里的139是一個(gè)id值)
#  host: 192.168.42.1                               # 主機(jī)名或主機(jī)IP地址
#  user: fred                                       # 遠(yuǎn)程執(zhí)行用戶
#  passwd: foobarbaz                                # 用戶密碼
#  sudo: True                                       # 是否sudo到root用戶
#  priv: /etc/salt/pki/master/ssh/salt-ssh.rsa      # 私鑰路徑
#  timeout:5                                       # 超時(shí)時(shí)間

為了避免密碼暴露的風(fēng)險(xiǎn),通常在使用salt-ssh時(shí)需要配置SSH的密鑰登錄方式。密碼配置和密鑰認(rèn)證方式如下例子:

  • 密碼方式
[root@139 ~]# vim /etc/salt/roster 
# Sample salt-ssh config file
#web1:
#  host: 192.168.42.1 # The IP addr or DNS hostname
#  user: fred         # Remote executions will be executed as user fred
#  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
#  sudo: True         # Whether to sudo to root, not enabled by default
#web2:
#  host: 192.168.42.2

test:
  host: 192.168.184.133
  user: root
  passwd: xxxxxx
  port: 22

## 測(cè)試
salt-ssh "*" cmd.run "ip a"
  • 密鑰方式
[root@139 ~]# vim /etc/salt/roster 
# Sample salt-ssh config file
#web1:
#  host: 192.168.42.1 # The IP addr or DNS hostname
#  user: fred         # Remote executions will be executed as user fred
#  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
#  sudo: True         # Whether to sudo to root, not enabled by default
#web2:
#  host: 192.168.42.2

test:
  host: 192.168.184.133
  user: root
  priv: /etc/salt/pki/master/ssh/salt-ssh.rsa
  port: 22
  
  
  
## 運(yùn)行salt-ssh命令,第一次運(yùn)行時(shí)需要輸入密碼并復(fù)制公鑰到目標(biāo)服務(wù)器
salt-ssh "*" cmd.run "ip a"

4.salt-ssh的使用

salt-ssh支持正則匹配、列表匹配、grains匹配、nodegroup和范圍匹配,可用salt-ssh -h獲得幫助。

5.模塊的使用

基本上salt-master能用的模塊在salt-ssh上都能使用

  • salt-ssh "*" cmd.run "ip a"
  • salt-ssh "*" pkg.install "httpd"
  • salt-ssh "*" service.status httpd
  • salt-ssh "*" user.add saltssh
  • 等等……

6.狀態(tài)管理

  • 狀態(tài)文件的使用 salt-ssh "*" state.sls apache
  • highstate的應(yīng)用 salt-ssh "*" state.highstate

總結(jié)

本節(jié)主要介紹了salt的架構(gòu)擴(kuò)展,通過(guò)多master的方式可以實(shí)現(xiàn)saltstack高可用架構(gòu),通過(guò)syndic作為中間層可以進(jìn)行多級(jí)擴(kuò)展來(lái)解決salt-master的性能問(wèn)題,結(jié)合這兩種方式,saltstack可以擴(kuò)展出更多的架構(gòu)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容