设为首页 收藏本站

运维网

查看: 123|回复: 0

[经验分享] SaltStack入门篇之远程执行和配置管理

[复制链接]

尚未签到

发表于 2018-1-22 11:11:29 | 显示全部楼层 |阅读模式

一、SaltStack概述

Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。

salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.

多种配置管理工具对比:
Puppet(rubby开发,现在很少使用)
ansible(python开发,轻量级,没有agent,大规模环境下使用ssh会很慢,串行传输)
Saltstack(python开发,远程执行、配置管理、事件驱动基础设施、使用saltcloud可以管理私有云和公有云)

官方文档:<https://docs.saltstack.com/en/getstarted/>;
官方提供官方yum源:repo.slatstack.com-->可以使用cobbler自定义yum仓库进行同步
官方安装源:<http://repo.saltstack.com/2016.11.html#rhel>;
Saltstack组件:
SaltMaster
SaltMinion
Execution Modules

环境说明:
主机名     IP地址     说明     系统
linux-node1.example.com     192.168.56.11     模式:master     Centos 7.4
linux-node2.example.com     192.168.56.12     模式:minion     Centos 7.4
二、SaltStack安装
1.安装指定的yum源

[root@linux-node1 ~]# yum install https://repo.saltstack.com/yum/r ... 11-2.el7.noarch.rpm
[root@linux-node2 ~]# yum install https://repo.saltstack.com/yum/r ... 11-2.el7.noarch.rpm

2.安装salt-master和salt-minion

[root@linux-node1 ~]# yum install -y salt-master
[root@linux-node1 ~]# yum install -y salt-minion
[root@linux-node2 ~]# yum install -y salt-minion

3.修改minion配置并启动

[root@linux-node1 ~]# systemctl start salt-master    #启动salt-master
[root@linux-node1 ~]# vim /etc/salt/minion           #配置salt-minion
master: 192.168.56.11      #可以是主机名需要解析(指定服务端的IP地址),冒号有空格
id:   唯一标识符,可以不配,不配默认就是主机名
[root@linux-node1 ~]# systemctl start salt-minion    #启动salt-minion
[root@linux-node2 salt]# vim minion
master: 192.168.56.11      #可以是主机名需要解析(指定服务端的IP地址),冒号有空格
id:   唯一标识符,可以不配,不配默认就是主机名
[root@linux-node2 salt]# systemctl start salt-minion

minion配置中有一个id配置,默认是hostname,如果id配置和hostname不一致会导致无法进行通信,那么当hostname做了修改,或者错误的时候该怎么配置呢?
①关闭salt-minion  
②salt-key -d id  在master上删除minion的id  
③minion上删除pki目录
④minion上删除minion_id文件
⑤修改完成,启动minion
#此处必须先停掉minion修改,并删除相应的文件,否则会默认地去查找原先的配置,已踩坑

#以下是刚装完查看minion_id变成了www.test123.com。进行修改成linux-node2.example.com
[root@linux-node2 salt]# cat minion_id
www.test123.com
[root@linux-node2 salt]# systemctl stop salt-minion
[root@linux-node2 salt]# rm -rf pki
[root@linux-node2 salt]# rm -rf minion_id
[root@linux-node2 salt]# systemctl start salt-minion
[root@linux-node2 salt]# cat minion_id
linux-node2.example.com

4.配置说明

[root@linux-node2 salt]# ll
总用量 124
-rw-r----- 1 root root  2624 9月  15 23:19 cloud
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.conf.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.deploy.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.maps.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.profiles.d
drwxr-xr-x 2 root root     6 9月  16 00:41 cloud.providers.d
-rw-r----- 1 root root 46034 9月  15 23:19 master
drwxr-xr-x 2 root root     6 9月  16 00:41 master.d
-rw-r----- 1 root root 35101 1月  16 10:29 minion
drwxr-xr-x 2 root root    27 1月  16 11:47 minion.d
-rw-r--r-- 1 root root    23 1月  16 11:45 minion_id
drwxr-xr-x 3 root root    19 1月  16 11:45 pki
-rw-r----- 1 root root 26984 9月  15 23:19 proxy
drwxr-xr-x 2 root root     6 9月  16 00:41 proxy.d
-rw-r----- 1 root root   344 9月  15 23:19 roster

说明:
(1)salt-minion首次启动会在/etc/salt/pki/minion目录下生成公钥和秘钥
[root@linux-node2 salt]# ll /etc/salt/pki/minion/
总用量 12
-rw-r--r-- 1 root root  450 1月  16 11:47 minion_master.pub
-r-------- 1 root root 1674 1月  16 11:45 minion.pem
-rw-r--r-- 1 root root  450 1月  16 11:45 minion.pub

(2)并且在salt-master的/etc/salt/pki/master/minion_pre中存放了salt-minion的公钥。
[root@linux-node1 ~]# ll /etc/salt/pki/master/minions_pre/
linux-node1.example.com
linux-node2.example.com

5.配置salt-master和slat-minion通信

[root@linux-node1 salt]# salt-key
Accepted Keys:       同意的
Denied Keys:                拒绝的
Unaccepted Keys:            等待同意的
linux-node1.example.com
linux-node2.example.com
Rejected Keys:

同意认证的方法:
分为三种:

[root@linux-node1 salt]# salt-key -A
[root@linux-node1 salt]# salt-key -a 指定id
[root@linux-node1 salt]# salt-key -a 支持通配符
[root@linux-node1 master]# salt-key -a linux*
The following keys are going to be accepted:
Unaccepted Keys:
linux-node1.example.com
linux-node2.example.com
Proceed? [n/Y] Y
Key for minion linux-node1.example.com accepted.
Key for minion linux-node2.example.com accepted.

salt-key 命令参数介绍
-L  列出所有
-d 删除指定的支持通配符
-D 删除所有
-A 添加所有
-a 指定添加

同意之后生成的文件
pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   │   ├── linux-node1.example.com
│   │   └── linux-node2.example.com
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   └── minions_rejected
└── minion
    ├── minion_master.pub  同意之后master发送公钥
    ├── minion.pem
    └── minion.pub

三、SaltStack远程执行和配置管理
1.远程执行

第一条命令:
[root@linux-node1 master]# salt '*' test.ping
linux-node2.example.com:
    True
linux-node1.example.com:
    True

说明:
salt:命令
*:匹配目标,使用通配符
test.ping:模块.方法   
#此处的ping并非ICMP的ping命令,而是master向minion发送了一个包,minion收到了,返回一个True

[root@linux-node1 ~]# salt '*' cmd.run 'uptime'
linux-node1.example.com:
     11:51:47 up 21 days,  5:57,  2 users,  load average: 0.04, 0.03, 0.05
linux-node2.example.com:
     11:51:47 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05
[root@linux-node1 ~]# salt '*' cmd.run 'w'
linux-node1.example.com:
     11:52:11 up 21 days,  5:58,  2 users,  load average: 0.03, 0.02, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/2    192.168.56.1     06Jan18  6:51   3.27s  3.27s -bash
    root     pts/3    192.168.56.1     06Jan18  3.00s  6:17   0.46s /usr/bin/python /usr/bin/salt * cmd.run w
linux-node2.example.com:
     11:52:11 up 12 days,  6:26,  2 users,  load average: 0.00, 0.03, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/1    192.168.56.1     Mon10   21:59m  0.28s  0.28s -bash
    root     pts/3    192.168.56.1     06Jan18  6:59   4.82s  0.02s -bash
[root@linux-node1 ~]# salt '*' cmd.run 'df -h'
linux-node2.example.com:
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   18G   17G  1.1G  95% /
    devtmpfs                 905M     0  905M   0% /dev
    tmpfs                    916M   12K  916M   1% /dev/shm
    tmpfs                    916M   41M  876M   5% /run
    tmpfs                    916M     0  916M   0% /sys/fs/cgroup
    /dev/sda1                497M  171M  326M  35% /boot
    tmpfs                    184M     0  184M   0% /run/user/0
    /dev/loop0               4.1G  4.1G     0 100% /mnt
linux-node1.example.com:
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   18G   11G  7.2G  60% /
    devtmpfs                 905M     0  905M   0% /dev
    tmpfs                    916M   28K  916M   1% /dev/shm
    tmpfs                    916M   57M  860M   7% /run
    tmpfs                    916M     0  916M   0% /sys/fs/cgroup
    /dev/sda1                497M  171M  326M  35% /boot
    tmpfs                    184M     0  184M   0% /run/user/0

[root@linux-node1 ~]# netstat -tulnp|grep minion
minion不需要监听端口,说明minion需要主动去链接master,master监听端口为4505、4506
[root@linux-node1 ~]# netstat -tulnp|grep python
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      37039/python        
tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      37045/python      

#master和minion默认使用一个叫zeroMQ进行并行通信,zeroMQ属于底层(传输层)的消息队列,
#相当于一个发布与订阅系统,比如你订了一个教室听课,那么所有订了此间课室的人都能听到老师的课程。

[root@linux-node1 ~]# lsof -ni:4505
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
salt-mast 37039 root   16u  IPv4 3394584      0t0  TCP *:4505 (LISTEN)
salt-mast 37039 root   18u  IPv4 3412804      0t0  TCP 192.168.56.11:4505->192.168.56.12:43126 (ESTABLISHED)
salt-mast 37039 root   19u  IPv4 3412811      0t0  TCP 192.168.56.11:4505->192.168.56.11:38262 (ESTABLISHED)
salt-mini 39623 root   27u  IPv4 3412810      0t0  TCP 192.168.56.11:38262->192.168.56.11:4505 (ESTABLISHED)

查看4505端口,我们可以发现salt-minion使用一个随机端口通过4505端口与salt-master通信,master使用4505端口发送指定到salt-minion上进行执行。而4606端口是用于接收数据的返回,用于zeroMQ的请求与响应的系统。

可以通过date命令查看salt的并行通信,可以看到是同时返回
[root@linux-node1 ~]# salt '*' cmd.run 'date'
linux-node2.example.com:
    Tue Jan 16 12:01:52 CST 2018
linux-node1.example.com:
    Tue Jan 16 12:01:52 CST 2018

2.配置管理

    (1)saltstack是使用YAML的格式作为管理文件的格式,下面的YAML的样例:

    YAML样例:
    house:
    family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
    address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

    (2)YAML的规则:
    ①缩进表示层级关系,默认缩进是2个空格、4个空格、6个空格
    ②冒号后面有个空格,以冒号结尾可以有空格,可以无空格
    ③短横线代表一个列表,短横线后面有个空格
    (3)定义yaml文件放的位置:salt内置一个fileserver,在master文件配置:file_roots

[root@linux-node1 ~]# vim /etc/salt/master     #定义yaml文件放的位置,base环境是必备的
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  test:
    - /srv/salt/test
  prod:
    - /srv/salt/prod
[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev,test,prod}
[root@linux-node1 ~]# systemctl restart salt-master
[root@linux-node1 ~]# cd /srv/salt/base/
[root@linux-node1 base]# mkdir web
[root@linux-node1 web]# vim apache.sls    #编写安装apache的YAML文件
apache-install:
  pkg.installed:---------->模块pkg,方法installed,会匹配操作系统进行选择安装的方法
    - name: httpd--------->装的包的名称

apache-service:----------->id要唯一
  service.running:-------->状态模块service,running为模块的方法
    - name: httpd--------->管理服务的名称
    - enable: True-------->设置开机自动启动

[root@linux-node1 ~]# salt 'linux-node2.example.com' state.sls web.apache
#如果apache.sls的位置是在prod目录下,需要在后面增加saltenv=prod
#salt 'linux-node2.example.com' state.sls web.apache saltenv=prod

实现自动化安装,需要写一个top.sls
[root@linux-node1 base]# pwd
/srv/salt/base
[root@linux-node1 base]# vim top.sls    #必须在base环境下写
base:
  'linux-node1.example.com':
    - web.apache
  'linux-node2.example.com':
    - web.apache
****************************
如果只有一个任务在全部机子上执行,也可以:
base:
  '*'
    - web.apache
****************************
[root@linux-node1 ~]# salt '*' state.highstate   #去top.sls读取,*代表通知哪些主机

salt '*' state.highstate test=True   #在不想影响当前主机的运行情况,可以使用test=True 进行预测试




运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

关注运维网官方微信X

关注运维网官方微信

扫描二维码关注运维网官方微信,最新一手资源尽在官方微信!快快关注我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由安畅网络和青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


合作伙伴: 青云cloud 安畅网络

快速回复 返回顶部 返回列表