博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
salt运行时遇到的常见的问题
阅读量:5086 次
发布时间:2019-06-13

本文共 6154 字,大约阅读时间需要 20 分钟。

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 382 Too many open files3 sock != -1 (tcp_listener.cpp:335)
View Code

检查:ulimit -n

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

1     root        hard    nofile        40962     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: tbortels4     - source: salt://ssh_keys/chease.pub5     - 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 Saturday12 SAT_30:13   time: '"22:00"'14   day: 7 - Every Saturday15 SUN_10:16   time: '"06:00"'17   day: 1 - Every Sunday18 {% endload %}
View Code

YAML DOES NOT LIKE "DOUBLE SHORT DECS"

yaml不接受Double Short Decs

一个Double Short Decs的示例

1 vim:2   pkg.installed3   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: fred10     - enc: ssh-dss11     - 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 yaml2 >>> yaml.safe_load('2013_05_10')3 201305104 >>> yaml.safe_load('"2013_05_10"')5 '2013_05_10'
View Code

AUTOMATIC DATETIME CONVERSION

 

转载于:https://www.cnblogs.com/solitarywares/p/7476333.html

你可能感兴趣的文章
TCP粘包问题及解决方案
查看>>
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>