小编Mik*_* T.的帖子

如何在 puppet 中需要一系列资源?

在我的 Puppet-manifest 中,我需要执行一个命令,但只有在另一个 exec的数组驱动集合完成之后。像这样(伪代码):

  define foo() {
    exec { "touch $name": }
  }

....
  {
    $bars = [ "a", "b", "c" ]
    foo { $bars : }
    exec { "echo Done" :
        require => [ Foo["a"], Foo["b"], Foo["c"] ]
    }
  }
Run Code Online (Sandbox Code Playgroud)

如何在不$bars手动重复列表的每个元素的情况下实现与上面给出的相同的依赖项?

puppet

10
推荐指数
1
解决办法
6781
查看次数

在 FreeBSD 上通过 Infiniband 共享文件

我有一对服务器,我想将它们直接相互连接——而不是通过网络其余部分共享的交换机。我希望从直接连接(包括更大的 MTU)提供的更低延迟和更高带宽中受益。

两台机器目前都运行 FreeBSD-11.2,每台机器都有自己的 ZFS 池和多个文件系统。快速交叉访问这些文件系统是主要目标之一。

为此我买了一对二手卡(Mellanox IBM 46M2201 Dual Port ConnectX 4X),有以下问题:

  1. 我有哪些连接选项?主要目的是共享数据——NFS 是我唯一的选择,还是 FreeBSD 有特定于 Infiniband 的东西?
  2. 如果是 NFS,它是否必须通过 IP,或者是否有一些“更亲密”的 Infiniband 特定协议?
  3. 如果是基于 IP 的 NFS,我应该选择 UDP 还是 TCP?任何其他调整参数可以从直接连接中获得最大收益?
  4. 我需要什么类型的电缆来直接连接这些?令我惊讶的是,搜索“infiniband cable”会返回各种带有不同连接器的产品。在此处输入图片说明

非常感谢您提供任何见解。如果有在线文档回答了(其中一些)这些问题,我很乐意提供链接——我能找到的一切似乎都是特定于供应商的......

(为什么这个关于连接服务器的问题在Serverfault被认为是“题外话” ?)

freebsd zfs nfs infiniband

7
推荐指数
1
解决办法
949
查看次数

为什么 GlusterFS 这么慢?

我们已经设置了一对 GlusterFS 服务器镜像。无需特殊调整,无论官方 RHEL6 RPM 中的 GlusterFS-3.5.1 “开箱即用”什么,这就是我们所拥有的。

集群可以工作,但性能非常糟糕。例如,firefox-31.0.source.tar.bz2通过本地主机上的 GlusterFS 提取一个大的 tarball () 需要长达 44 分钟的时间。直接在同一磁盘上提取相同的文件所需时间不到 2。删除创建的树也存在类似的差异(通过 gluster 需要 10 分钟)...

当然,可以预见的是,需要进行镜像,等等,使用网络的文件系统会更慢——但是慢30 倍?简单地复制大文件速度很快——所以这不是我们所缺乏的带宽。当解压正在运行时,我看到glusterfs(客户端)和glusterfsd(服务器)进程都消耗了大量的 CPU(每个进程大约 10%),但系统仍然保持大约 70% 的空闲状态——两个 gluster 进程都消耗了大量的 CPU。比提取 bzip2 和 tar 更忙......他们在做什么?

我可以做一些调整来显着提高性能吗?或者我应该尝试ceph(或gfarm?)而不是 gluster ?或者对于大量的小文件来说它们都很糟糕?谢谢你!

performance-tuning distributed-filesystems glusterfs ceph glusterfs-3.5

5
推荐指数
1
解决办法
4162
查看次数

为什么在服务器禁用 SSLv3 后 git 停止工作?

像大多数其他人一样,我们的存储库服务器需要尽快禁用 SSLv3(和 v2)。

然而,这样做似乎破坏了我们的 git 客户端——至少,在 RHEL5 上(来自我的 FreeBSD 桌面的连接工作正常)。即使是最新的 git (2.1.2) 也失败了,将 OpenSSL 库升级到供应商的最新版本也无济于事。

然而!相同的 git-client 对 github.com 工作得很好——而且 github.com 也已经禁用了 SSLv3。通过反复试验,我将我们服务器的(Apache)SSL 配置设置为与 github 的配置相匹配:

SSLProtocol     ALL -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite  "AES128-SHA AES256-SHA RC4-SHA"
Run Code Online (Sandbox Code Playgroud)

通过sslscan在我们的服务器和 github 上运行,我得到了接受和拒绝的相同密码列表。但是 git 继续失败:

    % git clone https://git.example.net/git/puppet-hiera
    Cloning into 'puppet-hiera'...
    * Couldn't find host git.example.net in the .netrc file, using defaults
    * About to connect() to git.example.net port 443
    *   Trying 10.89.8.27... * connected
    * Connected to git.example.net (10.89.8.27) …
Run Code Online (Sandbox Code Playgroud)

ssl mod-ssl git curl github

5
推荐指数
1
解决办法
5750
查看次数

如何从 Jinja 模板内部触发自定义错误?

尽管 Ansible 本身有触发自定义错误的方法,但我找不到类似 Jinja 的任何内容。

我当前的方法使用语法错误:

{%  if 'ansible_mounts' in hostvars[host] %}
# {{ host }} knows its mount-points
{% else %}
# {% error!! No ansible_mounts listed for host - fact-gathering must've failed %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

但是那些在运行时渲染得很差——需要查看模板文件内部并搜索错误(渲染甚至不包括行号!)。

有没有办法从 Jinja 模板内部输出整洁的失败消息?

template custom-errors ansible jinja

5
推荐指数
2
解决办法
5199
查看次数

我可以覆盖,`diff` 对任务意味着什么吗?

对于某些文件类型,简单的统一差异不是很有帮助。一个明显的例子是二进制文件,但即使某些表面上是文本的文件——例如 SSL 证书 ( .pem)——也属于这一类。

那么,任务可以指定自己的显示差异的方法吗?就像是:

- name: Update SSL certificate
  copy:
    src: etc/ssl/mycert.pem
    dest: /etc/ssl/mycert.pem
  diff:
    exec: >
      openssl x509 -in {{ old }} -noout -text > {{ old }}.txt
      openssl x509 -in {{ new }} -noout -text > {{ new }}.txt
      diff -U2 {{ old }}.txt {{ new }}.txt
      rm -f {{ old }}.txt {{ new }}.txt
Run Code Online (Sandbox Code Playgroud)

?


@konstantin-suvorov 的“hack”很棒,但它似乎只适用于已经有差异方法的模块。不幸的是,我的另一个用例涉及一个模块 ( command),它没有。

特别是,我/usr/bin/apt-get update在 Ubuntu 上调用,它更新apt的缓存文件。我想在之前和之后以文本形式转储缓存的内容,看看更新发生了什么变化——如果有的话......

ansible ansible-playbook

4
推荐指数
1
解决办法
637
查看次数

RAID5 的平均无故障时间 (MTTF) 是多少?

给定单个驱动器的 MTTF T(例如,100000 小时)以及操作员更换故障驱动器和阵列控制器重建阵列所需的平均时间r(例如,10 小时),需要多长时间,平均而言,第二个驱动器出现故障,而较早的故障仍在被替换,从而注定整个N驱动器 RAID5?

在我自己的计算中,我不断提出许多世纪的结果——即使对于Nr 的大值,这意味着使用“热备件”来减少恢复时间是一种浪费......然而,很多人选择将 RAID 机箱中的一个插槽专用于热备件(而不是增加容量),这让我感到困惑......

raid raid5 statistics

3
推荐指数
1
解决办法
1340
查看次数

如何在单块中执行多行 Jinja2 条件?

以下代码因语法错误而被拒绝:

{%
    if inventory_hostname in groups.aptcache
        set cachehost = 'localhost'
    else
        set cachehost = groups['aptcache'] | first
    endif
%}
cache={{ cachehost }}
Run Code Online (Sandbox Code Playgroud)

我希望,我的意图足够清楚,以便 Jinja2 大师纠正我......拜托?

template ansible jinja

3
推荐指数
1
解决办法
1万
查看次数

如何使用 iptables 阻止与某个 IP 地址的所有通信?

我在基于 Linux 的路由器后面有一个 FreeBSD 系统(使用DD-WRT 固件)。FreeBSD 系统正在运行 sshd,并且会定期被各种 script-kiddies 探测。

它当前运行一个脚本,当看到同一 IP 地址登录尝试超过 3 次失败时,会完全阻止该地址。该阻止曾经是本地的(使用 FreeBSD 的ipfw),但我想通过要求路由器进行阻止来覆盖整个 LAN。这让我开始使用 Linux 的防火墙手段——iptables。

如果我使用:

iptables -I INPUT -s $IP -j DROP
Run Code Online (Sandbox Code Playgroud)

那么路由器将拒绝尝试联系路由器本身的 IP,但会愉快地将连接转发到 LAN。

如果我使用

iptables -I FORWARD -s $IP -j DROP
Run Code Online (Sandbox Code Playgroud)

它将阻止攻击者访问我的 LAN,但会保持路由器可访问他们。

是否有一些单一的规则——或者至少是单一的命令——我可以为每个攻击 IP 拦截任何进出它的流量?

谢谢你!

firewall iptables

1
推荐指数
1
解决办法
1万
查看次数