Saltstack

Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。Salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.

安装

环境:
server1:172.25.24.1
server2:172.25.24.2
物理机:172.25.24.250

server1
vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.24.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[saltstack]
name=saltstack
baseurl=http://172.25.24.250/saltstack/rhel6
gpgcheck=0yum install -y salt-master
/etc/init.d/salt-master start

server2
vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.24.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[saltstack]
name=saltstack
baseurl=http://172.25.24.250/saltstack/rhel6
gpgcheck=0

yum install -y salt-minion
vim /etc/salt/minion

/etc/init.d/salt-minion start     #启动minion
server1
salt-key -L
salt-key -A       # 添加全部节点 -a指定添加节点

salt server2 test.ping        #这里用的是python模块
salt server2 cmd.run hostname

Salt 自动安装httpd

yum install -y python-setproctitle.x86_64
vim /etc/salt/master

mkdir /srv/salt
/etc/init.d/salt-master restart          #重启master

vim /srv/salt/apache/install.sls        #sls文件有严格语法要求,书写时需注意,可参考官方文档:http://docs.saltstack.cn/topics/yaml/index.html
apache-install:pkg.installed:- pkgs:- httpd- php- php-mysql

salt server2 state.sls apache.install

在server2查看

server1
mkdir /srv/salt/apache/files
vim /srv/salt/apache/install.sls
apache-install:
pkg.installed:- pkgs:- httpd- php- php-mysqlfile.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://apache/files/httpd.conf- mode: 644- user: root- group: root

service.running:
- name: httpd
- enable: True
- watch:
- file: apache-install

server2
scp /etc/httpd/conf/httpd.conf server1:/srv/salt/apache/files

server1
vim /srv/salt/apache/files/httpd.conf       # 修改端口为8080

salt server2 state.sls apache.install

server2
netstat -antlp | grep httpd

Nginx源码编译并启动

cd /srv/salt
mkdir pkgs
mkdir nginx/files -p  #需在/srv/salt/nginx/files/ 中放入nginx源码包,配置文件和启动脚本

vim pkgs/make.sls  #为避免重复,可将依赖包的安装编写在一个文件中
make:
pkg.installed:- pkgs:- gcc- pcre-devel- openssl-devel

vim nginx/install.sls
include:- pkgs.makenginx-install:file.managed:- name: /mnt/nginx-1.14.0.tar.gz- source: salt://nginx/files/nginx-1.14.0.tar.gzcmd.run:- name: cd /mnt && tar zxf nginx-1.14.0.tar.gz && cd nginx-1.14.0 && sed -i.bak 's/#define NGINX_VER          "nginx\/" NGINX_VERSION/#define NGINX_VER          "nginx"/g' src/core/nginx.h && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module &> /dev/null && make &> /dev/null && make install &> /dev/null && cd .. && rm -fr nginx-1.14.0- creates: /usr/local/nginx

vim nginx/service.sls
include:- nginx.install/usr/local/nginx/conf/nginx.conf:file.managed:- source: salt://nginx/files/nginx.conf/etc/init.d/nginx:file.managed:- source: salt://nginx/files/nginx- mode: 755nginx:service.running:- reload: True- watch:- file: /usr/local/nginx/conf/nginx.confvim top.sls
base:"server2":- apache.install"server3":- nginx.service

[root@server1 salt]# salt '*' state.highstate
#由于输出结果太长,截图不方便,所以就复制输出结果了,只要全部成功即可
server2:
      ID: apache-install
Function: pkg.installedResult: TrueComment: All specified packages are already installedStarted: 10:04:34.366456
Duration: 393.858 msChanges:   ID: apache-install
Function: file.managedName: /etc/httpd/conf/httpd.confResult: TrueComment: File /etc/httpd/conf/httpd.conf is in the correct stateStarted: 10:04:34.762244
Duration: 48.336 msChanges:   ID: apache-install
Function: service.runningName: httpdResult: TrueComment: The service httpd is already runningStarted: 10:04:34.811405
Duration: 25.76 msChanges:   Summary for server2Succeeded: 3
Failed:    0Total states run:     3
Total run time: 467.954 ms
server3:
      ID: make
Function: pkg.installedResult: TrueComment: All specified packages are already installedStarted: 10:04:34.472311
Duration: 419.621 msChanges:   ID: nginx-install
Function: file.managedName: /mnt/nginx-1.14.0.tar.gzResult: TrueComment: File /mnt/nginx-1.14.0.tar.gz is in the correct stateStarted: 10:04:34.893663
Duration: 80.859 msChanges:   ID: nginx-install
Function: cmd.runName: cd /mnt && tar zxf nginx-1.14.0.tar.gz && cd nginx-1.14.0 && sed -i.bak 's/#define NGINX_VER          "nginx\/" NGINX_VERSION/#define NGINX_VER          "nginx"/g' src/core/nginx.h && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module &> /dev/null && make &> /dev/null && make install &> /dev/null && cd .. && rm -fr nginx-1.14.0Result: TrueComment: /usr/local/nginx existsStarted: 10:04:34.975302
Duration: 0.391 msChanges:   ID: /usr/local/nginx/conf/nginx.conf
Function: file.managedResult: TrueComment: File /usr/local/nginx/conf/nginx.conf is in the correct stateStarted: 10:04:34.975791
Duration: 36.894 msChanges:   ID: /etc/init.d/nginx
Function: file.managedResult: TrueComment: File /etc/init.d/nginx is in the correct stateStarted: 10:04:35.012823
Duration: 36.426 msChanges:   ID: nginx
Function: service.runningResult: TrueComment: The service nginx is already runningStarted: 10:04:35.050192
Duration: 35.975 msChanges:   Summary for server3
------------
Succeeded: 6
Failed:    0
------------
Total states run:     6
Total run time: 610.166 ms

部署haproxy实现负载均衡

vim haproxy/install.sls
include:- pkgs.make- users.haproxyhaproxy-install:file.managed:- name: /mnt/haproxy-1.6.11.tar.gz- source: salt://haproxy/files/haproxy-1.6.11.tar.gzcmd.run:- name: cd /mnt && tar zxf haproxy-1.6.11.tar.gz && cd haproxy-1.6.11 && make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy &> /dev/null && make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy install &> /dev/null && cd .. && rm -fr haproxy-1.6.11- creates: /usr/local/haproxy/etc/haproxy:file.directory:- mode: 755/usr/sbin/haproxy:file.symlink:- target: /usr/local/haproxy/sbin/haproxyvim haproxy/service.sls
include:- haproxy.install/etc/haproxy/haproxy.cfg:file.managed:- source: salt://haproxy/files/haproxy.cfghaproxy-service:file.managed:- name: /etc/init.d/haproxy- source: salt://haproxy/files/haproxy.init- mode: 755service.running:- name: haproxy- reload: True- watch:- file: /etc/haproxy/haproxy.cfg解压haproxy源码包,在haproxy-1.6.11/examples中将配置文件content-sw-sample.cfg和启动脚本拷到server1的 /srv/salt/haproxy/files中
tar zxf haproxy-1.6.11.tar.gz
cd haproxy-1.6.11/examples/
scp content-sw-sample.cfg server1:/srv/slat/haproxy/files
scp haproxy.init server1:/srv/salt/haproxy/filescd /srv/salt/haproxy/files
mv content-sw-sample.cfg haproxy.cfg
vim haproxy/files/haproxy.cfg
globalmaxconn         10000stats socket    /var/run/haproxy.stat mode 600 level adminlog             127.0.0.1 local0uid             200gid             200chroot          /var/emptydaemondefaultsmode            httplog             globaloption          httplogoption          dontlognullmonitor-uri     /monitorurimaxconn         8000timeout client  30sretries         2option redispatchtimeout connect 5stimeout server  30stimeout queue   30sstats uri       /admin/statsfrontend publicbind            *:80 name cleardefault_backend dynamicbackend dynamicbalance         roundrobinserver          dynsrv1 172.25.24.2:80 check inter 1000server          dynsrv2 172.25.24.3:80 check inter 1000vim top.sls
base:"server1":- haproxy.service"server2":- apache.install"server3":- nginx.servicesalt '*' state.highstate




在server2与server3默认发布页面编辑一个页面


实现负载均衡

{% %} #变量赋值
{{ }} #引用变量

grains

可参考官方文档: http://docs.saltstack.cn/topics/grains/index.html

salt server2 grains.items     #查看所有信息
salt server2 grains.item os   #查看指定信息
salt -G 'os:redhat' cmd.run hostname #所有操作系统为redhat的节点执行hostname命令  -G 匹配

Server2
vim /etc/salt/minion

/etc/init.d/salt-minion restart
Server1
salt server2 grains.item roles

上述方法每次都需要修改主配置文件,不太好,所以可以在minion端编写/etc/salt/grains文件
Server3
vim  /etc/salt/grains
roles: nginx

Server1
salt server3 saltutil.sync_grains      #需要刷新server3 的grains信息才能匹配到
salt server3 grains.item roles

vim /srv/salt/top.sls   #使用grains可以不用指定主机
base:"server1":- haproxy.service"roles:apache":- match: grain- apache.install"roles:nginx":- match: grain- nginx.servicesalt '*' state.highstate      # 没有报错



mkdir /srv/salt/_grains
vim /srv/salt/_grains/grains.py
#!/usr/local/env pythondef grains():grains = {}grains['salt'] = 'stack'return grainssalt server3 saltutil.sync_grains
salt server3 grains.item salt

在Pillar中存储静态数据

可参考官方文档:http://docs.saltstack.cn/topics/pillar/index.html

vim /etc/salt/master

/etc/init.d/salt-master restart
mkdir /srv/pillar
cd /srv/pillar
mkdir web
vim web/webserver.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}vim top.sls
base:'*':- web.webserver

salt '*' saltutil.refresh_pillar   #需要刷新pillar

salt server2 pillar.item webserver

salt -I 'webserver:nginx' test.ping  #匹配webserver为nginx的节点执行ping ,-I 匹配

salt -S 172.25.24.0/24 test.ping  #匹配所有在网段172.25.24.0/24中的节点执行ping

Jinja

可参考官方文档:
http://docs.saltstack.cn/ref/renderers/all/salt.renderers.jinja.html#module-salt.renderers.jinja

vim /srv/salt/apache/files/httpd.conf

vim /srv/salt/apache/install.sls
apache-install:pkg.installed:- pkgs:- httpd- php- php-mysqlfile.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://apache/files/httpd.conf- mode: 644- user: root- group: root- template: jinja- context:port: 8080bind: {{ grains['ipv4'][-1] }}service.running:- name: httpd- enable: True- watch:- file: apache-installsalt server2 state.sls apache.install

netstat -antlp |grep httpd   #server2查看

Jinja在普通文件内使用
  1. vim apache/lib.sls
    {% set port = 80 %}
    {% set bind = ‘172.25.24.2’ %}
    vim apache/files/httpd.conf
    在文件开头添加
    {% from ‘apache/lib.sls’ import bind with context %}
    {% from ‘apache/lib.sls’ import port with context %}

之前在/srv/salt/apache/install.sls文件中也配置了监听地址和端口我们试一下是那个文件生效

salt server2 state.sls apache.install   #没有报错


在server2查看发现是lib.sls文件中定义的变量生效,这是因为install.sls 文件先生效,lib.sls文件后生效覆盖了之前install.sls文件中已生效的变量

2)结合pillar

vim /srv/pillar/apache.sls
{% if grains['fqdn'] == 'server2' %}
port: 80
bind: 172.25.254.2
{% endif %}vim /srv/pillar/top.sls
base:'server2':
- apache

vim apache/install.sls

vim apache/files/httpd.conf          #删除之前在开头添加那两行参数

salt server2 state.sls apache.install        #没有报错

在server2上查看,配置成功

vim /etc/httpd/conf/httpd.conf

将job返回结果存入数据库中

可参考官方文档:http://docs.saltstack.cn/topics/jobs/external_cache.html
关于配置文件修改及salt数据库导入可参考官方文档:
http://docs.saltstack.cn/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql

将job返回结果存入数据库中有两种方式
1.minion发送两个jib返回结果,一个返回master,一个存入数据库
图解:

Server2
vim /etc/salt/minion
mysql.host: ‘172.25.24.1’
mysql.user: ‘salt’
mysql.pass: ‘redhat’
mysql.db: ‘salt’
mysql.port: 3306

yum install -y MySQL-python
/etc/init.d/salt-minion restart

Server1

yum install -y mysql-server
/etc/init.d/mysqld start
vim add.sql      #由于数据库版本较低所以注释第17行,
CREATE DATABASE  `salt`DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci;USE `salt`;--
-- Table structure for table `jids`
--DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (`jid` varchar(255) NOT NULL,`load` mediumtext NOT NULL,UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#CREATE INDEX jid ON jids(jid) USING BTREE;--
-- Table structure for table `salt_returns`
--DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (`fun` varchar(50) NOT NULL,`jid` varchar(255) NOT NULL,`return` mediumtext NOT NULL,`id` varchar(255) NOT NULL,`success` varchar(10) NOT NULL,`full_ret` mediumtext NOT NULL,`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,KEY `id` (`id`),KEY `jid` (`jid`),KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table `salt_events`
--DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;mysql < add.sql
mysql
grant all on salt.* to salt@'%' identified by 'redhat';

salt server2 test.ping --return mysql
mysql
use salt
select * from salt_returns;


2.Minion将job返回结果发给master,然后由master来存入数据库
图解:

vim /etc/salt/master
master_job_cache: mysql
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'redhat'
mysql.db: 'salt'
mysql.port: 3306

yum install -y MySQL-python
mysql
grant all on salt.* to salt@'localhost' identified by 'redhat';

/etc/init.d/salt-master restart
salt server3 cmd.run df   #因为我们对minion端server3 没有进行配置,所以用server3来测试

mysql
use salt
select * from salt_returns;

Saltstack安装部署及实践相关推荐

  1. 自动化运维saltstack 安装部署以及一键部署实现负载均衡

    saltstack介绍 SaltStack是一个服务器基础架构集中化管理平台,SaltStack基于Python语言实现,也是基于C/S架构,结合轻量级消息队列(ZeroMQ)与Python第三方模块 ...

  2. smokeping安装部署最佳实践

    1.1安装smokeping [root@linux-node2 ~]# cat /etc/redhat-release              #查看服务器信息 CentOS release 6. ...

  3. piwik mysql_piwik安装部署最佳实践

    1.piwik介绍 Piwik是一个PHP和MySQL的开放源代码的Web统计软件,它给你一些关于你的网站的实用统计报告,比如网页浏览人数,访问最多的页面,搜索引擎关键词等等. Piwik拥有众多不同 ...

  4. 企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用

    企业运维实战--自动化运维Saltstack(上) 前言 一.Saltstack安装部署 二.sls文件远程执行 saltstack安装httpd并启动 saltstack源码编译安装nginx 启动 ...

  5. 开始构建你的DBaaS:使用zCloud自动化安装部署Oracle和MySQL数据库

    更多精彩,请点击上方蓝字关注我们! 云和恩墨自研的zCloud是目前业内对商业数据库(Oracle)及开源数据库(MySQL.Redis.PostgreSQL)支持都十分完善的数据库云管平台,可以应对 ...

  6. centos 安装mysql5.7_Zabbix 4.2.5 安装部署实践详解

    [导读]云计算背景下,无论是大数据.物联网还是边缘计算,规模化后大量的设备需要保证正常运行,在人员一定的情况下,就需要提高运行维护效率.同时随着智能化被应用在人们生活的方方面面,关联性也越来越紧密,即 ...

  7. 时空大数据实践之GeoWave安装部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 时空大数据实践之GeoWave安装部署实践 GeoWave是由国家地理空间情报局(NGA)与RadiantBlue和Booz ...

  8. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

    原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二) Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 ...

  9. Zabbix 4.2.5 安装部署实践详解

    一.安装 1.安装CentOS操作系统,并配置网络 2.安装Zabbix官方源 rpm -ivh http://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zab ...

最新文章

  1. Oracle快速克隆安装
  2. java求平均值Scanner_Scanner的一些问题
  3. 2019计算机开机号003期,2019年011期福彩中心开机号(附汇总)
  4. 安装JDK 9与使用jshell
  5. 并发编程(二)线程并发工具类
  6. 趣文:如果像招聘程序员那样招聘木匠
  7. stdmove 跟 左键引用 区别_C++ auto和decltype的区别
  8. 台电tbook10s官方固件_台电Tbook10S线刷包_台电Tbook10S刷机包_台电Tbook10S固件包_台电Tbook10S救砖包 - 线刷宝ROM中心...
  9. 阿里云怎么启动mysql_阿里云启动mysql
  10. centos安装udp,tcp的测试工具
  11. SU插件|实时联动Lumion LiveSync for SketchUp免费下载(渲染器与草图大师模型同步更新)
  12. java中长整形怎么定义_java中长整型定义
  13. 关于微擎人人商城互动直播通信服务安装和启动教程记录
  14. 完善保密加密机制(Perfectly-secret Encryption)——无条件安全加密算法
  15. 用纯CSS写一个左右滑动的开关按钮
  16. 解决mac终端放大字体重启又变小了
  17. python爬iptv直播源_GitHub - linnoreading/iptv-m3u: python 爬的直播源数据
  18. 五分钟学会python函数_Python——带你五分钟了解函数式编程与闭包
  19. C++迭代器之'反向迭代器'
  20. R语言操作pdf文档

热门文章

  1. vue路由跳转返回上一级
  2. C语言 兔子繁衍问题
  3. pta-7-5 字符串对比 (15 分)
  4. 做计算机视觉对电脑配置的要求,计算机视觉环境配置
  5. 社区里的志愿者与专业人员
  6. 停车场管理问题——算法与数据结构
  7. 多节点分布式监控 打造全新信息化港口——大连港集团有限公司
  8. 吐槽世界名校:只有我上不了的名校,没有不敢吐槽的名校
  9. UiPath中Assign活动的作用是什么
  10. 2022年初级护师考试复习题及答案