美文网首页运维驿站saltstack
SaltStack自动化运维

SaltStack自动化运维

作者: 闫军辉 | 来源:发表于2015-08-10 17:38 被阅读1761次
    部署思路:
    通过Python实现自动添加新服务器:

    在服务端添加受控端IP和登录用户名密码,服务端自动在受控服务器安装staltstack受控端,并且自动配置.实现无需登录受控端服务器只需要提供用户名和密码即可自动添加新的受控服务器

    第一部分:基础安装

    角色 IP
    SlatStack服务器 10.10.29.113
    受控端(一) 10.10.56.128
    受控端(二) 10.10.29.214

    Salt-master部署:

    1.安装epel源:
    yum -y install epel-release

    2.安装saltstack:
    yum -y install salt-master chkconfig salt-master on && service salt-master start

    添加管理用户:
    useradd admin; echo password | passwd --stdin admin

    用户登录测试:
    salt -a pam \* test.ping
    3.salt-master添加防火墙规则:

    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4505 -j ACCEPT 
    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4506 -j ACCEPT
    service iptables save
    

    Salt-minion安装:

    1.安装epel源:
    yum -y install epel-release

    2.安装salt-minion:
    yum -y install salt-minion chkconfig salt-minion on && service salt-minion start

    Salt-minion连接服务器:

    1.Salt-minion操作:
    编辑/etc/salt/minion文件:
    vi /etc/salt/minion
    注意:号后面的空格,不然重启服务会报错!

    master: 10.10.29.113
    

    2.重启slat-minion服务.
    service salt-minion restart

    3.Salt-master操作:
    查看所有连接受控端:salt-key -L
    确认接受指定受控端证书连接:salt-key -a 受控端名称
    确认接受所有受控端证书连接:salt-key -A

    常用操作

    测试连接是否正常:
    salt '*' test.ping

    执行shell命令
    salt '*' cmd.run "uptime"

    说明:* 代表所有Salt-minion,单独测试指定Salt-minion,修改成对应Salt-minion名称

    第二部分:简单配置管理

    以部署apache为例:
    1.指定配置文件位置:
    sls文件缩进要求:
    上级与下级缩进两个空格
    编辑Salt-master配置文件中,file_roots块
    vi /etc/salt/master

    file_roots:
      base:
        - /srv/salt
    

    2.编辑配置文件sls
    在minion_ID为10-10-56-128的salt-minion上安装httpd和httpd-devel包:
    编辑top.sls:

    base:
      '10-10-56-128':
          - apache
    

    编辑apache.sls(⚠注意文件名要跟top.sls中定义的相同,文件名后缀为sls):

    apache-services:#定义服务名称
      pkg.installed:#调用包安装模块
        - names:#指定安装包的名称
          - httpd
          - httpd-devel
      service.running:#设置服务状态模块
        - name: httpd#指定服务名称
        - enable:True#设置服务自启动状态
    

    配置完成后执行:
    salt '10-10-56-128' state.highstate

    第三部分:Grains数据系统(静态数据):

    1.获取Salt-minion的状态信息(grains只有在salt-minion启动的时候收集信息)
    获取所有信息命令:
    salt '*' grains.items
    获取指定参数信息:
    salt '*' grain.get shell
    2.自定义Salt-minion的grains:
    编辑新增 /etc/salt/grains(编辑完成后,需要重启salt-minion服务)
    service: web
    在salt-master获取自定义grains:
    salt '*' grains.get service
    使用grains匹配Salt-minion执行命令:
    salt -G service:web cmd.run 'service httpd status'

    第四部分:Pillar数据系统(动态数据):

    以zabbix为例:
    1.修改salt-master主配置文件(修改完执行service slat-master restart重启salt主服务):
    vi /etc/salt/master

    pillar_roots:
      base:
        - /srv/pillar
    

    2.新建编辑/srv/pillar/top.sls文件:

    base:
      '10-10-56-128':
        - zabbix
    

    3.新建编辑/srv/pillar/zabbix.sls文件:
    Zabbix_Server: 10.10.29.113
    4.刷新同步pillar配置:
    salt '*' saltutil.refresh_pillar
    5.获取pillar配置状态:
    salt '*' pillar.items
    6.在指定的pillar执行命令:
    salt -I Zabbix_Server:10.10.29.113 test.ping

    第五部分:saltstack远程执行--Targeting详解

    minionID相关匹配
    minionID命名规范:
    mysql-mysql001-BGP04-search.baidu.com
    _____ ________ _____ ______ __________
    服务     节点   机房   业务     所属域
    

    1.*通配符
    * ---代表所有
    web* ---包含web字符的所有受控端
    ?---单个字符模糊匹配
    !----不包含
    2.列表方式
    salt -L '10.10.56.128,10.10.29.214' test.ping
    3.正则表达式:
    salt -E '10-10-*' cmd.run 'df -h'

    1. sls配置文件内使用正则表达式(首行要声明- mach: pcre):
    base:
      '10-10-56-128':
        - mach: pcre 
        - zabbix
    

    5.通过IP地址定位Salt-minion:
    salt -S 10.10.56.128 cmd.run 'df -h'
    6.sls配置文件内使用grains(首行要声明- mach: grain):

    base:
      '10-10-56-128':
        - mach: grain
        - zabbix
    

    6.多个条件匹配:
    salt -C '10-10* or I@Zabbix_Server:10.10.29.113' cmd.run 'df -h'
    salt -C '10-10* and I@Zabbix_Server:10.10.29.113' cmd.run 'df -h'
    7.分组(group),可以直接指定分组或定义各种匹配条件来分组:
    编辑/etc/salt/master文件

    nodegroups:
      group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
      group2: 'G@os:Debian and foo.domain.com'
    

    8.批处理执行:
    salt '*' -b 2 test.ping #同时操作2台Salt-minion

    第六部分:常见模块使用

    1.Network模块:

    1.返回tcp连接数
    salt '*' network.active_tcp
    2.service服务管理模块
    salt '*' service.get_all #查看所有服务
    salt '*' service.status sshd #检查指定服务状态
    salt '*' service.restart sshd#重启指定服务状态
    salt '*' service.stop sshd#停止指定服务状态
    salt '*' service.start sshd#启动指定服务状态
    3.state模块:
    salt '*' state.show_top #top.sls文件的配置执行结果
    4.ACL模块:

    编辑/etc/salt/master

    #白名单(指定用户可以执行的模块)
    client_acl:
      larry:
        - test.ping
        - network.*
    
    #黑名单(禁止指定用户执行的模块)
    client_acl_blacklist:
      users:
        - root
        - '^(?!sudo_).*$'   #  all non sudo users
      modules:
        - cmd.run
    

    第七部分.Salt-minion数据的返回和存储(存储到MySQL):

    1.在slat-master端/etc/salt/master配置文件中增加以下配置:

    mysql.host: 'salt'
    mysql.user: 'salt'
    mysql.pass: 'salt'
    mysql.db: 'salt'
    mysql.port: 3306
    

    2.配置MySQL:
    ``
    新建salt.sql输入下面的内容,然后执行mysql -uroot -p < salt.sql倒入到MySQL数据库中

    -- 数据库表结构
    CREATE DATABASE  `salt`
      DEFAULT CHARACTER SET utf8
      DEFAULT COLLATE utf8_general_ci;
    
    USE `salt`;
    
    --
    -- Table structure for table `jids`
    --
    
    DROP TABLE IF EXISTS `jids`;
    CREATE TABLE `jids` (
      `jid` varchar(255) NOT NULL,
      `load` mediumtext NOT NULL,
      UNIQUE KEY `jid` (`jid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Table structure for table `salt_returns`
    --
    
    DROP TABLE IF EXISTS `salt_returns`;
    CREATE TABLE `salt_returns` (
      `fun` varchar(50) NOT NULL,
      `jid` varchar(255) NOT NULL,
      `return` mediumtext NOT NULL,
      `id` varchar(255) NOT NULL,
      `success` varchar(10) NOT NULL,
      `full_ret` mediumtext NOT NULL,
      `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      KEY `id` (`id`),
      KEY `jid` (`jid`),
      KEY `fun` (`fun`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Table structure for table `salt_events`
    --
    
    DROP TABLE IF EXISTS `salt_events`;
    CREATE TABLE `salt_events` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `tag` varchar(255) NOT NULL,
    `data` varchar(1024) NOT NULL,
    `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `tag` (`tag`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    相关文章

      网友评论

        本文标题:SaltStack自动化运维

        本文链接:https://www.haomeiwen.com/subject/eawpqttx.html