ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

saltstack进阶

2021-11-29 23:58:02  阅读:231  来源: 互联网

标签:进阶 minion root master node1 saltstack node2 salt


1. masterless

1.1 应用场景

  • master 与 minion 网络不通或通信有延迟,即网络不稳定
  • 想在 minion 端直接执行状态

传统的 SaltStack 是需要通过 master 来执行状态控制 minion 从而实现状态的管理,但是当网络不稳定的时候,当想在minion本地执行状态的时候,当在只有一台主机的时候,想执行状态该怎么办呢?这就需要用到 masterless 了。

有了masterless,即使你只有一台主机,也能玩saltstack,而不需要你有N台主机架构。

1.2 masterless配置

1.2.1 修改配置文件minion

  • 注释master行
  • 取消注释file_client并设其值为local
  • 设置file_roots
  • 设置pillar_roots
[root@node2 ~]# vim /etc/salt/minion

# resolved, then the minion will fail to start.
# master: salt      //注释此行

file_client: local  //取消此行注释并将值设为local

file_roots:         //设置file_roots的路径和环境,可有多套环境
  base:
    - /srv/salt/

1.2.2 关闭salt-minion服务

使用 masterless 模式时是不需要启动任何服务的,包括salt-master和salt-minion。

[root@node2 ~]# systemctl stop salt-minion
[root@node2 ~]# systemctl disable salt-minion
Removed symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service.
[root@node2 ~]# systemctl status salt-minion
● salt-minion.service - The Salt Minion
   Loaded: loaded (/usr/lib/systemd/system/salt-minion.service>
   Active: inactive (dead)
     Docs: man:salt-minion(1)
           file:///usr/share/doc/salt/html/contents.html
           https://docs.saltproject.io/en/latest/contents.html

11月 02 15:09:47 node2 salt-minion[443952]: To repair this iss>
11月 02 15:09:47 node2 salt-minion[443952]: Or restart the Sal>
11月 02 15:10:06 node2 systemd[1]: salt-minion.service: Main p>
11月 02 15:10:06 node2 systemd[1]: salt-minion.service: Failed>
11月 02 15:13:24 node2 systemd[1]: Starting The Salt Minion...
11月 02 15:13:24 node2 systemd[1]: Started The Salt Minion.
11月 29 22:35:49 node2 systemd[1]: Stopping The Salt Minion...
11月 29 22:35:49 node2 salt-minion[451713]: [WARNING ] Minion >
11月 29 22:35:50 node2 salt-minion[451713]: The Salt Minion is>
11月 29 22:35:50 node2 systemd[1]: Stopped The Salt Minion.

1.2.3 salt-call

masterless模式执行模块或状态时需要使用salt-call命令,而不再是salt或者salt-ssh。需要注意的是要使用salt-call的--local选项。

[root@node2 ~]# salt-call --local cmd.run 'df -h'
local:
    Filesystem             Size  Used Avail Use% Mounted on
    devtmpfs               1.9G     0  1.9G   0% /dev
    tmpfs                  1.9G  600K  1.9G   1% /dev/shm
    tmpfs                  1.9G  9.0M  1.9G   1% /run
    tmpfs                  1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/mapper/rhel-root   17G  2.7G   15G  16% /
    /dev/sda1             1014M  179M  836M  18% /boot
    tmpfs                  376M     0  376M   0% /run/user/0

1.2.3 salt-call

masterless模式执行模块或状态时需要使用salt-call命令,而不再是salt或者salt-ssh。需要注意的是要使用salt-call的--local选项

[root@node2 base]# salt-call --local state.sls test
local:
----------
          ID: yang_useradd
    Function: user.present
        Name: yang
      Result: True
     Comment: New user yang created
     Started: 23:14:36.388461
    Duration: 259.236 ms
     Changes:   
              ----------
              fullname:
              gid:
                  1001
              groups:
                  - yang
              home:
                  /home/yang
              homephone:
              name:
                  yang
              other:
              passwd:
                  x
              roomnumber:
              shell:
                  /bin/bash
              uid:
                  1001
              workphone:

Summary for local
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 259.236 ms
[root@node2 base]# 

salt-master高可用


涉及到高可用时,数据的同步是个永恒的话题,我们必须保证高可用的2个master间使用的数据是一致的,包括:

/etc/salt/master配置文件

/etc/salt/pki目录下的所有key

/srv/下的salt和pillar目录下的所有文件

保障这些数据同步的方案有:


nfs挂载

rsync同步

使用gitlab进行版本控制
安全相关:
为保证数据的同步与防止丢失,可将状态文件通过gitlab
进行版本控制管理。

环境说明:

主机名ip职责
master192.168.75.128主master
node2192.168.75.142备master
node1192.168.75.150minion

salt-master高可用配置

我们需要用salt来管理公司的所有机器,那么salt的master就不能宕机,否则就会整个瘫痪,所以我们必须要对salt进行高可用。salt的高可用配置非常简单,只需要改一下minion配置文件,将master用列表的形式列出即可。

在node2上安装salt-master(matser上已安装salt-master,node1上已安装salt-minion)

[root@masters ~]# rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@masters ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo


[root@masters ~]# yum -y install  salt-master

修改node1的minion配置文件

[root@node1 ~]# vim /etc/salt/minion
#master: salt
master: 192.168.75.128  //指定主master

[root@node1 ~]# systemctl restart salt-minion

minion生成证书并授权给master

[root@master ]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
node1
Rejected Keys:

[root@master ]# salt-key -ya
The following keys are going to be accepted:
Unaccepted Keys:
node1
Key for minion node1 accepted.

[root@master ]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

[root@master ]# salt 'node1' test.ping
node1:
    True

传输证书给node2

[root@master ~]# scp /etc/salt/master 192.168.75.142:/etc/salt/master

[root@master ~]# scp /etc/salt/master 192.168.75.142:/etc/salt/master

[root@master ~]# scp -r /srv/salt 192.168.75.142:/srv/

修改minion的配置文件,使其与node2建立连接

[root@node1 ~]# vim /etc/salt/minion
#master: salt
master: 192.168.75.142  //指定主master

[root@node1 ~]# systemctl restart salt-minion


[root@node2 ]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
node1
Rejected Keys:

[root@node2 ]# salt-key -ya
The following keys are going to be accepted:
Unaccepted Keys:
node1
Key for minion node1 accepted.

[root@node2 ]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

[root@node2 ]# salt 'node1' test.ping
node1:
    True

进行高可用设置,修改minion配置文件

[root@node1 ~]# vim /etc/salt/minion
#master: salt
master: 
  - 192.168.75.128
  - 192.168.75.142

人为设置故障测试

[root@node1 ~]# vim /etc/salt/minion

# beacons) without a master connection
master_type: failover
----------
# connection events.
#
master_alive_interval: 3

[root@node1 ~]# systemctl restart salt-minion

在两台master上测试

[root@master ~]# salt 'node1' test.ping
node1:
    True


[root@node2 ~]# salt 'node1' test.ping
web:
    Minion did not return. [No response]
    The minions may not have all finished running and any remaining minions will return upon completion. To look up the return data for this job later, run the following command:
    
    salt-run jobs.lookup_jid 20211129114455692315
ERROR: Minions returned with non-zero exit code

停止主master服务,在node2上ping

[root@master ~]# systemctl status salt-master
● salt-master.service - The Salt Master Server
   Loaded: loaded (/usr/lib/systemd/system/salt-master.service>
   Active: inactive (dead) since Mon 2021-11-29 23:55:12 CST; >
     Docs: man:salt-master(1)
           file:///usr/share/doc/salt/html/contents.html
           https://docs.saltproject.io/en/latest/contents.html
  Process: 1035 ExecStart=/usr/bin/salt-master (code=exited, s>
 Main PID: 1035 (code=exited, status=0/SUCCESS)

11月 29 23:17:54 master systemd[1]: Starting The Salt Master S>
11月 29 23:18:07 master systemd[1]: Started The Salt Master Se>
11月 29 23:55:12 master systemd[1]: Stopping The Salt Master S>
11月 29 23:55:12 master salt-master[1035]: [WARNING ] Master r>
11月 29 23:55:12 master salt-master[1035]: The salt master is >
11月 29 23:55:12 master systemd[1]: Stopped The Salt Master Se>

[root@noded2 ~]# salt 'node1' test.ping
node1:
    True

标签:进阶,minion,root,master,node1,saltstack,node2,salt
来源: https://blog.csdn.net/Yanghu4112/article/details/121613334

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有