• saltstack-自动化(2)


    执行的命令写入mysql

    [root@node1]#yum install MySQL-python -y

    [root@node1]#vim /etc/salt/master

    master_job_cache: mysql               ###把master的job写如mysql里面
    mysql.host: '10.240.17.103'           ###mysql地址
    mysql.user: 'salt'                    ###连接mysql用户名   
    mysql.pass: 'salt'                    ###mysql的密码
    mysql.db: 'salt'               ###连接mysql的库
    mysql.port: 3306 ###mysql的连接端口

    [root@node1]#yum install mysql-server

    [root@node1]#/etc/init,d/mysqld start

    [root@node1]#mysql_secure_installation                         ##安全初始化

    第一次直接回车

    第二次是否为root配置密码  Y      输入密码

    第三次是否删除匿名用户   Y

    第四次是否禁止root远程登录 Y

    第五次是否删除test数据库 Y

    第六次是否刷新授权表  Y

    [root@node1]#mysql -u root -p 123.com

    https://www.unixhot.com/docs/saltstack/ref/returners/all/salt.returners.mysql.html#module-salt.returners.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;
    CREATE INDEX jid ON jids(jid) USING BTREE;
    
    --
    -- 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` mediumtext NOT NULL,
    `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `master_id` varchar(255) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `tag` (`tag`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    
    grant all on salt.* to salt@10.240.17.103 identified by 'salt';

    [root@node1]#/etc/init.d/salt-master restart

    [root@node1]#mysql -h 10.240.17.103 -u salt -p salt

    use salt;
    select * from salt_returns;
    
    [root@node1]#salt '*' test.ping     
    select * from salt_returns;           ##发现salt-master的命令已经存入数据库
    

    https://www.unixhot.com/docs/saltstack/topics/targeting/globbing.html     salt-master日常操作方法

    salt '*' network.active_tcp    ###获取网络信息
    salt '*' network.arp               ###获取ARP信息
    salt '*' network.connect archlinux.org 80    ###连通性测试  到这个域名的80端口
    
    
    https://www.unixhot.com/docs/saltstack/ref/modules/all/salt.modules.network.html#module-salt.modules.network
    

    salt 'node1' state.show_top    ##查看node1的都有那些状态

    include:                      ##引用web.下的httpd.sls来做配置

      - web.httpd 

    ###############################################

     salt-run manage.status    #####做状态管理

    salt- run  manage.versions   ###查看版本是什么

    ################################################

    自动化安装zabbix-agent

    [root@node1 base]#mkdir init zabbix logstash

    [root@node1 base]#cd init && mkdir files &&cd files

    [root@node1 files]# wget http://mirrors.aliyun.com/repo/epel-7.repo

    [root@node1 init]# vim yum_repo.sls

    /etc/yum.repos.d/epel-7.repo:       ##状态名 直接是路径名
      file.managed:
        - source: salt://init/files/epel-7.repo
        - user: root
        - group: root
        - mode: 644
    

    [root@node1 base]#cd zabbix && mkdir files && vim zabbix-agent.sls

    include:
    - init.yum_repo
    zabbix-agent: pkg.installed: - name: zabbix22-agent
    - require:
    - file: /etc/yum.repos.d/epel-7.repo ##依赖这个名称ID
    file.managed: - name: /etc/zabbix/zabbix_agentd.conf - source: salt://zabbix/files/zabbix_agentd.conf - user: root - group: root - mode: 644 - template: jinja ###变成jinja模版 - defaults: ## 声明以下变量 ZABBIX_SERVER: 10.240.17.103
    AGENT_HOSTNAME: {{ grains['fqdn'] }} ###通过grains来获取主机名
    - require: ###依赖与zabbix-agent,如果安装成功才执行file.managed
    - pkg: zabbix-agent
    service.running: ######状态管理
    - name: zabbix-agent
    - enable: True
    - watch: ###依赖于
    - file: zabbix-agent ##文件变更就重启
    - pkg: zabbix-agent ##包变更就重启
    zabbix_agentd.conf.d:
    file.directory:
    - name: /etc/zabbix/zabbix_agentd.conf.d
    - watch_in:
    - service: zabbix-agent
    - require:
    - pkg: zabbix-agent ##依赖包 zabbix-agent
    - file: zabbix-agent ##依赖文件zabbix-agent

    [root@node1 zabbix]#sz /etc/zabbix_agentd.conf

    [root@node1 files]#vim zabbix_agentd.conf

    Server={{ ZABBIX_SERVER }}

    Hostname={{  AGENT_HOSTNAME    }}

    INCLUDE=/etc/zabbix_agentd.conf.d/

    [root@node1 prod]# mkdir -p modules/{apache,haproxy,keeplived,mysql,redis}

    [root@node1 prod]# mkdir redis-cluster

    [root@node1 prod]#  cd modules && cd redis

    [root@node1 redis]# vim redis-install.sls        ######redis安装

    redis-install:
      pkg.installed:
        - name: redis
    

    [root@node1 redis-cluster]# mkdir files && vim redis-master.sls

    include:
      - modules.redis.redis-install
    
    redis-master-config:
      file.managed:
        - name: /etc/redis.conf
        - source: salt://redis-cluseter/files/redis-master.conf
        - user: root
        - group: root
        - mode: 644
        - template: jinja
        - defaults:
          REDIS_MEM: 1G
    
    redis-master-reivice:
      service.running:
        - name: redis
        - enable: True
        - wath:
          - file: redis-master-config
    

     [root@node1 redis-cluster]# cd files && sz redis.conf && mv redis.conf redis-master.conf

     [root@node1 files]# vim redis-master.conf

    61 bind 0.0.0.0

    128 daemonize yes

    537 maxmemory {{ REDIS_MEM }}

     [root@node1 prod]#salt 'node1' state.sls redis-cluster.redis-master test=True saltenv=prod

    redis-cli -h 10.240.17.100  

     https://github.com/unixhot/saltbook-code/tree/master/salt/prod/keepalived

    salt-ssh配置

     [root@node1 ~]#yum install salt-ssh -y

     [root@node1 ~]#vim /etc/salt/roster

    node1:
      host: 10.240.17.100
      user: root
      passwd: 123.com
      port: 22
    
    
    node2:
      host: 10.240.17.103
      user: root
      passwd: 123.com
      port: 22
    

     [root@node1 ~]#salt-ssh '*' test.ping -i

    [root@node1 ~]#salt-ssh '*'  -r 'w' 

     https://www,unixhot.com/docs/saltstack/ref/netapi/all/salt.netapi.rest_cherrypy.html#a--rest-api-for-salt

    #########salt-api

    [root@node1 ~]#yum install salt-api

    [root@node1 ~]# rpm -qa |grep cherry

    [root@node1 ~]# yum install pyOpenSSL

    [root@node1 ~]# salt-call --local tls.create_self_signed_cert

    [root@node1 ~]# vim /etc/salt/master

    12 default_include: master.d/*.conf

    [root@node1 salt]#mkdir master.d && master.d

     [root@node1 master.d]vim api.conf

    rest_cherrypy:
      host: 10.240.17.103
      port: 8000
      ssl_crt: /etc/pki/tls/certs/localhost.crt
      ssl_key: /etc/pki/tls/certs/localhost.key
    

    [root@node1 salt]#useradd -M -s /sbin/nologin saltapi              ##不创建家目录

    [root@node1 salt]#echo "saltapi" |passwd saltapi --stdin          ##创建非交互的密码

    [root@node1 master.d]#vim auth.conf

    external_auth:
      pam:
        saltapi:
          - .*
          - '@wheel'
          - '@runner'
          - '@jobs'
    

    [root@node1 salt]# /etc/init.d/salt-master restart

    [root@node1 salt]#/etc/init.d/salt-api restart

    [root@node1 salt]# netstat- ntlp |grep 8000

    [root@node1 salt] #curl -sSk https://10.240.17.103:8000/login
    -H 'Accept: application/x-yaml'
    -d username='saltapi'
    -d password='saltapi'
    -d eauth='pam'

    [root@node2 ~]# curl -sSk https://10.240.17.103:8000     -H 'Accept: application/x-yaml'     -H 'X-Auth-Token: 3eb37a72cc8ba6ade1be9bb73753514e746658c4'    -d client=local     -d tgt='*'     -d fun=test.ping

    [root@node2 ~]# curl -sSk https://10.240.17.103:8000     -H 'Accept: application/x-yaml'     -H 'X-Auth-Token: 3eb37a72cc8ba6ade1be9bb73753514e746658c4'    -d client=local     -d tgt='*'     -d fun=cmd.run -d arg='uptime'

    ########salt-master 集群架构

    [root@node1]#vim /etc/master

    master:

      - 10.240.17.100

      - 10.240.17.103

    [root@node2]# yum install salt-master -y

    [root@node1]#sz /etc/salt/master 传到salt2 /etc/salt/

    [root@node1]#yum install nfs-utils -y

    [root@node1]#vim /etc/export

    /etc/salt/pki/master 10.240.17.100 *(rw,sync,no_root_squash,no_all_squash)

    /srv/salt 10.240.17.100 *(rw,sync,no_root_squash,no_all_squash)

    [root@node1]# /etc/init.d/nfs start

    [root@node2]#showmount -e 10.240.17.103

     [root@node2]#mkdir /etc/salt/pki/master

    [root@node2]#mkdir /srv/salt 

    [root@node2]#mount -t nfs 10.240.17.103:/etc/salt/pki/master /etc/salt/pki/master

    [root@node2]#mount -t nfs 10.240.17.103:/srv/salt /srv/salt

    [root@node2]# systemctl start salt-master 

    1.master配置文件一样  2.master file_roots一样   3.master公钥和私钥一样4.修改salt-minion配置,设置2个master并重启  5.在另外一台master上同意设置

     altStack生产实践建议
    
    1.不建议使用Salt的File模块 目录管理  进行代码部署
    
        命令编排的状态管理
         压缩包,file.managed
         cmd.run 执行部署
         
    2.配置管理,不建议使用salt管理项目代码的配置文件。
    
         分层管理,salt只管理服务例如Nginx Tomcat Apache      
    
    3.如果你有固定的文件服务器,可以使用source: salt://  http://  ftp://   
    
    4.SLS版本化
      1.创建一个git项目。
      2.找一个测试环境,编写SLS,测试,git commit && git push到版本仓库
      3.生产环境git pull,测试。全部执行。
         
         1.谁 什么时间 干了什么  输出是什么 
    
    5. 使用Master  Job Cache保存job的输出到SQL
    
    
    
    停机维护:
    
      1.登录到xxx机器         检查:执行hostname检查主机 执行ifconfig检查ip地址
      2.执行xxx。关闭xxx      检查:执行netstat -ntlp | grep 80检查端口 执行ps aux | grep nginx检查进程
      
      
    SaLtStack 二次开发
    
       1.Master Job cache将所有的job输出保存到MySQL
       2.如果做管理平台,可以将User id和Jid做关联
       3.使用List做目标选择
       
       
    回忆过去:
    
       1.SLS YAML ID NAME 
       2.状态模块  pkg file service cmd
       3.状态间关系  require require_in watch watch_in  unless
       4.include
       
    minion_id怎么改
    
        1.停止minion服务
        2.salt-key -d minionid 删除minion
        3.rm -f /etc/salt/minion_id
        4.rm -rf /etc/salt/pki
        5.修改配置文件id:
        6.启动minion.
        
    系统初始化:
        
        1.DNS       file.managed
        2.防火墙    service.dead
        3.selinux    file.managed
        4.limit设置   file.managed
        5.SSH useDNS设置,改端口   file.managed
        6.systctl 内核参数调优  systctl
        7.关闭不需要的服务   service
        8.时间同步     file.managed cron
        9.基础软件包    pkg.installed
        10.yum源     file.managed
        
        生产环境按项目走
        
        
        modules/   基础状态
            - files
        
        
        redis-cluster  公用服务
             - files
             
        sms/   
           - redis-cluster/redis-master.sls redis-slave.sls
           - mysql-cluster/mysql-master.sls  mysql-slave.sls
           - nginx 
        
        shop/
        
        user/
        
    生产建议
  • 相关阅读:
    面向对象一
    模块二:os模块、sys模块、json模块、pickle模块,包
    模块一:时间模块、random模块、hashlib模块、日志模块
    异常处理、迭代器、推导式、生成器
    有参装饰器
    匿名函数、高阶函数
    装饰器
    函数对象、函数嵌套、闭包函数
    名称空间与作用域
    day17 django 相关
  • 原文地址:https://www.cnblogs.com/zhaobin-diray/p/9252412.html
Copyright © 2020-2023  润新知