salt不同服务器同步不同配置文件,saltstack的安装配置及简单使用

saltstack的安装配置及简单使用

saltstack 和 Puppet Chef 一样可以让同时在多台服务器上执行命令,包括安装和配置软件。

Salt有两个主要的功能:配置管理 和 远程执行

安装和配置

如果用yum无法安装,提示:No package salt-master available.请先安装epel源

cd /usr/local/src/

wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -ivh epel-release-6-8.noarch.rpm

然后再 yum 安装

安装,配置 master

master

"""

1. 安装salt-master

yum install salt-master

2. 修改配置文件:/etc/salt/master

interface: 0.0.0.0 # 表示Master的IP

3. 启动

service salt-master start

"""

安装,配置 slave

slave

"""

1. 安装salt-minion

yum install salt-minion

2. 修改配置文件 /etc/salt/minion

master: 10.211.55.4 # master的地址

master:

- 10.211.55.4

- 10.211.55.5

random_master: True

id: slave_id # 客户端在salt-master中显示的唯一ID

3. 启动

service salt-minion start

"""

授权

"""

salt-key -L # 查看已授权和未授权的slave

salt-key -a salve_id # 接受指定id的salve

salt-key -r salve_id # 拒绝指定id的salve

salt-key -d salve_id # 删除指定id的salve

"""

执行命令

在master服务器上对salve进行远程操作

salt 'slave_id' cmd.run 'ifconfig'

py文件运行命令

pip install salt

import salt.client

local = salt.client.LocalClient()

result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

设置开机启动

master主机执行:chkconfig salt-master on

minion主机执行:chkconfig salt-minion on

saltstack的几个常用命令

state 对被控制主机进行状态管理

state是Saltstack最核心的功能,通过预先定制好的sls(salt state file)文件对被控制主机进行状态管理,支持包括程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等。

(1) 将master上的一个文件,同步到客户端

在 master 端 配置

1 cd /srv/salt

2 mkdir mycode

mycode/

├── files

│ └── xx.py

└── init.sls

3 vim init.sls

/data/xx.py: ID

file:

- managed

- source: salt://mycode/files/xx.py

- user: root

- makedirs: True

- mode: 644

执行命令推送文件

salt '*' state.sls mycode

显示结果

----------

ID: /data/xx.py

Function: file.managed

Result: True

Comment: File /data/xx.py updated

Started: 21:52:21.507086

Duration: 308.826 ms

Changes:

----------

diff:

New file

mode:

0644

Summary

------------

Succeeded: 1 (changed=1)

Failed: 0

------------

Total states run: 1

(2) 将master上的文件夹,同步到客户端

在master 配置

1 - cd /srv/salt

2 - mkdir s7code

s7code/

├── files

│ └── video

│ ├── a.py

│ ├── b.py

│ └── c.py

└── init.sls

3 - vim init.sls

/data/xx.py: # 对应的ID file.recurse: # 上传文件夹- name: /data/codes # 上传的路径- source: salt://s7code/files/video # 源路径- user: root

- makedirs: True

- file_mode: 644

- dir_mode: 755

执行命令推送文件

salt '*' state.sls s7code

显示结果

----------

ID: /data/xx.py

Function: file.recurse

Name: /data/codes

Result: True

Comment: Recursively updated /data/codes

Started: 22:06:00.073110

Duration: 417.839 ms

Changes:

----------

/data/codes/1.py:

----------

diff:

New file

mode:

0644

/data/codes/2.py:

----------

diff:

New file

mode:

0644

/data/codes/3.py:

----------

diff:

New file

mode:

0644

Summary

------------

Succeeded: 1 (changed=1)

Failed: 0

------------

Total states run: 1

grains 用于保存服务器的静态信息

内置grains

- salt "slave1" grains.ls

- salt "slave2" grains.items

- salt "*" grains.get key

自定义grains

- minion

vim /etc/salt/minion

grains:

roles:

- webserver

- memcache

deployment: datacenter4

cabinet: 13

cab_u: 14-15

在master上:

salt '*' saltutil.sync_grains

salt '*' grains.get cabinet

- master

vim /srv/salt/_grains/xx.py

import time

def xxo():

s = {}

s['xkkkkkkkkkkkkk1'] = str(time.time())

s['xkkkkkkkkkkkkk2'] = 123

return s

salt 'w1.com' saltutil.sync_grains

应用: 在state中根据目标服务器的信息不同,做不同处理。

pillar 用于保存服务器的动态信息

内置pillar

vim /etc/salt/master

pillar_opts: True

PS: 重启生效

自定义pillar

vim /srv/pillar/top.sls

base:

'c*':

- apache

vim /srv/pillar/apache.sls

x1:

{ % if grains['os_family'] == 'Debian' % }

apache: apache_1

{ % elif grains['os_family'] == 'RedHat' % }

apache: httpd_2

{ % elif grains['os'] == 'Arch' % }

apache: apache_3

{ % endif % }

x2:

{ % if grains['ip_interfaces'].get('eth0')[0].startswith('10.10') % }

nameservers: ['10.10.9.31','10.10.9.135']

zabbixserver: ['10.10.9.234']

{ % else % }

nameservers: ['10.20.9.75']

zabbixserver: ['10.20.9.234']

{ % endif % }

PS: 刷新 salt '*' saltutil.refresh_pillar

自定义ext_pillar

vim /etc/salt/master

ext_pillar:

- wupeiqi:

- wupeiqi:{api:http://www.oldbody.com}

vim /usr/lib/python2.7/site-packages/salt/pillar/wupeiqi.py

import time

import commands

import salt.client

def ext_pillar(minion_id,pillar,*args,**kwargs):

local = salt.client.LocalClient()

result = local.cmd(minion_id, 'cmd.run', ['ifconfig'])

return {'ifconfig':result.get(minion_id)}

PS: 修改配置文件后,需要重启

代码发布简单流程

1. 在master上拉代码

如果文件存在,pull;否则clone

subprocess.check_call('git clone https://gitee.com/melo/video.git', cwd='/Users/landybird/PycharmProjects/demo', shell=True)

2. build

使用编译器进行编译

3. 软连接到saltstack

ln -s /data/codes/video /srv/salt/mycode/files/video

3. 将代码推送到指定机器

xxxxxx:

file.recurse:

- name: /data/codes

- source: salt://mycode/files/video

- user: root

- makedirs: True

- file_mode: 644

- dir_mode: 755

salt 'c1.com' state.sls mycode

4. 将代码推送到所有机器

salt '*' state.sls mycode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值