在同一台服务器上安装多个 NFS 的 puppet

Posted

技术标签:

【中文标题】在同一台服务器上安装多个 NFS 的 puppet【英文标题】:puppet with multiple NFS mount on same server 【发布时间】:2017-07-11 23:51:33 【问题描述】:

我在同一台服务器上的 NFS 挂载点很少,但目录不同。 例如:

    x.x.x.x:/stats   /data/stats
    x.x.x.x:/scratch   /data/scratch
    x.x.x.x:/ops   /data/ops    

但是当我尝试运行 puppet 时,它会在我的 fstab 中添加以下内容。 (错误的安装分配)

x.x.x.x:/scratch   /data/stats       nfs     defaults,nodev,nosharecache     0       0
x.x.x.x:/scratch   /data/ops  nfs     defaults,nodev,nosharecache     0       0
x.x.x.x:/scratch   /data/scratch     nfs     defaults,nodev,nosharecache     0       0

它在所有已挂载的分区上使用最后一个挂载选项。所以我做了一些研究,发现了以下错误。

 https://tickets.puppetlabs.com/browse/DOCUMENT-242

然后添加了 nosharecache 选项,但仍然没有运气。 这是我的傀儡代码

class profile::mounts::stats 
  # Hiera lookups
  $location = hiera('profile::mounts::stats::location')
  $location2 = hiera('profile::mounts::stats::location2')
   tag        'new_mount'

 file  '/data/stats':
ensure  => directory,
owner   => 'root',
group   => 'root',
mode    => '0755',
require => File['/data'],
tag     => 'new_mount',


  mount  '/data/stats':
ensure  => mounted,
fstype  => 'nfs',
device  => $location,
options => 'defaults,nodev,nosharecache',
require => File['/data/stats'],
tag     => 'new_mount'




file  '/data/ops':
  ensure  => directory,
  owner   => 'root',
  group   => 'mail',
  mode    => '0775',
  require => File['/data'],
  tag     => 'new_mount',


 mount  '/data/ops':
ensure  => mounted,
fstype  => 'nfs',
device  => $location2,
options => 'defaults,nodev,nosharecache',
require => File['/data/ops'],
tag     => 'new_mount',


file  '/data/scratch':
ensure  => directory,
owner   => 'root',
group   => 'mail',
mode    => '0775',
require => File['/data'],
tag     => 'new_mount',


 mount  '/data/scratch':
ensure  => mounted,
fstype  => 'nfs',
device  => $location2,
options => 'defaults,nodev,nosharecache',
require => File['/data/scratch'],
tag     => 'new_mount',


 

 

我的hieara查找如下

profile::mounts::stats::location: x.x.x.x:/stats
profile::mounts::stats::location2: x.x.x.x:/scratch

为什么会导致一些意外行为?

【问题讨论】:

【参考方案1】:

我编译了该代码,但发现了一些问题:

您没有包含 File['/data'] 资源,但我假设您在其他地方有它?

编译后我在目录中看到了这个:

$ cat myclass.json | jq '.resources | .[] | select(.type == "Mount") | [.title, .parameters]'
[
  "/data/stats",
  
    "ensure": "mounted",
    "fstype": "nfs",
    "device": "x.x.x.x:/stats",
    "options": "defaults,nodev,nosharecache",
    "require": "File[/data/stats]",
    "tag": "new_mount"
  
]
[
  "/data/ops",
  
    "ensure": "mounted",
    "fstype": "nfs",
    "device": "x.x.x.x:/scratch",
    "options": "defaults,nodev,nosharecache",
    "require": "File[/data/ops]",
    "tag": "new_mount"
  
]
[
  "/data/scratch",
  
    "ensure": "mounted",
    "fstype": "nfs",
    "device": "x.x.x.x:/scratch",
    "options": "defaults,nodev,nosharecache",
    "require": "File[/data/scratch]",
    "tag": "new_mount"
  
]

所以你在$location2 上同时安装了/data/ops/data/scratch。这是疏忽吗?它与您所说的要达到的目标不符。

否则我无法重现你所说的你正在观察的内容。

除了 Puppet 之外还有什么东西可以编辑 fstab 文件吗?您是否在新盒子上尝试过此代码?

【讨论】:

是的,我也不知道问题中期望行为和实际行为之间的区别是什么,但最好的猜测是他在该挂载资源上为设备使用了错误的变量,就像你描述的那样。 谢谢大家,我设法通过在根级别添加 nosharecache nfs 挂载选项来解决这个问题(需要 => File['/data'] 类,现在它可以正确挂载。现在需要删除其他 /etc/fstab 不正确的条目并再次运行 puppet :)

以上是关于在同一台服务器上安装多个 NFS 的 puppet的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一台机器上安装多个MySQL的实例(转)

如何在同一台机器上安装多个MySQL的实例 转

Puppeteer:如何在 ec2 服务器上安装 puppeteer

在同一台机器上启动多个tomcat服务

puppet安装配置

1.2-puppet安装准备工作