【干货分享】多服务器下的自动化部署,有了它你就爽歪歪了—Part2

继上篇多服务器自动化部署介绍后,本次将就三个我在实际工作中常用高级功能作简单介绍,让大家更能理解salt-stack,并将其运用到实际工作中。

salt的分组

当salt minion服务器非常多时,各服务器的minion id可能毫无规律,也可能需要仅对部分minion下发配置,如果每次输写salt命令时,都需要重新想下正则表达式怎么写,就显得易用性极差,可复用性不高。

为便于更好的管理,按各维度对minion id进行分组就显得更清晰易用了。nodegroup即用于对minion进行分组。

  1. 分组的类型
类型 说明 举例
-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 minions列表 L@minion1.example.com,minion3.domain.com or bl*.domain.com
-I Pillar glob匹配 I@pdata:foobar
-S 子网/IP地址匹配 S@192.168.1.0/24 or S@192.168.1.100
-R Range cluster匹配 R@%foo.bar
-D Minion Data匹配 D@key:value

其中E和L是最常用的(注意or代表和的意思。。。。与常规语法不同-_-d)

  1. 分组的配置

/etc/salt/master配置文件里进行配置,找到nodegroups这个关键字就能看到示例了

nodegroups:

test1: ‘E@^.*saltstack.*$’

这里正则表达式的意思是匹配包含字符串saltstack的minion id,通常在实际应用中,可以通过这种方式匹配不同应用的minion

  1. 测试分组

salt -N test1 test.ping

如果出现正常返回值则表示分组配置成功

[root@Admin1-saltstack src]# salt -N test1 test.ping

Admin2-saltstack.littlebee.com:

True

Admin3-saltstack.littlebee.com:

True

如何建立多Master的SaltStack环境

0.16.0版本的发布,带来了minion可以连接多Master的特性。这种方式称为多master( multi-master )配置,使环境中的SaltStack冗余。在这种配置下,Salt Minions将连接所有配置的Salt Master。

在建立多Master的配置中,主要的一点就是所有的Master使用同样的private key。这些key将在Master第一次启动时自动生成。 因此在多Master环境建立时,需要从原始的(original) Master上拷贝其private key至第二个Master以提供它启动时自动生成的那个, 以此类推。

Master的private key存储在Master本地的 pki_dir 目录下。默认的目录是 /etc/salt/pki/master/master.pem,将该key拷贝到新增的master上。需要注意的是,在拷贝的时候,需要确保新增的master上并没有minion连接进来。

在已有一台master,多台minion的情况下,增加一台master服务器,操作步骤:

1) apt-get -y -q install salt-master      # 在新增服务器安装服务器端

2) 将已有的一台master上的两个文件复制到新增master的同样目录下

/etc/salt/pki/master/master.pem

/etc/salt/pki/master/master.pub

3)vi /etc/salt/master    # 设置监听IP及打开自动通过验证

interface: 0.0.0.0

auto_accept: True

4)service salt-master restart

5)修改每台minion的/etc/salt/minion文件,修改方法如下:

master:

– master1.example.tld

– master2.example.tld

6) service salt-minion restart

此时所有的Master均可以控制你的minions。

python环境下如何使用salt

一、Python安装saltstack

pip install salt

二、接口调用实例 (仅限在salt master服务器上执行)

1、test.ping

import salt.client

client = salt.client.LocalClient()

ret = client.cmd(‘*’,’test.ping’)

print ret

2、cmd模块

1)功能:实现远程命令的调用执行

2)实例:

获取所有主机的内存使用情况 salt ‘*’ cmd.run “free -m”

client.cmd(‘SN2016-02-04′,’cmd.run’,[‘free -m’])

3、cp模块

1)功能:实现远程文件复制、目录复制、以及下载URL文件等操作

2)实例:

将制定被控主机的/etc/hosts文件复制到被控主机的本地的salt cache目录(/var/cache/salt/minion/localfiles)

salt ‘*’ cp.cache_local_file /etc/hosts

将主服务器file_roots指定位置下的目录复制到被控主机

salt ‘*’ cp.get_dir salt://path/to/dir /minion/dest

将主服务器file_roots指定位置下的文件复制到被控主机

salt ‘*’ vcp.get_file salt://path/to/file /minion/dest

下载URL内容到被控主机指定位置

salt ‘*’ cp.get_url http://www.saltshdot.org /tmp/index.html

client.cmd(‘XN2016-02-04′,’cp.get_file’,[‘salt://path/to/file’,’/minion/dest’])

4、file 模块

1)功能:被控主机文件常见操作

2)实例

校验所有被控主机的/etc/paddwd文件的MD5是否为99819b452d28c933d52f44ce5eb707ad,一致则返回True

salt ‘*’ file.check_hash /etc/passwd md5= 99819b452d28c933d52f44ce5eb707ad

在所有被控主机创建目录

salt ‘*’ file.mkdir /opt/test

将所有被控主机的/etc/httpd/httpd.conf文件的LogLevel参数的warn修改成info

salt ‘*’ file.sed /etc/httpd/httpd.conf ‘LogLevel warn’ ‘LogLevel info’

给所有被控主机的/tmp/test/test.conf 文件追加内容’maxclient 1000′

salt ‘*’ file.append /tmp/test/test.conf ‘maxclient 1000’

删除所有被控主机的/etc/foo文件

salt ‘*’ file.remove /etc/foo

client.cmd(‘*’,’file.remove’,[‘/etc/foo’])

5、根据namenode来确定目标主机

对应的shell命令:  salt -N act_server cmd.run ‘df-lh’

最后

在实际运维的过程中,经常会出现很多重复的工作,工具的出现和灵活使用就是提高工作效率不可或缺的法宝。希望本文有起到抛砖引玉的作用,让大家有兴趣去挖掘salt-stack及其它自动化运维/部署更多更高级更有意思的功能。

 

 

Spread the word. Share this post!

Meet The Author

Leave Comment