1.saltstack概念及原理
SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境。自动化运维软件,自动化配置系统
SaltStack作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行。实现这一点,此时Salt
Master可以发出命令,如salt '*' cmd.run 'ls -l /'。没有UI界面
Saltstack是基于python开发的一套C/S架构配置管理工具;一种全新的基础设施管理方式,部署轻松
SaltStack三大功能:
●远程执行
●配置管理
●云管理
saltstack的三中运行模式:
Local | 本地 |
Master/minion | 传统运行方式(server端跟agent端) |
Salt SSH | SSH |
saltstack内的组件:
中央管理系统。此系统用于将命令和配置发送到在受管系统上运行的Salt minion。
管理系统。该系统运行Salt minion,它从Salt master接收命令和配置。slave要向master发起授权的请求,master上用 salt-key -L查看
从命令行针对一个或多个受管系统执行的临时命令。对...有用:
- 实时监控,状态和库存
- 一次性命令和脚本
- 部署关键更新
系统配置的声明性或命令式表示
系统变量。Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。您还可以为任何系统定义自定义颗粒。
2.环境要求
需要两个干净的6.5的虚拟机
查看虚拟机的信息的命令: qemu-img info 虚拟机名
在真机上:
cd /var/lib/libvirt/
ls
qemu-img info new.qcow2 ##查看虚拟机的信息
qemu-img create -f qcow2 -b new.qcow2
wf1
qemu-img create -f qcow2 -b new.qcow2
wf2
virt-manager
创建新的虚拟机 wf1
wf2
注意:虚拟机的解析
cat /etc/redhat-release ##查看系统版本
uname -r ##查看系统内核版本
getenforce ##查看selinux的状态,selinux必须是关闭的
/etc/init.d/iptables stop ##关闭防火墙
3.saltstack的配置
在真机上:
lftp 172.25.254.250
cd pub/docs/saltstack
ls
mirror rhel6 ##将rhel6的文件放在http的默认发布目录上
mv rhel6/ /var/www/html/
systemctl start httpd.service
在wf1,2,3上: 需要重新配置yum源
vim /etc/yum.repos.d/rhel-source.repo
[saltstack]
name=saltstack
baseurl=http://172.25.8.250/rhel6
gpgcheck=0
yum repolist
在wf1上(master):
yum install -y salt-master
cd /etc/salt
ls
vim master ##master端编辑master的文件,不过这个没有要编辑的
/etc/init.d/salt-master start
在wf2,3上(slave):
yum install -y salt-minion
chkconfig salt-minion on ##可以设置开机自启,设不设置都可以
cd /etc/salt/
ls
vim minion ##minion端编辑minion的文件
master: 172.25.8.1 ##设置master的ip,指定master主机,修改配置文件之后才可以开启minion的服务
/etc/init.d/salt-minion start
必要的时候可以增加主机名的解析:
vim /etc/hosts
172.25.8.1 server1
在slave上面可以用来测试,master和slave之间时候网络连通:
ping 172.25.8.1 或者 ping server1
在wf1上:salt远程执行命令,此处的命令相当于是秘钥认证,如果没有被授权的话,主机会显示在 Unaccepted Keys里面
salt-key -L ##查看接受的和没有被授权的请求
salt-key -A ##批量处理没有被处理的没有授权的请求
salt-key -a ##处理某一个为授权的请求
在认证之前,查看salt的结构:在指定的目录下面 /etc/salt/pki/master 下
可以看到没有认证授权之前的,申请授权的主机在树状结构的 minions_pre 里面
接下来开始授权:
现在是授权之后:
之前的需要被授权的主机的信息发生了改变
并且在客户端相应的目录下面,/etc/salt/pki/minion 下面生成了 master 的秘钥 minion_master.pub
测试:保持长链接
-在wf1上操作,输入命令:
-salt wf2/3 test.ping
##salt命令 test.ping的含义是,test是一个模块,ping是模块内的方法
-salt wf2/3 cmd.run hostname
##使用cmd.run直接调用远程shell命令(功能同上),远程主机上面调用hostname这个命令
===============================================================================
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
lsof -i 用以显示符合条件的进程情况
lsof -i :4505
===============================================================================
4.saltstack的配置管理
YAML 配置服务需要开启base默认的目录
===============================================================================
默认的SLS文件的renderer是YAML renderer。YAML是一个有很多强大特性的标记性语言。salt使用了一个YAML的小型子集,映射非常常用的数据,像列表和字典
pki加密
base目录:用来部署服务使用,需要调用很多的模块,没有base目录需要自己建立
================================================================================
在wf1上:
vim master
file_roots: ##开启base的默认目录,不能将注释去掉,需要自己按照格式重新写,后面的salt的服务的自动化部署和sls配置的文件都会默认从该路径下读取
base:
- /srv/salt/
mkdir /srv/salt
/etc/init.d/salt-master restart
cd /srv/salt
mkdir apache
vim install.sls ##进入到/srv/salt/目录下创建,python语法注意空格缩进,不能用tab键
http:
软件包名称
pkg.installed
salt wf2 state.sls apache.install ##salt调用客户端的命令 wf2客户端名称 state.sls调用sls这个文件 在base下的
在wf2上:
yum install tree -y
cd /var/cache/salt
tree .
在wf1上:
vim /srv/salt/apache/install.sls
http:
软件包名称
pkg.installed ##安装
apache: ##软件名称不能重复,所以将HTTP写成apache
service.running: ##执行 开启服务
- name: httpd
- enable: True
salt wf2 state.sls
apache.install
在wf2上:
ps ax
##查看进程信息,是否有开启服务
chkconfig --list httpd
在wf1上:
vim /srv/salt/apache/install.sls
httpd:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
service.running:
- name: httpd
- enable: True
注意:但是如果修改wf2上的http的配置文件的话,wf1将命令推过来的时候,就会将更改的配置文件覆盖掉,就相当于没有更改。所以需要将wf2上的httpde配置文件scp到wf1的一个目录当中,并且监控,如果修改过的话,就要重启服务
在wf1上:
cd /srv/salt/apache
mkidr files
在wf2上:
scp /etc/httpd/conf/httpd.conf
root@172.25.8.1:/srv/salt/apache/files ##将配置文件发送到wf1(master)上,并建立连接。
在wf1上:
cd /srv/salt/apache
vim install.sls
httpd:
pkg.installed: ##pkg.install方式:制定主机安装软件
- pkgs: ##需要安装的安装包有哪些?下面行进行定义
- httpd
- php
- php-mysql
service.running:
- name: httpd
- enable: True
- watch: ##监控命令
- file: /etc/httpd/conf/httpd.conf ##监控配置文件,如果修改,就重启服务
/etc/httpd/conf/httpd.conf:
file.managed: ##文件管理(文件同步操作)
- source: salt://apache/files/httpd.conf
- mode: 644
- user: root
- group: root
salt wf2 state.sls
apache.install
测试:
在wf1上:
cd /srv/salt/apache
cd files/
vim httpd.conf
Listen 8080 ##将端口改成8080
salt wf2 state.sls
apache.install
在wf2上:
netstat -antlp ##可以看到http的端口改成了8080
5.开启服务 和 安装 这两个功能分开进行,编写两个sls文件
cd /srv/salt/apache
ls
vim install.sls ##这是原来上面编写的配置文件
httpd: ##文件的名字
pkg.installed: ##这个是安装模块,类型及其动作
- pkgs:
- httpd
- php
- php-mysql
file.managed: ##文件管理(文件同步操作)
- name: /etc/httpd/conf/httpd.conf
- source:
salt://apache/files/httpd.conf
- mode: 644
- user: root
- group: root
更改以后的文件的内容如下:
vim service.sls ##这里是启动服务的文件
include: ##这里表示,在开启服务之前,先检测是否安装服务;如果没有安装服务,需要先安装。
- apache.install ##调用的模块是:apache.install
apache-service:
service.running: ##如果安装了服务,那么就直接开启服务
- name: httpd
- enable: True
- watch:
- file: apache-install
salt wf2 state.sls apache.install
6.在wf3上配置nginx服务 并将开启和安装分开进行,编写两个sls文件
(1).将nginx的服务器的配置文件scp到wf1上
scp /usr/local/nginx/conf/nginx.conf
root@172.25.8.1:/srv/salt/nginx/files
##如果配置文件更改的话,将配置文件也发到虚拟机上去,然后覆盖原来的配置文件,注意,如果要更改配置文件的话,需要在master上更改,如果在minion上更改的话,在master执行salt操作的话,文件会被salt上的文件覆盖掉,更改的内容也就不见了。所以在minion上面修改配置文件是没有用的。当master一推,就会将原来的配置文件的内容覆盖掉。
(2)将nginx的安装包放在files目录下
cd /srv/salt/
mkdir nginx
mkdir nginx/files
mv nginx-1.14.0.tar.gz
nginx/files
(3)将nginx的配置文件scp到wf1的nginx的files目录下
scp nginx.conf
root@172.25.254.1:/srv/salt/nginx/files
(4)将开启服务的命令放到另一个sls的文件里
vim install.sls ##配置如下图,pkgs里面需要安装的,都是在源码编译nginx的时候,解决相应的依赖性的安装包
文件内的 file.managed那个模块里面的意思是: - name: 就是将即将要推出去的服务的压缩包,放在那个主机的 /mnt 目录下。 - source:就是这个压缩包,在本机的(推文件的,推服务的master)salt的默认的路径下。 - mode:给文件的权限,如644,755等。
==================================================================================
注意:也可以将安装全部放在一个文件中,只需要调用就好了
cd /srv/salt
mkdir pkgs
cd pkgs
vim make.sls
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel
==================================================================================
salt wf3 state.sls nginx.install
(5)安装nginx的发布目录
用已经编译好的nginx的发布的文件,放到默认发布目录下就好
mv nginx /etc/init.d
cd /etc/init.d
chmod +x nginx
测试一下,看发布文件能否使用:
/etc/init.d/nginx start
curl localhost ##出现nginx的页面就代表可以使用
/etc/init.d/nginx stop
scp nginx
root@172.25.254.1:/srv/salt/nginx/files
在wf3上: ps ax ##查看执行的进程
7.高级推 (一次推很多的服务器上的不同的服务)
top.sls:作为“最高同步”操作的入口文件,执行“最高同步”操作时,将从此sls文件中获取状态对minion进行同步
cd /srv/salt
ls
vim top.sls ##高级推需要读取的项目的名称
base:
"wf2":
- apache.service
"wf3":
- nginx.install
salt '*' state.highstate
salt '*' test.ping ## * 匹配的是salt里面的所有的远程主机
8.在wf1上下载salt-minion配置和wf2,3一样 让wf1做haproxy的服务器
用作负载均衡
salt-key -L
salt-key -a wf1
salt-key -L
cd /srv/salt/
ls
mkdir haproxy
cd haproxy/
mkdir files ##将haproxy的压缩包放在files文件中。
vim install.sls
vim service.sls
salt wf1 state.sls
haproxy.install
cd ..
cd haproxy-1.6.11/examples
ls
cp haproxy.init content-sw-sample.cfg /srv/salt/haproxy/files/
cd /srv/salt/haproxy/files
mv content-sw-sample.cfg
haproxy.cfg
mkdir users
cd users/
vim install.sls
haproxy-group:
group.present:
- name: haproxy
- group: 200
haproxy-user: ##自动创建用户的函数方法
user.present:
- name: haproxy
- uid: 200
- gid: 200
- home: /usr/local/haproxy
- shell: /sbin/nologin
- createhome: False
cd ..
cd haproxy/
vim service.sls
- users.install
编辑haproxy的配置文件:如下所示:
cd files/
pwd
/srv/salt/haproxy/files
ls
haproxy.cfg
vim haproxy.cfg
stats uri /status
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80
default_backend app
backend server
balance roundrobin
server server1 172.25.8.2:80 check
server server2 172.25.8.3:80 check
vim top.sls
"wf1":
- haproxy.install
在 wf2/3 上编写http的默认发布文件:
cd /var/www/html/
ls
vim index.html
server2/server3
在网页上测试,会出现轮询的效果:
172.25.18.1
9.配置 Salltstack 的高可用
(1)在 wf1 的/srv/salt目录下,建立keepalived目录,进到目录里边编辑安装keepalived的sls推送文件