自动化运维工具saltstack的简单运用

一、salt简介

Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。
salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等。
python的客户端接口:
为了允许简单的扩展,Salt执行程序可以写为纯Python模块。数据从Salt执行过程中收集到可以发送回master服务端,或者发送到任何任意程序。Salt可以从一个简单的Python API调用,或者从命令行被调用,所以Salt可以用来执行一次性命令,也可以作为一个更大的应用程序的一个组成部分。
salt基于消息队列,通信比较快,队列方式适合线程的限流

二、salt的运用

1.环境准备:

安装包的获取可以在salt的官网https://repo.saltstack.com/index.html#rhel上下载,本机使用的salt软件版本是2019.2(Latest)
server1: 172.25.20.1 (salt的master主机)
server2: 172.25.20.2 (salt的客户端主机)
server3:172.25.20.3 (salt的客户端主机)

yum install -y salt-master.noarch  python-setproctitle.x86_64
##salt服务主机安装salt-master和一个python服务来通过python对其他节点操作
vim /etc/salt/master		##修改配置文件,修改默认的读取文件的位置,此时/srv/salt/就相当于家目录
systemctl restart salt-master.service

在这里插入图片描述

yum install salt-minion -y			##安装客户端服务
vim /etc/salt/minion				##修改配置文件,指向master服务端
systemctl restart salt-minion.service

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三台机器都重启服务后,开始测试salt服务:
salt-key -L				##查看接受salt服务端主机可管理的客户端
salt-key -A				##给连接上的客户端奋发key
salt '*' test.ping		##与python很像,调用ping模块来测试主机是否连通
mkdir -p /srv/salt		##建立默认的salt家目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.给客户端推送一个apache服务
文件编写例子如下:
vim top.sls			##'*'表示所有主机,apache.install表示apache的安装
base:
  '*':
    - apache.install
##注意python格式的缩进

salt '*' state.highstate			##高级推送,给所有客户端推送服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.给客户端推送一个源码编译安装的nginx示例
cd /srv/salt
mkdir pkgs			
vim pkgs/install.sls			##把编译所需要的依赖环境单独写出来
nginx-make:
  pkg.installed:
    - pkgs:
      - gcc
      - make
      - zlib-devel
      - pcre-devel

mkdir nginx
vim nginx/install.sls
{% set nginx_version = '1.16.0' %}		##通过变量调用来设置nginx的版本
include:
  - pkgs.install

install-nginx:
  file.managed:
    - name: /mnt/nginx-{{ nginx_version }}.tar.gz
    - source: salt://nginx/files/nginx-{{ nginx_version }}.tar.gz

  cmd.run:
    - name: cd /mnt && tar zxf nginx-{{ nginx_version }}.tar.gz && cd nginx-{{ nginx_version }} && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install
    - creates: /usr/local/nginx

vim nginx/service.sls
include:	
  - nginx.install					##调用nginx.install文件

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf

service-nginx:
  file.managed:						##给nginx写一个systemd的启动脚本,模版参照httpd即可
    - name: /usr/lib/systemd/system/nginx.service
    - source: salt://nginx/files/nginx.service

  service.running:					##当nginx.conf被修改时,reload服务
    - name: nginx
    - reload: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf
mkdir nginx/files
vim nginx/files/nginx.service			##nginx的systemd的启动脚本编写
[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
注意:在推送systemd方式操作nginx之前,需要把刚才以脚本方式启动的nginx关闭,不然systemd无法关闭脚本启动的nginx
salt server3 state.sls nginx.service		##给server3以sls的方式推送nginx服务

在这里插入图片描述
在这里插入图片描述

3.静态变量的设定方法
首先是变量的获取
salt server2 grains.items		##列出server上的变量和一些变量的内容
salt server3 grains.ls			##只列处变量的名称
salt server2 grains.item nodename		##单独获取某个变量的信息

在这里插入图片描述

第一种方法:
在minion上修改配置文件
vim /etc/salt/minion
systemctl restart salt-minion
salt server2 grains.item roles		##可以看到server2的roles里多了apache

在这里插入图片描述
在这里插入图片描述

第二种:
在minion的配置文件目录下建立一个文件
cd /etc/salt
systemctl restart salt-minion
salt server3 grains.item roles		##server3的roles里多了nginx
此时可以直接通过规则来与server2和server3通信

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三种:
在master主机上的/srv/salt下建立一个_grains目录
编写一个变量模块,发送给客户端即可

在这里插入图片描述
在这里插入图片描述

4.动态变量的设定
在master的配置文件里打开pillar模块
vim /etc/salt/master
systemctl restart salt-master.service 

在这里插入图片描述

mkdir /srv/pillar
cd /srv/pillar
mkdir web
vim web/vars.sls		##加上判断,当主机名为server2时,属于httpd
{% if grains['fqdn'] == 'server2' %}	
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}

vim top.sls				##因为我们web里加了判断,所以都使用这个规则
base:
  '*':
    - web.vars

发送过去的模块和一些文件模板,在minion的缓存里都可以看到 /var/cache/salt

在这里插入图片描述
在这里插入图片描述

在安装文件中写入jinja模板和变量,以apache为例

在这里插入图片描述

通过pillar模块来写
salt server2 state.sls apache.install

在这里插入图片描述
在这里插入图片描述

直接在模板中修改,一般不建议直接在模板中修改
vim files/httpd.conf		##在文件首行指定端口,但是客户端的配置文件不会有这一行

在这里插入图片描述
在这里插入图片描述

5.keepalived的高可用部署

这是在server2部署apache,server3部署nginx的基础上做的
高可用和负载均衡可以分开部署

mkdir keepalived
cd keepalived

在这里插入图片描述

vim install.sls				##自动安装部署keepalived
install-keepalived:			
  pkg.installed:
    - pkgs:
      - keepalived

  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://keepalived/files/keepalived.conf
    - template: jinja
    - context:
      STATE: {{ pillar['state'] }}
      VRID: {{ pillar['vrid'] }}
      PRIORITY: {{ pillar['priority'] }}

  service.running:
    - name: keepalived
    - watch:
      - file: install-keepalived

vim files/keepalived.conf					##高可用的配置文件
! Configuration File for keepalived

global_defs {
   notification_email {
      root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state {{ STATE }}						##变量直接写在pillar目录里
    interface eth0	
    virtual_router_id {{ VRID }}			##不能与通过一个网络下的别人的vrid相同,否则会引起冲突
    priority {{ PRIORITY }}
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.20.100
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

推送成功后测试:
关闭server2的httpd,查看vip能否漂移,在浏览器能否访问到server3的nginx

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值