zoukankan      html  css  js  c++  java
  • saltstack master minion安装配置简单使用

    首先先了解下saltstack是什么,为什么使用它

    它与Ansible、Puppet都属于集中管理工具,由于现在企业规模的不断庞大及业务的增长,所需要管理的服务器数量增多,而且大部分机器都属于同类业务集群,操作是统一的,甚至于所有机器都有一些相同的初始项,连上所有机器进行完全相同的操作固然是可以的,但是浪费了大量的时间及精力,感觉太蠢。集中管理工具的出现就是将同类机器的统一操作统一执行,一次解决,得到返回结果然后确定任务是否成功,如果出现个别情况可以再去对应目标上排错,节约了大量时间,提升工作效率。因此集中管理的前提是规范化!

    以前是使用Puppet的比较多,但是Puppet的安装配置以及使用真的是特么太坑了,so,随着时间的推移,Saltstack、Ansible的大规模使用时代就到来了。Ansible也是一款优秀的集中管理工具,主要基于ssh协议进行相关操作,他的特点是不需要客户端即可立刻使用(其实我萌的Saltstack也是可以哒),大家选择自己喜欢的就可以了

    安装与简单使用

     1 [root@linux-node1 ~]# cat /etc/yum.repos.d/saltstack.repo 
     2 [saltstack-repo]
     3 name=SaltStack repo for RHEL/CentOS $releasever
     4 baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
     5 enabled=1
     6 gpgcheck=0
     7 [root@linux-node1 ~]# yum install -y salt-master salt-minion
     8 [root@linux-node1 ~]# systemctl start salt-master
     9 [root@linux-node1 ~]# vim /etc/salt/minion
    10 master:
    11   - 192.168.56.11                    # 前面2个空格,“-”后一个空格!
    12 [root@linux-node1 ~]# systemctl start salt-minion
    13 [root@linux-node1 ~]# salt-key –L        # 列出key状态
    14 Accepted Keys:
    15 Denied Keys:
    16 Unaccepted Keys:
    17 linux-node1.example.com            # 会出现主机hostname
    18 Rejected Keys:
    19 [root@linux-node1 ~]# salt-key –A        # 代表接受所有Unaccepted Keys
    20 [root@linux-node1 ~]# salt-key -L
    21 Accepted Keys:
    22 linux-node1.example.com
    23 Denied Keys:
    24 Unaccepted Keys:
    25 Rejected Keys:
    26 [root@linux-node1 ~]# salt '*' test.ping
    27 linux-node1.example.com:
    28 True

    同样的minion相关操作我们也在node2上执行一边

     1 [root@linux-node1 ~]# cat /etc/yum.repos.d/saltstack.repo 
     2 [saltstack-repo]
     3 name=SaltStack repo for RHEL/CentOS $releasever
     4 baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
     5 enabled=1
     6 gpgcheck=0
     7 [root@linux-node1 ~]# yum install -y salt-minion
     8 [root@linux-node1 ~]# systemctl start salt- minion
     9 [root@linux-node1 ~]# vim /etc/salt/minion
    10 master:
    11   - 192.168.56.11                    # 前面2个空格,“-”后一个空格!
    12 [root@linux-node1 ~]# systemctl start salt-minion

    然后回到node1上

     1 [root@linux-node1 ~]# salt-key -L
     2 Accepted Keys:
     3 linux-node1.example.com
     4 Denied Keys:
     5 Unaccepted Keys:
     6 linux-node2.example.com
     7 Rejected Keys:
     8 [root@linux-node1 ~]# salt-key –a linux-node2.example.com        # 代表单独接受某个key
     9 [root@linux-node1 ~]# salt-key –L
    10 [root@linux-node1 ~]# salt-key -L
    11 Accepted Keys:
    12 linux-node1.example.com
    13 linux-node2.example.com
    14 Denied Keys:
    15 Unaccepted Keys:
    16 Rejected Keys:
    17 [root@linux-node1 ~]# salt '*' test.ping
    18 linux-node2.example.com:
    19     True
    20 linux-node1.example.com:
    21     True

    在初使用salt的时候,我们要是记住的最重要的命令就是cmd.run,cmd.run很重要,它就是专门来执行bash命令的,也就是让你所希望的机器都执行同一条命令,这对于同类机器的操作节约了大量时间,单单会使用cmd.run就可以使日常重复性工作减少很多了

    1 [root@linux-node1 ~]# salt '*' cmd.run 'ls -l /root'
    2 linux-node2.example.com:
    3     total 0
    4 linux-node1.example.com:
    5     total 0
    6 drwxr-xr-x 5 root root 79 Nov 13 16:35 tidb-latest-linux-amd64

    这里有一些常见的问题

    1.master与minion是如何通信的?minion上木有开神马端口呀

    Saltstack默认使用zeromq传递消息,zeromq会随着Salt的安装而安装,他是一个消息队列服务,master通过4505端口将指令放入zeromq的队列中,而所有的minion都会监听master的4505端口,然后从队列中拿消息进行对比决定是否进行操作,如果操作将自己操作的结果丢回zeromq另外一个队列,master从4506端口监听该队列,得到返回结果,然后展示出来

     1 [root@linux-node1 ~]# netstat -tpln
     2 Active Internet connections (only servers)
     3 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
     4 tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
     5 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      998/sshd            
     6 tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      1055/python         # 发送指令
     7 tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      1073/python         # 接受结果
     8 tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
     9 tcp6       0      0 :::22                   :::*                    LISTEN      998/sshd      
    10 [root@linux-node2 tmp]# netstat -an|grep 4505
    11 tcp        0      0 192.168.56.12:48492     192.168.56.11:4505      ESTABLISHED        # 与master的4505一直处于ESTABLISHED状态

    2.我的key认证不想用主机名,我想自定义名称

    我们只需要在配置minion时再配置id就可以了,但是建议还是使用主机名,因为不是所有软件都可以自定义别名,我们要做的是全流程自动化,而不单单是salt这方面,而主机名是大家都可以通用的

    1 [root@linux-node1 ~]# vim /etc/salt/minion
    2 #id:                                # 修改成id: XXXXX

    3.我更改了主机名没什么反映啊,怎么破?

    这就要说salt之间的认证流程了

    启动master,生成自己的密钥与公钥,叫master.pem ,master.pub

    1 [root@linux-node1 master]# pwd
    2 /etc/salt/pki/master
    3 [root@linux-node1 master]# ls
    4 master.pem  master.pub  minions  minions_autosign  minions_denied  minions_pre  minions_rejected

    minion配置文件内指定Master,开启服务,生成自己的密钥与公钥,叫minion.pem ,minion.pub

    1 [root@linux-node2 minion]# pwd
    2 /etc/salt/pki/minion
    3 [root@linux-node2 minion]# ls
    4 minion.pem  minion.pub

    minion会想配置的目标发将自己的公钥存放在master的/etc/salt/pki/master/minions_pre下,请问你是我的master嘛

    master一看,我靠,女装大佬,可爱,想,就表示,对对对我就是你的master,然后接受密钥,并把自己的公钥发给minion从而正式签订契约,此时minions_pre下的minion公钥转放到/etc/salt/pki/master/minions下,而master的公钥也会在minion的/etc/salt/pki/minion下保留一份

    1 [root@linux-node2 minion]# ls
    2 minion_master.pub  minion.pem  minion.pub

    所以我们根据上述流程,当minion的id变更后,我们需要进行如下操作

    1 minion端停止salt-minion
    2 master端salt-key –d 原本minion的id
    3 minion端删除/etc/salt/pki/minion下所有文件
    4 minion端修改配置文件中的id变成需要的新id
    5 重启minion端的salt-minion
    6 master端认证接受新的id

     4.补充两个对同一台机器同时执行state文件的方式

    concurrent=True,表示完全同时进行,一般用于状态文件之间的执行绝对不会发生冲突的情况,比如执行内核初始化状态文件跟安装java环境状态文件

    queue=True,表示按队列内先进先出顺序进行,一般用于不清楚是否有冲突,比如执行修改同一文件的不同行的状态文件,第一个执行完会自己执行第二个,不会报错

    [root@linux-node1 ~]# salt '*1*' state.sls dnsmasq.dnsmasq-comment saltenv=prod pillar='{"project_url": "static.duia.com"}' concurrent=True
    [root@linux-node1 ~]# salt '*1*' state.sls dnsmasq.dnsmasq-comment saltenv=prod pillar='{"project_url": "static.duia.com"}' queue=True
  • 相关阅读:
    Android的数据存储
    Servlet第一天
    JavaScript高级程序设计读书笔记(3)
    Interesting Papers on Face Recognition
    Researchers Study Ear Biometrics
    IIS 发生意外错误 0x8ffe2740
    Father of fractal geometry, Benoit Mandelbrot has passed away
    Computer vision scientist David Mumford wins National Medal of Science
    Pattern Recognition Review Papers
    盒模型bug的解决方法
  • 原文地址:https://www.cnblogs.com/bfmq/p/7871869.html
Copyright © 2011-2022 走看看