10.saltstack配置管理-业务模块-keepalived

本文介绍使用SaltStack配置Keepalived集群的过程。通过编写Salt状态文件和Jinja模板实现不同节点间的Keepalived参数差异化配置,并展示了具体的Salt状态文件和配置文件样例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务引用之keepalived

    同haproxy业务引用一样,我们同样在cluster目录下进行。


编写salt文件:

    salt文件涉及到keepalived的安装的引用;每个节点的具体参数如何这里主要通过编写jiaja模版来实现每个节点参数的差异性。通过grains的fqdn来判断不同的主机名,实现不同主机不同参数。
在cluster目录编辑:
[root@salt-master ~]# cat /srv/salt/prod/cluster/haproxy-outside-keepalived.sls
include:
  - keepalived.install
keepalived-service:
  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://cluster/files/haproxy-outside-keepalived.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    {% if grains['fqdn'] == 'centos-test1' %}
    - ROUTEID: haproxy_ha
    - STATEID: MASTER
    - PRIORITYID: 150
    {% elif grains['fqdn'] == 'centos-test2' %}
    - ROUTEID: haproxy_ha
    - STATEID: BACKUP
    - PRIORITYID: 100
    {% endif %}
  service.running:
   - name: keepalived
   - enable: True
   - watch:
     - file: keepalived-service


keepalived差异性配置文件:

   在keepalived安装脚本中,我们为了能够启动keepalived服务,我们在两个节点上都下发相同的keepalived配置文件,这次为了实现每个节点上的keepalived去配置不同的参数,需要下发一份差异性配置文件。

[root@salt-master ~]# cat /srv/salt/prod/cluster/files/haproxy-outside-keepalived.conf
! Configuration File for keepalived
global_defs {
  notification_email {
    saltstack@example.com
  }
  notification_email_from keepalived@example.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id {{ROUTEID}}
}
vrrp_instance haproxy_ha {
  state {{STATEID}}
  interface eth0
  virtual_router_id 36
  priority {{PRIORITYID}}
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    192.168.91.100
  }
}



编写top文件:

将业务引用模块keepalived的haprox-outside-keepalived导入。
[root@salt-master ~]# vi /srv/salt/base/top.sls
base:
  '*':
    - init.env_init
prod:
  'salt-master.2018.com':
    - cluster.haproxy-outside
    - cluster.haproxy-outside-keepalived
  'salt-minion.2018.com':
    - cluster.haproxy-outside
    - cluster.haproxy-outside-keepalived


    
    
    

    
    
    
查看文件结构:    
[root@salt-master ~]# tree /srv/salt/
/srv/salt/
├── base
│   ├── init
│   │   ├── audit.sls
│   │   ├── dns.sls
│   │   ├── env_init.sls
│   │   ├── files
│   │   │   └── resolv.conf
│   │   ├── history.sls
│   │   └── sysctl.sls
│   └── top.sls
├── prod
│   ├── cluster
│   │   ├── files
│   │   │   ├── haproxy-outside.cfg
│   │   │   └── haproxy-outside-keepalived.conf
│   │   ├── haproxy-outside-keepalived.sls
│   │   └── haproxy-outside.sls
│   ├── haproxy
│   │   ├── files
│   │   │   ├── haproxy-1.7.11.tar.gz.tar
│   │   │   └── haproxy.init
│   │   └── install.sls
│   ├── keepalived
│   │   ├── files
│   │   │   ├── keepalived-1.4.4.tar.gz
│   │   │   ├── keepalived.conf
│   │   │   ├── keepalived.ini
│   │   │   └── keepalived.sysconfig
│   │   └── install.sls
│   └── pkg
│       └── pkg-init.sls
└── test

12 directories, 20 files    
    
    
    
    
    
    
    
    
通过salt高级模式执行:
[root@salt-master ~]# salt '*' state.highstat
<think>好的,我现在需要帮助用户解决他们在Linux系统中备份Keepalived配置文件时遇到的“No such file or directory”错误。用户还希望了解/etc/keepalived/keepalived.conf文件的权限问题,特别是权限显示为-rw-r--r--的含义,以及如何排查cp命令报错的原因。 首先,我应该回顾用户之前的提问和我的回答。用户之前遇到了备份文件创建失败的问题,我给出了详细的步骤,包括检查源文件是否存在、创建备份目录、修正命令和验证结果。现在用户进一步询问文件权限和错误信息,所以需要更深入地解释权限问题,并结合之前的解决方案进行补充。 首先,需要解释文件权限-rw-r--r--。这个权限表示所有者有读写权限,所属组和其他用户只有读权限。这意味着除了文件所有者(可能是root),其他用户无法修改该文件。当用户使用cp命令时,如果当前用户没有足够的权限读取源文件或写入目标目录,就会导致错误。例如,如果用户不是root,可能需要使用sudo来提升权限。 接下来,要分析cp命令报错的具体原因。常见的原因包括源文件不存在、目标目录不存在、权限不足或路径错误。用户提供的示例命令是cp /etc/keepalived/keepalived.conf /backup/keepalive_$(date +%F).conf,错误提示是无法创建目标文件,可能因为/backup目录不存在,或者用户没有写入权限。 需要详细说明如何检查这些可能的原因。例如,使用ls命令确认源文件是否存在,检查目标目录是否存在,使用ls -ld查看目录权限,以及确认用户是否有权限在目标目录中创建文件。此外,还要注意路径中的拼写错误,比如目标文件名是否正确,是否缺少了字母(比如keepalive少了d)。 然后,结合用户提供的引用内容,虽然引用中提到了删除文件和NFS配置的注意事项,但这些可能与当前问题关系不大。不过,用户提到的权限问题可能需要参考之前的解决方案,比如使用sudo提升权限,或者设置目录的所有权和权限。 需要确保回答结构清晰,分步骤解释权限和错误排查方法。可能还需要提供具体的命令示例,例如使用ls -l查看文件权限,使用mkdir创建目录,使用chmod和chown修改权限等。此外,可以建议用户使用绝对路径,避免相对路径导致的错误。 最后,生成的相关问题应该与当前主题相关,比如如何修改文件权限,如何排除路径错误,或者如何配置自动备份脚本的权限设置等。需要确保问题能够帮助用户进一步理解和解决类似的问题。 总结来说,回答需要包括以下几个部分: 1. 解释文件权限-rw-r--r--的含义。 2. 分析可能导致cp命令失败的原因。 3. 提供具体的排查步骤和解决方法。 4. 结合用户之前的提问,确保回答连贯。 5. 生成相关问题以帮助用户深入理解。 需要注意使用中文,正确使用LaTeX格式,确保行内公式用$包围,独立公式用$$。同时,引用之前的回答中的要点,比如创建目录、权限设置等,并在适当的位置添加引用标记[^1][^2]。</think>### 文件权限解释与`cp`命令报错排查 #### 一、文件权限 `-rw-r--r--` 的含义 Linux文件权限由三部分组成:**所有者权限**、**所属组权限**和**其他用户权限**。 对于文件 `/etc/keepalived/keepalived.conf`,其权限 `-rw-r--r--` 可分解为: - **所有者权限**:`rw-`(读、写) - **所属组权限**:`r--`(仅读) - **其他用户权限**:`r--`(仅读) 用数值表示为: $$ 644 = (4+2) \times 64 + 4 \times 8 + 4 \times 1 $$ 即: - 所有者:`6`(读+写) - 所属组:`4`(读) - 其他用户:`4`(读) **关键影响**: 1. **仅所有者(通常是root)可修改文件**:普通用户若需操作该文件,需通过`sudo`提升权限[^1]。 2. **其他用户只能读取**:若备份命令未使用`sudo`,普通用户可能因权限不足导致失败。 --- #### 二、`cp`命令报错“No such file or directory”的常见原因 ##### 1. **源文件路径错误** - **验证文件是否存在**: ```bash ls -l /etc/keepalived/keepalived.conf ``` 若输出`No such file or directory`,说明: - Keepalived未安装或配置文件被误删。 - 路径拼写错误(如`keepalived`漏写字母`d`)。 ##### 2. **目标目录不存在** - **检查备份目录**: ```bash ls -ld /backup ``` - 若目录不存在,需手动创建并授权: ```bash sudo mkdir -p /backup # 创建目录 sudo chmod 755 /backup # 设置权限(所有者可读写,其他用户只读) sudo chown $USER:$USER /backup # 将所有者设为当前用户 ``` ##### 3. **权限不足** - **普通用户操作系统文件需`sudo`**: 由于`/etc/keepalived/keepalived.conf`属于root用户,直接使用`cp`会因权限不足失败: ```bash # 错误示例(普通用户无权限) cp /etc/keepalived/keepalived.conf /backup/ # 失败 # 正确方法(使用sudo) sudo cp /etc/keepalived/keepalived.conf /backup/ ``` ##### 4. **文件名或路径拼写错误** - 检查命令中的路径细节: - `keepalived.conf` ≠ `keepalive.conf`(少字母`d`) - `/backup` ≠ `/backup/`(末尾斜杠不影响,但需确保目录存在) --- #### 三、分步排查流程 1. **确认源文件存在**: ```bash sudo ls -l /etc/keepalived/keepalived.conf ``` - 若文件丢失,重新安装Keepalived或从备份恢复。 2. **验证目标目录权限**: ```bash ls -ld /backup ``` - 目录权限需包含`w`(写入权限),例如`drwxr-xr-x`。 3. **使用完整命令(带`sudo`)**: ```bash sudo cp /etc/keepalived/keepalived.conf "/backup/keepalived_$(date +%F).conf" ``` 4. **检查命令语法**: - 变量`$(date +%F)`需用双引号包裹,避免空格导致路径错误。 --- #### 四、权限与路径问题的高级调试 1. **使用`strace`跟踪系统调用**: ```bash strace cp /etc/keepalived/keepalived.conf /backup/ ``` - 观察`open()`或`mkdir()`调用的错误码(如`ENOENT`表示路径不存在)。 2. **检查文件系统挂载状态**: ```bash df -h /backup # 确认目标目录所在分区未满或未只读 ``` --- ### 相关问题 1. **如何修改文件权限为`-rw-r--r--`?** ```bash sudo chmod 644 /etc/keepalived/keepalived.conf ``` 2. **`cp`命令报`Permission denied`时如何快速定位原因?** 3. **如何通过`rsync`安全备份需要root权限的文件?**[^1] 4. **为什么即使目录存在,`cp`命令仍可能报“No such file or directory”?**[^2] --- 通过权限验证、路径检查和`sudo`的正确使用,可系统性解决备份失败问题[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值