• salt运行时遇到的常见的问题


    salt  master常见的故障分析方法

    RUNNING IN THE FOREGROUND

    运行salt-master -l debug或者在前台运行,不使用-d选项


    WHAT PORTS DOES THE MASTER NEED OPEN?

    检查运行的端口是否正常

    默认是tcp的4505和4506,确认这两个端口运行正常,且没有防火墙的限制和selinux限制,其次有没有其他访问控制的限制。


    TOO MANY OPEN FILES

    当minion端连接master端的时候,至少会建立两个TCP链接,当minion端过多的时候会导致一下情况产生:

    1 12:45:29,289 [salt.master    ][INFO    ] Starting Salt worker process 38
    2 Too many open files
    3 sock != -1 (tcp_listener.cpp:335)
    View Code

    检查:ulimit -n
    设置方法:
      创建文件/etc/security/limits.d/99-salt.conf

    1     root        hard    nofile        4096
    2     root        soft    nofile        4096
    View Code

    如果系统没有limit.d这个目录,那就添加limit限制文件/etc/security/limits.conf

    检查是否设置成功:
      打开另一个shell使用ulimit -n查看是否修改成功,如果修改不生效可以使用以下办法
      在/etc/default/salt-master文件中增加limit nofile 4096 4096内容


    SALT MASTER STOPS RESPONDING

    master端安装的ZeroMQ版本小于2.1.11会导致不响应的情况,你可以通过设置一些参数来解决这个问题
    # echo 16777216 > /proc/sys/net/core/rmem_max
    # echo 16777216 > /proc/sys/net/core/wmem_max
    # echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_rmem
    # echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_wmem


    LIVE PYTHON DEBUG OUTPUT

    在线调试

    如果master端响应比较迟钝,可以使用SIGUSR1信号查看当前正在执行那些任务代码
    首先确保saltmaster在前台运行:
    # salt-master -l debug
    # killall -SIGUSR1 salt-master


    LIVE SALT-MASTER PROFILING

    分析salt-master
    # killall -SIGUSR2 salt-master
    可以实现在线分析,执行上述代码之后将进行分析,并保存到文件中,最后再次发送一遍这样的信号,终止分析。


    COMMANDS TIME OUT OR DO NOT RETURN OUTPUT

    命令执行超时或没有输出返回
    默认master端是有一个超时时间的设置,默认是5秒钟,可配置
    /etc/salt/master


    PASSING THE -C OPTION TO SALT RETURNS A PERMISSIONS ERROR

    salt master启动的时候可以使用-c指定配置的路径,也可以通过root_dir的配置,配置的内容包含pki_dir, cachedir,sock_dir, log_file, autosign_file, autoreject_file, extension_modules,key_logfile, pidfile这些内容。


    SALT MASTER DOESN'T RETURN ANYTHING WHILE RUNNING JOBS

    当一个jobs需要执行很长时间的时候,这时候saltmaster会达到超时时间后返回到shell,这时候可以使用-t选项覆盖默认的超时时间,超时时间可以在master主配置文件中设置。


    SALT MASTER AUTH FLOODING

    salt master认证洪泛

    在大的集群环境下,为了保证master服务器不被大量的认证信息消耗过多资源,这时候你需要合理的配置minion端的认证

     1 recon_default:
     2     重新连接尝试之间等待的平均秒数。
     3 recon_max:
     4     重新连接尝试之间等待的最大秒数。
     5 recon_randomize:
     6     是否进行随机的认证
     7 acceptance_wait_time:
     8     等待每个身份验证请求回复的秒数。
     9 random_reauth_delay:
    10     随机化的身份验证
    11 auth_timeout:
    12     认证的超时时间,不管尝试的次数
    View Code

    RUNNING STATE LOCALLY

    调试state文件
    salt-call -l trace --local state.highstate
    -l trace
    设置output级别


    SALT MASTER UMASK

    umask文件默认权限值,如果设置不当会导致master访问缓存文件失败,显示权限错误。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    TROUBLESHOOTING THE SALT MINION

    minion端的故障排查


    RUNNING IN THE FOREGROUND

    # salt-minion -l debug


    WHAT PORTS DOES THE MINION NEED OPEN?

    检查端口的运行,需要安装netcat,使用nc命令探测端口
    $ nc -v -z salt.master.ip.addr 4505
    Connection to salt.master.ip.addr 4505 port [tcp/unknown] succeeded!
    $ nc -v -z salt.master.ip.addr 4506
    Connection to salt.master.ip.addr 4506 port [tcp/unknown] succeeded!

    也可以通过nmap来检查
    nmap -sS -q -p 4505-4506 salt.master.ip.addr

    在检查与master端口连通性的同时,我们不能忽略有防火墙selinux的影响,这时候我们可以使用tcptraceroute尽量排查
    关于tcptraceroute的使用说明:https://linux.die.net/man/1/tcptraceroute


    USING SALT-CALL

    salt-call最初设计是为了运行和调试自有编写的模块,在minion端运行
    # salt-call -l debug state.apply


    LIVE PYTHON DEBUG OUTPUT

    # salt-minion -l debug
    # killall -SIGUSR1 salt-minion


    MULTIPROCESSING IN EXECUTION MODULES
    暂不了解


    SALT MINION DOESN'T RETURN ANYTHING WHILE RUNNING JOBS LOCALLY

    minion端的任务超时时间设置,可以使用-t设置,也可以配置/etc/salt/minion里面的timeout


    SALT AND SELINUX
    暂不了解

    COMMON YAML GOTCHAS
    yaml的常见错误,yaml用于序列化sls里面的数据

    SPACES VS TABS
    在yaml里面不要使用tab,可以在vim里面启动搜索高亮:set hlsearch,使用:set tabstop=2 expandtab将tab去掉


    INDENTATION

    NESTED DICTIONARIES

    file.managed里面使用context和default选项:
    /etc/http/conf/http.conf:

     1   file:
     2     - managed
     3     - source: salt://apache/http.conf
     4     - user: root
     5     - group: root
     6     - mode: 644
     7     - template: jinja
     8     - context:    
     9         custom_var: "override"
    10     - defaults:
    11         custom_var: "default value"
    12         other_var: 123
    View Code

    context:定义配置文件中的内容变量
    defaults:定义变量的默认值

    这两个选项可以包含一个字典:
    /etc/http/conf/http.conf:

     1   file:
     2     - managed
     3     - source: salt://apache/http.conf
     4     - user: root
     5     - group: root
     6     - mode: 644
     7     - template: jinja
     8     - context: {
     9       custom_var: "override" }
    10     - defaults: {
    11       custom_var: "default value",
    12       other_var: 123 }
    View Code

    下面是一个更具体的例子,它更加清晰的展示了yaml的数据结构:

     1 >>> import yaml
     2 >>> yaml.safe_load('''mystate:
     3 ...   file.managed:
     4 ...     - context:
     5 ...         some: var''')
     6 {'mystate': {'file.managed': [{'context': {'some': 'var'}}]}}
     7 >>> yaml.safe_load('''mystate:
     8 ...   file.managed:
     9 ...     - context:
    10 ...       some: var''')
    11 {'mystate': {'file.managed': [{'some': 'var', 'context': None}]}}
    View Code

    TRUE/FALSE, YES/NO, ON/OFF

    特殊符号的处理
    示例:

    1 - '"false"'
    2 - "'True'"
    3 - "'YES'"
    4 - '"No"'
    View Code

    THE '%' SIGN

    %对于yaml具有特殊意义

    1 cheese:
    2   ssh_auth.present:
    3     - user: tbortels
    4     - source: salt://ssh_keys/chease.pub
    5     - config: '%h/.ssh/authorized_keys'
    View Code

    TIME EXPRESSIONS

    load_yaml示例:

     1 {% load_yaml as wsus_schedule %}
     2 
     3 FRI_10:
     4   time: '"23:00"'
     5   day: 6 - Every Friday
     6 SAT_10:
     7   time: '"06:00"'
     8   day: 7 - Every Saturday
     9 SAT_20:
    10   time: '"14:00"'
    11   day: 7 - Every Saturday
    12 SAT_30:
    13   time: '"22:00"'
    14   day: 7 - Every Saturday
    15 SUN_10:
    16   time: '"06:00"'
    17   day: 1 - Every Sunday
    18 {% endload %}
    View Code

    YAML DOES NOT LIKE "DOUBLE SHORT DECS"

    yaml不接受Double Short Decs
    一个Double Short Decs的示例

    1 vim:
    2   pkg.installed
    3   user.present
    View Code

    正确的写法是这样的,不管有没有参数,都必须被定义:

     1 vim:
     2   pkg.installed: []
     3   user.present: []
     4 
     5 fred:
     6   user.present: []
     7   ssh_auth.present:
     8     - name: AAAAB3NzaC...
     9     - user: fred
    10     - enc: ssh-dss
    11     - require:
    12       - user: fred
    View Code

    YAML SUPPORT ONLY PLAIN ASCII

    YAML仅支持ASCII

    可以使用shell命令找到sls文件中的非ASCII字符
    find . -name '*.sls' -exec grep --color='auto' -P -n '[^x00-x7F]' {} ;


    UNDERSCORES STRIPPED IN INTEGER DEFINITIONS

    yaml解释数字和下划线时是剥离的

    1 >>> import yaml
    2 >>> yaml.safe_load('2013_05_10')
    3 20130510
    4 >>> yaml.safe_load('"2013_05_10"')
    5 '2013_05_10'
    View Code

    AUTOMATIC DATETIME CONVERSION

  • 相关阅读:
    Ueditor之SAE移植
    SAE flask及其扩展 bug指南
    SAE 安装未包含的第三方依赖包
    Bootstrap 和 LESS
    Device.js——检测设备平台、操作系统的Javascript 库
    Flask 富文本编辑器
    DDoS攻击
    WPF之数据绑定
    参数测试
    总结 一下UML 类图的关系
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7476333.html
Copyright © 2020-2023  润新知