SaltStack部署

SaltStack部署

saltstack 简介

Salt 是一个统一配置管理工具(与 puppet 功能相似)。可以批量远程执行命令、修改配置文件、部署软件、定时执行任务…… 总之,你能想到的,从远程对服务器执行的操作,它几乎都能做,而且可以批量对一批服务器做。

Salt 采用 master(server) - minion(client) 模式。具有很好的水平拓展性,以 “支持无限多个 client” 为设计目标。

总体架构

todo:图片

  • Salt Master 控制中心。
  • Salt Minion 装在被操作的服务器上。
  • Grains 是每一台 Minion 自身的 静态 属性。以 Python 字典的形式存放在 Minion 端。
  • Pillar 存放 key-value 变量。存放在 Master 端,由 Master 编译好后,下发给 Minion。所以,可以存放密码之类的涉密的或是一些需要统一配置的变量。
  • State 希望由 Salt 执行的一套操作。(比如 “安装 vim、配置 vim” 可以写在一个 state 里,也可以拆成两个 state 写。)执行时,Master 将 states 生成好,下发给 Minion,由 Minion 执行 states (转化成一条条命令)。

1.安装epel包

For RHEL/CentOS 5

rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/5/x86_64/epel-release-5-4.norach.rpm



For RHEL/CentOS 6

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

2.master 服务器端

安装
yum install -y salt-master
配置

打开/etc/salt/master 主配置文件;添加如下配置

vim /etc/salt/master

interface: 192.168.178.165 
auto_accept: True

==注意:注意冒号后面一定要有一个空格,yaml格式==

开机启动

chkconfig salt-master on

查看服务器端开放的端口

netstat -lntup
# 4505 4505(publish_port)为 salt 的 消息发布系统,
# 4506 4506(ret_port)为 salt 客户端与服务端通信的端口。

3.客户端:

安装
yum install salt-minion
配置

minion端至少需要配置两项,id和master需要指定。

1.id: 这台主机的唯一标识! 就像mac地址一样!
2.master: 指定salt master的IP地址或域名!
==注意:注意冒号后面一定要有一个空格。==

$ vim /etc/salt/minion

#id: salt.client.id 不配置,默认为主机名称 
#此配置必须配置在默认配置文件注释位置;
#不然,master 无法发现
master: 192.168.178.165

4.启动

启动master

service salt-master restart

启动minion

service salt-minion restart

其他启动方式

/usr/bin/python2.6 /usr/bin/salt-master -d
/usr/bin/python2.6 /usr/bin/salt-minion -d

日志查看路径:(有问题可查日志获取出错信息)
服务端:/var/log/salt/master
客户端:/var/log/salt/minion

master与minion的认证

master 主机执行

salt-key -L #查看所有主机
#没有接受的key会显示在Unaccepted Keys下
salt-key -A #接受所有主机
salt-key -D #删除所有主机
salt-key -a node1.salt.com  #接受指定的主机
salt-key -d node1.salt.com  #删除指定的主机

==一般情况下,master不会在配置文件中开启自动授权==

测试连通性

master 执行

salt '*' test.ping
node1.salt.com:
    True
[root@salt-master salt]# salt --versions-report
           Salt: 2015.5.10
         Python: 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
         Jinja2: 2.2.1
       M2Crypto: 0.20.2
 msgpack-python: 0.4.6
   msgpack-pure: Not Installed
       pycrypto: 2.0.1
        libnacl: Not Installed
         PyYAML: 3.10
          ioflo: Not Installed
          PyZMQ: 14.3.1
           RAET: Not Installed
            ZMQ: 3.2.5
           Mako: Not Installed
        Tornado: Not Installed
        timelib: Not Installed
       dateutil: 1.4.1

至此,安装完成;

salt 基本说明及使用

在服务端 salt 匹配 minion id

在运行 salt 命令进行匹配时,请使用单引号(‘),避免 shell 解析

匹配所有 minion:salt ‘*’ test.ping
匹 配 example.net域中的:salt ‘web?.example.net’ test. ping
匹配web1到web5的minion:salt ‘web[1-5]’ test.ping
匹配web-x、web-y及web-z minion:salt ‘web-[x-z]’ test.ping

正则表达式
匹配web-prod和web1-devel minion:
salt -E ‘web1-(prod|devel)’ test.ping
指定列表
salt -L ‘web1,web2,web3’ test.ping

指定组:
在服务务端中打开 master 配置文件 vim /etc/salt/master 添加如下分组

nodegroups:
  group1: 'salt-slave01'
  group2: 'L@salt-slave01,salt-slave02'

==* 注意yaml格式;前面是 2 个空格*==
测试

[root@salt-master salt]# salt -N group2 test.ping
salt-slave02:
    True
salt-slave01:
    True
[root@salt-master salt]# salt -N group1 test.ping
salt-slave01:
    True

group1 中为什么会有 L@,这代表什么意思;见下解释
>
Letter Match Type Example
G Grains glob G@os:Ubuntu
E PCRE minion ID E@web\d+.(dev|qa|prod).loc
P Grains PCRE P@os:(RedHat|Fedora|CentOS)
L List of minions L@minion1.example.com, minion3.domain.com
I Pillar glob I@pdata:foobar
S Subnet/IP address S@192.168.1.0/24 or S@192.168.1.100
R Range cluster R@%foo.bar
>

Saltstack 配置管理流程

Salt使用State模块文件进行配置管理,使用Y AML编写,以.sls结尾。如果进行配 置管理首先需要再Master的配置文件中指定”file roots”的选项,Salt支持环境的配 置,比如测试环境和生产环境但是base环境是必须的。而且Base环境必须包含入 口文件top.sls。

配置软件安装

告诉 Salt 你的配置管理文件在哪里。根据你是如何安装 Salt,有时你需要自己创建
/srv/salt 目录,服务端 master 配置文件中,默认是:

file_roots:
  base:
    - /srv/salt

/srv/salt 目录结构

[root@salt-master salt]# tree /srv/salt
/srv/salt
├── apache
│   ├── apache.sls
│   └── httpd.conf
├── git
│   ├── install.sls
│   └── remove.sls
├── testshell
│   ├── test.sh
│   └── test.sls
└── top.sls
[root@salt-master salt]# cat top.sls
base:
  'salt-slave01':
    - apache.apache
  'salt-slave01':
    - testshell.test
[root@salt-master salt]# cat apache/apache.sls
apache:
  service:
    - name: httpd
    - running
    - reload: True
    - watch:
        - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file:
    - managed
    - source: salt://apache/httpd.conf
    - backup: minion
[root@salt-master salt]# cat git/install.sls
git_install:
  pkg.installed:
    - name: git
[root@salt-master salt]# cat testshell/test.sls
nginx_install:
  cmd.script:
     - source: salt://testshell/test.sh
     - user: root
     - shell: /bin/bash
[root@salt-master salt]# cat testshell/test.sh
#!/bin/bash
echo hostname
echo date
echo `date` >> /tmp/salt_test.md
salt 'salt-slave01' state.highstate test=True
salt 'salt-slave01' state.highstate
salt 'salt-slave01' state.sls testshell.test
salt 'salt-slave01' pkg.remove git
[root@salt-master salt]# salt 'salt-slave01' sys.list_functions pkg
salt-slave01:
    - pkg.available_version
    - pkg.check_db
    - pkg.clean_metadata
    - pkg.del_repo
    - pkg.diff
    - pkg.download
    - pkg.expand_repo_def
    - pkg.file_dict
    - pkg.file_list
    - pkg.get_locked_packages
    - pkg.get_repo
    - pkg.group_diff
    - pkg.group_info
    - pkg.group_install
    - pkg.group_list
    - pkg.hold
    - pkg.install
    - pkg.latest_version
    - pkg.list_holds
    - pkg.list_pkgs
    - pkg.list_repo_pkgs
    - pkg.list_repos
    - pkg.list_upgrades
    - pkg.mod_repo
    - pkg.modified
    - pkg.normalize_name
    - pkg.owner
    - pkg.purge
    - pkg.refresh_db
    - pkg.remove
    - pkg.unhold
    - pkg.upgrade
    - pkg.upgrade_available
    - pkg.verify
    - pkg.version
    - pkg.version_cmp
[root@salt-master salt]# salt 'salt-slave01' sys.list_functions cmd
salt-slave01:
    - cmd.exec_code
    - cmd.exec_code_all
    - cmd.has_exec
    - cmd.retcode
    - cmd.run
    - cmd.run_all
    - cmd.run_chroot
    - cmd.run_stderr
    - cmd.run_stdout
    - cmd.script
    - cmd.script_retcode
    - cmd.shell
    - cmd.shells
    - cmd.tty
    - cmd.which
    - cmd.which_bin
[root@salt-master salt]#
基本说明

配置文件

/etc/salt/master #master 配置文件修改之后无需重启
/etc/salt/minion #minion 客户端配置文件,修改后需要重启

文件位置

State 文件 默认存放在 /srv/salt
Pillar 文件 默认存放在 /srv/pillar

基本使用

启动 Salt

# 根据自己需要,选择以下启动方式
salt-master
salt-master -d  # daemonize the process
sudo service salt-master start  # linux service
salt-master --log-level=debug

salt-minion
salt-minion -d  # daemonize the process
sudo service salt-minion start  # linux service

执行 Salt 命令

salt '<target>' <function> [arguments]

target
用来指定对哪些 minion 执行操作。可以匹配 minion id 或 Grains。

# 支持正则表达、列表以及 id/grains 混合。

# 普通 (按 minion-id 过滤)
salt '*.example.org' test.ping

# 正则表达 (regular expression)
salt -E 'virtmach[0-9]' test.ping

# 列表 (list)
salt -L 'foo,bar,baz,quo' test.ping

# 混合型 (combined)
salt -C 'G@os:Ubuntu and webser* or E@database.*' test.ping
| Letter |  Match Type        | Example                             |
| :----- | :----------------- | :---------------------------------- |
| G      | Grains glob        | G@os:Ubuntu                         |
| E      | 正则匹配 Minion ID  | E@web\d+\.(dev\|qa\|prod)\.loc      |
| P      | Grains 正则匹配     | P@os:(RedHat\|Fedora\|CentOS)       |
| L      | List of minions    | L@minion1,minion3 or bl*.domain.com |
| I      | Pillar glob        | I@pdata:foobar                      |
| S      | Subnet/IP address  | S@192.168.1.0/24 or S@192.168.1.100 |
| R      | Range cluster      | R@%foo.bar                          |

function:
指定执行哪个命令模块(module)。

要习惯从下面这个 salt builtin execution modules 列表中寻找自己需要的,点进去看详细的命令参数。
http://docs.saltstack.com/en/latest/ref/modules/all/

常用的举例:

salt '*' test.ping
salt '*' cmd.run "ls -l | awk '/foo/{print \$2}'"
salt '*' state.sls xxx

arguments:
module 的参数。通过空格分隔,加在 function 后面。 比如:-l debug 输出 debug 信息

salt 命令参数:http://docs.saltstack.com/en/latest/ref/cli/salt.html
salt module 使用指南:http://docs.saltstack.cn/topics/tutorials/modules.html
salt builtin execution modules 列表: http://docs.saltstack.com/en/latest/ref/modules/all/
salt logging 指南:
http://salt.readthedocs.org/en/latest/ref/configuration/logging/index.html
http://blog.appcheckin.com/2015/12/10/saltstack-tutorial/
配置文件;说的很详细
http://www.jixuege.com/?id=32

saltapi
123456
crt key 123456

补充

ps -ef | grep -i salt | grep -v saltsta+ | grep -v grep
salt-master -l debug
必要时可祭出日志文件查看日志:
cat /var/log/salt/minion
cat /var/log/salt/master

缓存目录
/var/cache/salt/minion

#tcp端口显示如下认为ok
#http://blog.csdn.net/u010842538/article/details/51702108
[root@test1-1053 ~]# netstat -ntau | grep -E "450"
tcp        0      0 172.16.10.53:4505           0.0.0.0:*                   LISTEN
tcp        0      0 172.16.10.53:4506           0.0.0.0:*                   LISTEN
tcp        0      0 172.16.10.53:4506           172.16.10.55:34850          ESTABLISHED
tcp        0      0 172.16.10.53:4505           172.16.10.55:44483          ESTABLISHED
tcp        0      0 172.16.10.53:4506           172.16.10.54:60344          ESTABLISHED
tcp        0      0 172.16.10.53:4505           172.16.10.54:44852          ESTABLISHED
time salt '*' test.ping
[root@test1-1053 private]# time salt '*' test.ping
test2-1054:
    True
test3-1055:
    True
这个时间长,是因为本地dns解析很慢导致;

real    0m31.215s 
user    0m0.781s
sys 0m0.144s
http://172.16.10.53:8888/events?token=beda0c99e5f86f1d09602399a30b6e4c16950592
查看还在运行的程序:
salt-run jobs.active
查看以前的操作历史记录来:
salt-run jobs.list_jobs
查看制定的jid,来查看返回的信息
salt-run jobs.lookup_jid <job id number>
#只是在minion本地拷贝文件;注意:是minion 自己拷贝自己机器文件;不是跨同步
salt 'test2-1054' file.copy /tmp/aa.log  /tmp/bb.log
#修改文件所有者
salt 'test2-1054' file.chown '/home/liuliwei_bak/src/me' liuliwei liuliwei
#文件追加内容
salt 'test2-1054' file.append '/home/liuliwei_bak/src/me' 'test append fsadsfsad'
#对比文件md5;md5sum  filel
salt 'test2-1054' file.check_hash '/home/liuliwei_bak/src/me' md5:111b64d5671788e7ffaef9637ec3613f

#获取文件之行权限
salt 'test2-1054' file.get_mode /tmp/aa.log

问题

dns解析慢有可能造成此问题
Salt request timed out. The master is not responding. If this error persists after verifying the master is up, worker_threads may need to be increased.

作者:{微尘大海}(weichenddahai),日期:2016-6-17, email:784456305@qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于SaltStack部署,您可以按照以下步骤进行操作: 1. 安装Salt Master:首先,您需要在一台服务器上安装Salt Master。您可以从SaltStack官方网站下载适合您操作系统的安装包并按照说明进行安装。 2. 配置Salt Master:安装完成后,您需要配置Salt Master来管理您的目标主机。在配置文件(通常是`/etc/salt/master`)中,您可以设置主机名、密钥等参数。确保配置文件中的`file_roots`和`pillar_roots`设置了正确的目录路径以供Salt Master读取配置和状态文件。 3. 安装Salt Minion:在要管理的每台目标主机上,您需要安装Salt Minion。与安装Salt Master类似,您可以从SaltStack官方网站下载适合目标主机操作系统的安装包并按照说明进行安装。 4. 配置Salt Minion:安装完成后,在每个目标主机上修改Minion配置文件(通常是`/etc/salt/minion`),将其连接到Salt Master。在配置文件中,设置正确的`master`参数,指向您Salt Master的IP地址或主机名。 5. 接受Salt Minion密钥:在Salt Master上运行命令`salt-key -L`查看尚未接受的Minion密钥。然后,使用`salt-key -a <minion_id>`接受Minion的密钥。 `<minion_id>`是Minion在配置文件中定义的标识符。 6. 部署状态:在Salt Master上创建状态文件,描述您要在目标主机上执行的操作。状态文件使用YAML格式,并使用SaltStack的模块和函数来定义所需的配置和操作。 7. 执行状态:使用`salt '*' state.apply`命令在所有Minion上执行状态。`*`通配符表示所有Minion。 这些是基本的SaltStack部署步骤。您可以根据实际需求进一步使用SaltStack的功能,例如使用Salt Pillar进行配置管理、使用Salt Reactor来响应事件等。希望对您有帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值