centos安装方法

公共仓库安装(SaltStack 2015.5.5),从0.9.4版本开始支持EPEL源安装,官方文档说使用EPEL仓库安装会有各种依赖问题需要解决目前使用阿里云的yum仓库安装没有出现问题。官方文档提到的问题主要有:最新版的SaltStack不会及时在EPEL中更新,bpython-jinja2从EPEL移至"RHEL Server Optional Channel",cSaltStack 2015.8需要python-crypto(2.6.1及以上)和python-tornado4.2.1及以上但是Redhat5和6的EPEL中没有,所以在安装过程中会出现如下报错:

Error: Package: salt-2015.5.2-3.el6.noarch (epel)
           Requires: python-jinja2
Error: Package: salt-2015.5.2-3.el6.noarch (epel)
           Requires: PyYAML
Error: Package: salt-2015.5.2-3.el6.noarch (epel)
           Requires: python-crypto

master安装

  1. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  2. yum install salt-master -y #安装master端
  3. /etc/init.d/salt-master start #启动master
  4. chkconfig salt-master on #设置master为开机启动

minion安装&配置

  1. yum install salt-minion -y
  2. vim /etc/salt/minion
  3. #master: salt修改为master: 192.168.56.6 #其中192.168.56.6为master ip请根据实际情况进行修改
  4. 当然要想简单也可以采用如下方法
  5. sed -in 's\#master: salt\master: 192.168.56.6\g' /etc/salt/minion
  6. chkconfig salt-minion on #设置开机启动

master管理

  1. 虽然我们上一步在minion端设置了masterIp想让master进行管理,但是但是但是,并不是你设置了我的ip我就要管你,我得同意才可以。(咳咳这有点像追女孩子)。

查看待管理主机

  1. salt-key #此操作在master端进行
  2. 从上图中,我们不难看出,等待管理的主机有两台分别是salt-minion1.comsalt-minion2.com
  3. salt-key -A #接收全部
  4. salt-key -a 指定主机 #可以接收指定主机,支持通配符操作
  5. salt-key -D #删除全部已管理的主机(十分不建议这么做)
  6. salt-key -d 指定主机 #不在管理指定主机
  7. 之后我们在执行salt-key,就可以看到两台主机已加入被管理的列表中

Redhat6安装方法:

 从2015.8.0版本后Salt在RHEL5、6、7上的安装可以使用SaltStack仓库

下载并安装SaltStack仓库的公钥并导入

#下载公钥
[root@centos67 ~]# wget https://repo.saltstack.com/yum/rhel6/SALTSTACK-GPG-KEY.pub   

#查看本机安装的公钥
[root@centos67 ~]# rpm -qa gpg-pubkey*   
gpg-pubkey-de57bfbe-53a9be98
gpg-pubkey-c105b9de-4e0fd3a3


#查看公钥信息
[root@centos67 ~]# rpm -qi gpg-pubkey-de57bfbe-53a9be98    

#删除公钥
[root@centos67 ~]# rm -f SALTSTACK-GPG-KEY.pub

编辑SaltStack yum仓库配置文件/etc/yum.repos.d/saltstack.repo添加如下信息

[root@centos67 ~]# vim /etc/yum.repos.d/saltstack.repo
####################
# Enable SaltStack's package repository
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS 6
baseurl=https://repo.saltstack.com/yum/rhel6
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/rhel6/SALTSTACK-GPG-KEY.pub

[root@centos67 ~]# yum clean expire-cache
已加载插件fastestmirror, security
Cleaning repos: base epel extras saltstack-repo updates

接下来就可以按照在centos中安装master和minion的步骤操作了。

问题与解决:

1.当master无法远程执执行命令时(Minion did not return. [No response] ):查看minion的日志(/var/log/salt/minion),如果日志中报

The Salt Master has cached the public key for this node,

this salt minion will wait for 10 seconds before attempting to re-authenticate,表明master没有确认证书,要关闭防火墙、selinux,或者,将master所管理的minion全部删除,并且把minion的minion_d、pki文件删除,重启minion,master重新添加。

2.当master无法启动时,报address already used,表明地址被占用,或者程序没有正常关闭,此时将进程杀掉,重新启动即可。

 

master的迁移:

1.必须保证master的key、以及已经添加成功或者拒绝的minion的所有key

 将原来的master/etc/salt/pki/master,这个文件打包,然后考入新的master相目录下即可,

   然后修改minion配置文件的master的ip,然后通过原先的master重启服务。

  salt提供了一个启动的模块   salt "*" service.restart 服务名

 

returner

默认情况下,发给salt-minion的命令执行结果将返回给master,salt-stack returner的接口允许将结果发送给任意系统。

在执行命令的同时,salt-stack会将匹配到的主机生成一个列表,等返回结果时,与列表做对比,这样就能知道哪些服务器没有返回数据。

内置的returner模块列表

就以syslog_return、mysql为例

1. salt "*" test.ping --return syslog

在minion的日志(/var/log/message):python2.6: {"fun_args": [], "jid": "20170413143645199187", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "minion1"}

这样就记录到了执行结果

2.minion将执行结果存到mysql数据库中

(1)在minion的配置文件中添加数据库信息

2.在minion上安装python的mysql模块(pymysql)

3.创建数据库

4.

安装mysql模块

salt "*" cmd.run 'yum install pymysql'

这种情况每个minion都会连接mysql,压力比较大,基本不怎么用

 

even

even是一个本地的ZeroMQPUB Interace,even是一个开放的系统,用于发送信息通知salt或其他的操作系统。

每个event都有一个标签,事件标签允许快速置顶过滤事件,除了标签之外,每个事件都有一个数据结构,这个

数据结构是一个dict类型,其中包含关于事件的信息。

监听在master上的所有结果,然后把结果写入mysql

文件系统

配置文件的修改以及文件的传输:

1.修改配置文件
2.创建目录
3.写sls文件

vim /etc/salt/master    取消配置文件中的注释即可。
file_roots:
base:
- /srv/salt/
dev:
prod:


/srv/salt/ 这个目录需要创建,在/srv/salt/ 创建自己所需的文件
eg:mkdir -p etc/script 然后讲一个实验脚本放进去

在master上执行: salt "*" cmd.script salt://etc/script/test.sh -------salt://就代表/srv/salt目录。。

 

同步配置文件:
cd /srv/salt/
创建一个hosts.sls文件
/tmp/hosts: -----------要把文件同步到什么位置
  file.managed: --------使用文件系统的管理模块
    - source: salt://etc/hosts --------要同步的文件(要提前把/etc/hosts文件拷贝过来)
    - user: root
    - group: root
    - mode: 600 ------权限

然后在创建一个top.sls文件
base:
  '*': -----------要同步的服务器
    - hosts--------要使用哪一个sls文件,这个hosts就是指的hosts.sls文件。

执行: salt '*' state.sls + 要执行的文件(这个文件必须是那个包含要同步文件的那个sls文件) 或者 salt '*' state.highstate  

如果是修改配置文件的话,直接修改master中/srv/salt/的配置文件即可,然后执行同步命令就行。

 

Grains

类似于puppet、facter功能

主要是采集一些基本信息,可以在客户端定义,汇报到服务端,也可以从服务端定义推下去再把结果报上来。

使用方法:

salt "*" grains.ls 获取所有信息的名字

salt "*" grains.items  获取所有信息的名字以及内容

salt "*" grains.item os 查看os的内容

这则匹配:

salt -G 'os:CentOS' test.ping

salt -G 'cpuarch:x86_64' grains.items num_cpus

salt -G 'ec2_tags:enviornment:*production*'

 

自定义grains(grains提供的不够我们使用的,需要我们自定义)

 

主要是在minion上进行

grains:       固定写法

 roles:        名字

  - webserver  值,这个roles中有多个值就用列表的形式显示出来,

  - memcache

 deployment: datacenter4                     名字:值

 cabinet: 13

 cab_u: 14-15

 

State

salt状态系统的核心是sls,sls表示状态系统将会是什么样的一种状态,而是以一种简单的格式来包含这些数据,这经常也被叫做配置管理。主要使用YAML语法

sls文件实际上只是一些,字典、列表、字符串、数字。

YAML语法:

1.每个缩进级别由两个空格组成,不要用tabs

2.如果是字典的话,冒号前面的就是键名,冒号后面就是值,中间用空格隔开。

3.逍遥表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表的一部分。

STATE模块

http://docs.saltstack.cn/topics/tutorials/walkthrough.html

 安装nginx

这里确保可以直接通过yum安装nginx

nginx:     自己定义
  pkg:      通过pkg安装
    - installed    必须安装
  service:         启动服务

  - running
    - enable: True  下面两个表示可以运行这个操作
    - reload: True
    - watch:         监控,当以下两个文件有变化时,进行同步
      - pkg: nginx   监控的软件为nginx
      - file: /etc/nginx/nginx.conf     这只是一个名字,和下面的名字相同就行
      - file: /etc/nginx/conf.d/default.conf
/etc/nginx/nginx.conf:
  file.managed:     管理一个文件
    - source: salt://etc/nginx/nginx.conf  同步配置文件的位置
    - user: root
    - group: root
    - mode: 644
/etc/nginx/conf.d/default.conf:
  file.managed:
    - source: salt://etc/nginx/conf.d/default.conf
    - user: root
    - group: root
    - mode: 644

执行命令:salt "*" state.sls nginx

 

如果配置文件修改,在客户端执行salt-call state.sls ngix就可以了,这个可以在客户端中五分钟执行一次。放到crontab里。

pillar

 pillar是salt非常重要的一个组件,它用于特定的minion定义任何所需要的数据,这些数据可以被salt的其他组件使用。每个minion只能看到自己特定的数据

pillar也是一个单独模块,也需要创建单独的目录,在master的配置文件中进行设置,可以使用默认的就行,取消注释。

用途:

1.传递敏感数据(使用独立的加密session)

schedule:

   highstate:

     function:state.highstate

     minutes:1

语法:

必须写top.sls,也就是必须写路由。

base:

  test1:

    - match: nodegroups     匹配test1这个组

    - nginx                         执行nginx这个动作,执行pillar这个目录下的nginx

cd /srv/pillar/nginx/

vim init.sls

schedule:

   nginx:

     function:state.sls     执行的函数

     minutes:1

     args:

       - 'nginx'   执行命令

salt '*'  saltutil.refresh_pillar 刷新规则

salt '*' pillar.data 查看配置是否生效