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
  • 相关阅读:
    ....
    排序相关的问题(jq,java)_1123
    Spring aop 记录操作日志
    vue -element ui 自定义验证规则,封装在公共的文件里
    vue
    ES6 新特性
    正则表达式
    面向对象基础--继承(2)
    面向对象基础(1)
    安装vue环境
  • 原文地址:https://www.cnblogs.com/bfmq/p/7871869.html
Copyright © 2011-2022 走看看