自动化运维(7.17)
一、saltstock简介
1.分布式的,在远程执行命令
2.监控端口4505端口,返回监控信息的窗口为4506
3.基础执行地址为/var/salt/
server2中同步的地址/var/cache/salt/minion/files/base
二、软件的安装和启用
一、安装软件,启动软件
server1
yum install salt-master.noarch 主机端
systemctl enable --now salt-master.service
yum install -y lsof 下载查看端口工具
lsof -i :4505 查看端口哦4505端口是否开放(图1)
netstat -antlp(图2)
图1
图2
server2、3中
yum install salt-minion.noarch 下载客户端
cd /etc/salt/
ls
vim minion 更改配置文件,指向mastser(图3)
systemctl enable --now salt-minion.service
图3 注意:后面的空格
二、将server2,server3加入管理
salt-key常用参数 | 解释 |
---|---|
-a | 添加指定ID 的key |
-A | 添加全部 |
-R | 拒绝全部 |
-d | 删除指定ID的 |
-D | 删除全部 |
server1 |
salt-key -L
salt-key -A
salt-key -L 图4
salt '*' test.ping 查看连接状态 图5
lsof -i :4505 查看端口信息 图6
图4
图5
图6 server1监控着server2, server3
三、查看密钥、进程
一、查看密钥
server1
server2
结果表明主机和被监控端彼此拥有公钥
二、查看进程
server1
yum install -y python-setproctitle.x86_64
systemctl restart salt-master.service
ps ax
四、安装远程执行模块
salt默认的基础执行地址为 /srv/salt
安装远程执行模块的目的是能在远程服务器上也能执行命令
server1
mkdir /srv/salt 建立默认读取
mkdir /srv/salt/_modules 建立执行模块目录
cd _modules/
vim my_disk.py
///
def df():
return __salt__['cmd.run']('df -h')
//
salt server2 saltutil.sync_modules 发送执行模块到server2 图1
salt server2 my_disk.df 测试df能不显示 图2
salt server3 saltutil.sync_modules
salt server3 my_disk.df
图1
图2
server2
yum install -y tree
cd /var/cache/salt
tree minion/
五、apache自动安装配置
注1:当salt目录下同时存在 apache/inin.sls 和apache.sls时,优先执行在上一级目录下的apache.sls
注2:因为是python语句特别需要注意每次缩进2个字符
注3:salt:// 代表的是基础地址/src/salt
一、编写自动下载httpd模块
[root@server1 salt] mkdir /srv/salt/apache
[root@server1 salt] cd /srv/salt/apache
[root@server1 apache] vim init.sls
apache: 此模块名称
pkg.installed: 安装操作
- pkgs: 下载安装包名称如下
- httpd 下载http
- php 下载php
file.managed: 文件管理
- name: /etc/httpd/conf/httpd.conf 覆盖到服务器(minion)端文件的地址
- source: salt://apache/httpd.conf 文件的来源(本机)
service.running:
- name: httpd
- enable: true
- reload: true
- watch:
- file: apache
//
二、设置修改后的推送的http配置文件
拷贝修改后的http配置文件到特定的执行地址(salt地址默认发布地址base为/srv/salt)
yum install httpd
cp /etc/httpd/conf/httpd.conf /srv/salt/apache
vim httpd.conf 修改要推送的http配置文件,将其端口设置为8080
三、执行查看
server1
[root@server1 apache] pwd
/srv/salt/apache
[root@server1 apache] ls
httpd.conf init.sls 推送的文件包括设置和文件配置
[root@server1 apache] salt server2 state.sls apache 推送文件
显示推送成功
六、nginx的自动安装过程
一、配置安装模块
1.自动安装
mkdir /srv/salt/nginx
vim /srv/salt/nginx/init.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel
file.managed:
- name: /mnt/nginx-1.20.1.tar.gz
- source: salt://nginx/nginx-1.20.1.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.20.1.tar.gz && cd nginx-1.20.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-threads --with-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
///
2.修改好的配置文件
vim nginx.conf
//
#user nginx;
worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
///
3.nginx启动文件
vim nginx.service
//
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
///
vim service.sls
include:
- nginx
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/nginx.conf
nginx-service:
file.managed:
- name: /usr/lib/systemd/system/nginx.service
- source: salt://nginx/nginx.service
service.running:
- name: nginx
- enable: true
- reload: true
- watch:
- file: /usr/local/nginx/conf/nginx.conf
总共包括以下几个部分
二、运行
server1
salt server2 state.sls nginx.service
实验结果
server1
server2
七、grains模块使用
一、前言
1.Grains是SaltStack的一个组件,存放在SaltStack的minion端。
2.当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
3.由于grains是静态数据,因此不推荐经常去修改它。用途:
(1)可用作CMDB。
(2)在target中使用,匹配minion。
(3)在state系统中使用,配置管理模块。
二、使用方法
1.grains.item调用方法
[root@server1 nginx] salt server2 grains.item ipv4 查看ipv4 图1
[root@server1 _grains] salt -G 'roles:apache' cmd.run hostname 让角色为apache的minion端查看主机名字 图2
[root@server1 _grains] salt -G 'roles:nginx' cmd.run hostname 让角色为nginx的minion端查看主机名字 图2
图1
图2
2.自定义minion端的grains角色
server2
设定角色为apache
[root@server2 yum.repos.d] cd /etc/salt/
[root@server2 salt] ls
cloud cloud.maps.d master minion.d proxy
cloud.conf.d cloud.profiles.d master.d minion_id proxy.d
cloud.deploy.d cloud.providers.d minion pki roster
[root@server2 salt] vim minion 图1 设定角色
[root@server2 salt] systemctl restart salt-minion
图1
server3
操作同上设定角色为nginx
3.测试
[root@server1 nginx] salt '*' grains.item roles
测试结果:grains找到各自对应的角色
4.自定义模块
1.编写自定义模块
[root@server1 salt] mkdir _grains
[root@server1 salt] ls
apache _grains _modules nginx
[root@server1 salt] cd _grains/
[root@server1 _grains] ls
[root@server1 _grains] vim grains.py 设定自定义模块
//
def grains() python特别需要注意缩写
grains = {}
grains['hello'] = 'world'
grains['salt'] = 'stack'
return grains
/
[root@server1 _grains] salt '*' saltutil.sync_grains 将此模块同步到其他minion 如图1
图1
2.测试
[root@server1 _grains]# salt '*' grains.item hello
八、top模块的使用
可以对不同对象执行不同操作
一、建立top模块特别需要注意每次缩进2字符
[root@server1 _grains] vim top.sls
//
base:
'roles:apache': 角色为apache
- match: grain 匹配方式为grain
- apache 执行apche的模块
'roles:nginx': 角色为nginx
- match: grain 匹配方式为grain
- nginx.service 执行nginx的模块
//
二、执行top模块
salt '*' state.highstate
九、pillar模块使用
一、前言
1.pillar和grains一样也是一个数据系统,但是应用场景不同。
2.pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用
pillar更加适合在配置管理中运用。
3.户名密码等),而且可以指定某一个minion才可以看到对应的信息。
4.pillar模块的位置应该和salt文件的位置都在/srv下
二、使用方法
1.自定义设置匹配安装规则pkgs.sls
[root@server1 srv] mkdir pillar
[root@server1 srv] cd pillar/
[root@server1 pillar] vim pkgs.sls
///
{% if grains['fqdn'] == 'server2' %}
port: 80
package: httpd
{% elif grains['fqdn'] == 'server3' %}
port: 8080
package: httpd
{% endif %}
//
2.设置顶层文件top.sls
[root@server1 pillar] vim top.sls
base:
'*':
- pkgs
/
3.查询pillar数据:
[root@server1 pillar] salt '*' pillar.items
4.编写测试模块
在server2,server3中分别建立一个文档里面对应写server2,server3的主机名字
[root@server1 salt]# vim /srv/salt/test.sls
/
/mnt/test:
file.append:
{% if grains['fqdn'] == 'server2' %}
- text: server2
{% elif grains['fqdn'] == 'server3' %}
- text: server3
{% endif %}
//
测试:
[root@server1 salt]# salt '*' state.sls test
十、jinjia模板
一、前言
1.Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。
2.通过jinja模板可以为不同服务器定义各自的变量。
3.两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环或赋值的语句,后者把表达式的结果打印到模板上。
二、pillar+grains+jinja模块
实现httpd不同端口安装运行
修改自动安装模块,导入jinja模板
[root@server1 apache] cd /srv/salt/
[root@server1 salt] ls
apache _grains _modules nginx test.sls top.sls
[root@server1 salt] cd apache/
[root@server1 apache] ls
httpd.conf init.sls
[root@server1 apache] vim init.sls
apache:
pkg.installed:
- pkgs:
- {{ pillar['package'] }}
service.running:
- name: httpd
- enable: true
- reload: true
- watch:
- file: /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://apache/httpd.conf
- template: jinja
更改/srv/salt/apache/httpd.conf文件,设置变量
测试:
[root@server1 apache] salt server2 state.sls apache