salt stack安装与使用
SaltStack除了传统的C/S架构外,其实还有Masterless架构,如果采用Masterless架构,我不需要单独安装一台SaltStack Master机器,只需要在每台机器上安装Minion,然后采用本机只负责对本机的配置管理工作机制服务模式.
Saltstack三大功能 远程执行(执行远程命令) 配置管理(状态管理) 云管理 Saltstack特征 1)部署简单、方便; 2)支持大部分UNIX/Linux及Windows环境; 3)主从集中化管理; 4)配置简单、功能强大、扩展性强; 5)主控端(master)和被控端(minion)基于证书认证,安全可靠; 6)支持API及自定义模块,可通过Python轻松扩展。 Master与Minion认证 1)minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。 2)master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。 Master与Minion的连接 SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。
1. saltstack安装配置 服务端: IP:122.114.73.247 Hostname:doupo.com 客户端: IP:122.114.154.79 Hostanme:cangqiong.com 2. 配置FQDN,让ip和主机名对应 vim /etc/hosts 122.114.73.247 doupo.com doupo 122.114.154.79 cangqiong.com cangqiong scp /etc/hosts root@122.114.154.79:/etc/ 3. 关闭防火墙和selinux 服务端: yum install epel-release -y #安装 epel源 yum install salt-master salt-minion -y #安装服务端和被监控端服务 客户端: yum install epel-release -y && yum install salt-minion –y #被控端:安装被监控端服务 服务端配置: vim /etc/salt/minion 在16行增加 master: 122.114.73.247 #服务端地址 systemctl start salt-master systemctl start salt-minion 客户端: vim /etc/salt/minion 在16行增加:master: 122.114.73.247 #服务端地址 systemctl start salt-minion ps -ef | grep salt 查看进程 4. 配置认证(在服务端操作) salt-key -a cangqiong.com #对客户端主机进行签名 salt-key -A #对所有主机进行签名 -d 删除指定的主机 salt-key -L 查看证书签署情况 5. 测试主机是否在线 salt '*' test.ping #对所有签名的客户端进行ping salt 'cangqiong.com' test.ping salt 'qiongcang.com' cmd.run 'system start httpd' #远程执行命令
6. saltstack之grains GRAINS 组件是saltstack中非常重要的一个组件,其主要用于记录Minion的一些静态信息,如比:CPU、内存、磁盘、网络等。grains信息是每次客户端启动后自动上报给master的,一旦这些静态信息发生改变需要重启minion 或者 重新同步下 grains。 salt 'cangqiong' grains.ls #列出所有的grains项目名称 salt cangqiong grains.items #列出所有的grains项和对应的值 启动grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的,我们可以根据grains收集到的一些信息,做配置管理工作,可以支持自定义一些监控项 7. 自定义grains 需要在客户端上添加文件grains vim /etc/salt/grains role:client env:test myname:cangqiong Linux myhostname:cangqiong systemctl restart salt-minion 执行salt cangqiong grains.items 或者salt cangqiong grains.item env查看
还可以使用salt -G env:test cmd.run 'w' salt -G env:test cmd.run 'id'
8. saltstack之pillar grains用于存储静态不易变更的数据,而pillar一般用来存储动态的、敏感的数据;通过minion端和master端都可以配置设置或获取grains信息,而pillar信息只能在master端配置,再到minion端执行。 pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息,可以自定义变量等 自定义配置pillar过程: vim /etc/salt/master 找到pillar_roots取消下面三行的注释 pillar_roots: base: - /srv/pillar 创建pillar文件的存放目录: mkdir -p /srv/pillar vim test.sls vim /srv/pillar/top.sls conf: /etc/123.conf base: myname: saltstack-server 'cangqiong.com': - test systemctl restart salt-master salt '*' saltutil.refresh_pillar #刷新获取新状态 salt '*' pillar.items #查看items
9. Saltstack 配置管理服务
vim /etc/salt/master
406 file_roots:
407 base:
408 - /srv/salt/
mkdir /srv/salt
创建文件top.sls,apache.sls ---python脚本注意缩进
systemctl restart salt-master --->salt taotao.com state.highstate
10. 配置远程文件管理 vim file.sls file_test: file.managed: - name: /tmp/linux.txt - source: salt://test/xiaoxiao.php - user: root - group: root - mode: 644 注意:第一行的 file-test 为自定的名字,表示该配置段的名字,可以在别的配置段中引用它;source指定文件从哪里拷贝,这里的 test 目录相当于是 /srv/salt/test 目录;name指定远程客户端要生成的文件。 mkdir -p /srv/salt/test ---> ehco "hello world" >/etc/salt/test/xiaoxiao.php 在/etc/salt/top.sls - apache下面加上 - file 测试: salt taotao.com state.highstate
11. saltstack远程执行命令 vim cmd.sls cmd_test: cmd.run: - unless: test -f /tmp/1111text.txt - names: - touch /tmp/11.txt - mkdir /tmp/1233 - user: root 注意:unless: 表示若/tmp/xuegodtext.txt文件不存在,也就是结果为True则执行-name后面的命令,为false则不执行;还可以使用 onlyif 表示若/tmp/xuegodtext.txt文件存在,则执行后面的命令;两者正好相反。
11. saltstack远程执行shell脚本 vim shell.sls shell_test: cmd.script: - source: salt://test/1.sh - user: root vim top.sls base: 'taotao.com': - shell #此名为上面创建的shell.sls
lamp_test: -----lamp.sls cmd.script: - source: salt://linux.sh cmd_test: cmd.run: - names: - systemctl start mariadb - echo -e "<?php\n phpinfo();\n?>" >/var/www/html/index.php - systemctl start httpd ------------------------------------------------------------------------------------------- base: -----top.sls 'taotao.com': - lamp
lamp_test: -----lamp.sls cmd.script: - source: salt://linux.sh ----------------------------------------------------------------------------- cmd_test: -----cmd.sls cmd.run: - names: - touch /tmp/index.html - echo "12332112345677654321" > /tmp/index.html ----------------------------------------------------------------------------- base: -----top.sls 'taotao.com': - lamp - cmd