3

SaltStack安装使用

 2 years ago
source link: https://yaoguais.github.io/article/linux/saltstack.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

SaltStack安装使用

SaltStack是一个服务器集群管理的解决方案,通过salt命令可以高效的操作上万台服务器.

  1. 配置
    • SLS文件语法
    • SLS文件实例

SaltStack的组件有很多,我们主要关心salt-master和salt-minion两个.

salt-master通过将命令发送给salt-minion来实现操作salt-minions.

我这是使用两台主机,操作系统都是CentOS6.5的.

192.168.1.249同时作为master和minion,192.168.1.248作为minion.

通过安装配置,我们需要实现在其中任意一台服务器上同时操作服务器集群.

安装的过程,我们参见其官方文档.

在249那台主机,添加yum源:

vim /etc/yum.repo.d/saltstack.repo
[saltstack-repo]
name=SaltStack repo for Red Hat Enterprise Linux $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
       https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/base/RPM-GPG-KEY-CentOS-6
yum makecache

安装必须的软件包

yum install salt-master salt-minion salt-ssh salt-syndic salt-cloud

注: 如果key下载不下来,可以把gpgcheck修改为0.

然后切换到248那台主机,添加yum源,安装salt-minion组件

yum install salt-minions

首先配置249主机,修改其master组件配置文件

vim /etc/salt/master

修改其中3个字段

interface: 192.168.1.249
auto_accept: True
hash_type: sha256

这里hash_type推荐使用sha256,如果使用配置文件默认的md5的话,会在日志文件/var/log/salt/master中生成一条警告.

然后重启服务

service salt-master restart

然后配置249主机的minion组件,

vim  /etc/salt/minion

修改其中的3个字段

id: minion-dev
master: 192.168.1.249
hash_type: sha256

然后重启minion服务

service salt-minion restart

由于我们开启了master的自动接受,过一会儿就能看到master接收了minion-dev了.

# salt-key -L
Accepted Keys:
minion-dev
Denied Keys:
Unaccepted Keys:
Rejected Keys:

接着配置248主机

vim /etc/salt/minion

修改关键字段

id: minion-dev2
master: 192.168.1.249
hash_type: sha256
service salt-minion restart

然后在249的主机上查看当前管理的minion,

# salt-key -L
Accepted Keys:
minion-dev
minion-dev2
Denied Keys:
Unaccepted Keys:
Rejected Keys:

然后测试一下两台minion主机

# salt "*" test.ping
minion-dev2:
    True
minion-dev:
    True

至此,master和minion的通讯基本配置完成了.

然后我们来使用salt部署系统.

首先找到/etc/salt/master中的file_roots字段,其中默认指定salt的state文件在/srv/salt目录下,我们先创建这个文件夹.

mkdir -p /srv/salt

然后我们需要书写xxx.sls配置文件,这种配置文件是使用yaml标记语言写的,先了解一下yaml 在slat中的使用.

SLS文件语法

这里有如下几个规则:

  1. YAML使用一个固定的缩进来表示数据层之间的关系。salt要求每个级别的缺口正好有两个空格。不要使用制表符。

  2. key: value组成一个键值对,当然还有另外一种写法

    key: value

value换行后用两个空格缩进.

但是一般使用换行都是为了表示复杂的value,例如

first_level_dict_key:
  second_level_dict_key: value_in_second_level_dict
  1. 相同缩进的破折号用来表示数组,破折号后面需要紧着一个空格,然后才是value,例如

    • list_value_one
    • list_value_two
    • list_value_three

数组一个作为键值对的value出现,例如

my_dictionary:
  - list_value_one
  - list_value_two
  - list_value_three

SLS文件实例

我们主要参见salt官方文档,先构建简单的配置.

在/srv/salt目录下,我们创建top.sls文件

base:
  '*':
    - webserver

然后也是slat目录,我们接着创建webserver.sls文件

httpd:                  # ID declaration
  pkg:                  # state declaration
    - installed         # function declaration

然后我们执行命令,让minion安装apache

# salt '*' state.apply
minion-dev2:
----------
          ID: httpd
    Function: pkg.installed
      Result: True
     Comment: Package httpd is already installed
     Started: 11:10:59.078186
    Duration: 621.726 ms
     Changes:

Summary for minion-dev2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
minion-dev:
----------
          ID: httpd
    Function: pkg.installed
      Result: True
     Comment: Package httpd is already installed
     Started: 19:11:13.506096
    Duration: 672.966 ms
     Changes:

Summary for minion-dev
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
  • state.apply invoked without any SLS names will run state.highstate
  • state.apply invoked with SLS names will run state.sls

上面的我们是通过state.apply来执行的,我们还可以通过

salt "*" state.sls webserver

来执行特定的sls文件.多个文件去掉.sls后缀,用逗号分隔.

这次我们使用salt部署完整的服务器架构,具体包括一台LB,两台WEB服务器, WEB服务器分别部署NGINX,PHP7,MYSQL,MONGODB,REDIS,SUPERVISOR等服务.

主机名: salt1 IP地址: 192.168.1.241 作用:LB和salt-master机器
主机名: salt2 IP地址: 192.168.1.242 作用:WEB服务器和salt-minion机器1 salt名称: web-server1
主机名: salt3 IP地址: 192.168.1.243 作用:WEB服务器和salt-minion机器2 salt名称: web-server2

网路配置:

三台机器网络配置只有IP地址不同,其它完全相同。
首先配置网卡eth0,设置静态IP。
然后配置网关/etc/sysconfig/network
然后配置DNS服务器/etc/resolv.conf

配置salt-master机器的salt服务:

添加yum源: /etc/yum.repos.d/saltstack.repo
yum install salt-master python-progressbar

vim /etc/salt/master
修改以下字段
interface: 192.168.1.241
hash_type: sha256
启动服务
service salt-master start

yum install salt-minion
vim /etc/salt/minion
修改以下字段
id: web-lb
master: 192.168.1.241
hash_type: sha256
启动服务
service salt-minion start

配置salt-minion机器1的salt服务:

添加yum源: /etc/yum.repos.d/saltstack.repo
yum install salt-minion

vim /etc/salt/minion
修改以下字段
id: web-server1
master: 192.168.1.241
hash_type: sha256
启动服务
service salt-minion start

我们使用同样的方式配置salt-minion机器2的salt服务。

通过上面的操作,我们已经配置好了3台机器的salt服务,然后我们开始测试3台服务器的连接。

查看所有的minion机器:
# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
web-server1
web-server2
Rejected Keys:

接受2台minion服务器:
# salt-key -a web-server1
# salt-key -a web-server2

测试两台服务器的连接:
# salt "web-server*" test.ping
web-server1:
    True
web-server2:
    True

然后我们配置2台minion服务器组件:

  • 基础组件 base.sls
  • NGINX nginx.sls
  • PHP7 php7.sls
  • Redis redis.sls
  • MySql mysql.sls
  • MongoDB mongodb.sls
  • Postgresql postgresql.sls
  • NodeJs nodejs.sls
  • Supervisor supervisor.sls
  • PhpMyAdmin phpmyadmin.sls
  • Golang golang.sls
  • Sync sync.sls
  • Lvs lvs.sls

写完这些配置文件,我们依次安装这些组件. 所有的配置文件可以到这里找到.

# salt 'web-server*' state.sls install.base,install.nginx,install.php7,install.redis,
install.mysql,install.mongodb,install.postgresql,install.nodejs,install.supervisor,install.phpmyadmin,
install.golang,install.rsync
# salt 'web-lb' state.sls install.lvs

运行完上面的这条命令,等待一段时间,所有的组件就安装完毕了.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK