saltstack管理集群

saltstack
saltstack是基于Python开发的一套C/S架构配置管理工具
底层使用ZeroMQ消息队列pub/sub方式通信

saltstack
两个主要功能:配置管理与远程执行

Saltstack基于C/S架构
服务端称 master
客户端称 minion

Saltstack工作机制
Master和Minion都以守护进程的方式运行
Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
当Minion运行时,他会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证

本地yum
createrepo ./ //在提供yum源的文件目录执行

安装Master
一、服务端装包salt-master
yum -y install salt-master

二、配置文件不需要修改任何
/etc/salt/master

vim /etc/hosts 域名解析
192.168.4.10 ms
192.168.4.20 web1
192.168.4.22 web2
192.168.4.25 db1

三、启动服务:
systemctl start salt-master
systemctl enable salt-master
netstat -lantpu |grep ":4505|:4506"

一、客户端装包salt-minion
yum -y install salt-minion

二、修改配文件
vim /etc/salt/minion
master: sm 指定master域名
id: web1 指定自己的域名

vim /etc/hosts
192.168.4.10 ms
192.168.4.20 web1
192.168.4.22 web2
192.168.4.25 db1

三、起服务
systemctl start salt-minion
systemctl enable salt-minion

Master与Minion互信
Minion上线后先与Master端联系,把自己的pubkey发过去
Master接收Minion的公钥后,互信建立完成

秘钥选项
salt-key -h
-L: 列出密钥
-a: 接受某个密钥
-A: 接受全部密钥
-D: 删除全部密钥
-d: 删除某个密钥

接受所有密钥,完成互信
salt-key -A -y

salt命令使用方法:

格式:salt [options] ‘<target>‘ <function> [arguments]
[options] //选项(修饰目标)
‘<target>‘ //目标(所有minion主机集合)
<function> //函数 (模块.方法)
[arguments] //传递给对方的参数(修饰函数)
function一般采用python的 模块.方法 样式
Minion上运行,可以采用通配符 ‘*’

模块
cp.get_file == scp
file.copy == cp
cmd.run ‘命令‘ //执行命令的模块
test.ping ping命令

选项:
-L 列表
-E 正则
-N 匹配组
-S CIDR
-G 调用grains
-I 调用pillar

salt -L ‘web1‘ cmd.run ‘uptime‘
salt -E "web[0-9]" test.ping

分组
vim /etc/salt/master
nodegroups:
abc: ‘[email protected],web2‘ 可以写多台minion主机
other: ‘[email protected][0-9] and [email protected]‘ and是交集
#other: ‘[email protected][0-9] or [email protected]‘ or是并集
!!!! 前面必须是四个空格

salt -N abc test.ping

/srv/salt 是Master默认的根目录
mkdir -p /srv/salt/oh

向abc组传输文件
salt -N abc cp.get_file salt://oh/ /tmp/co

模块及功能
salt ‘minion域名‘ sys.list_modules 列出所有可用的模块
salt ‘web1‘ sys.list_modules
salt ‘web2‘ sys.list_functions <模块名> 查看模块所有功能
salt ‘db1‘ sys.doc <模块名> 查看模块的用法

例:
salt -N abc file.cop /etc/selinux /tmp/selinux 拷贝任意文件和目录
salt -N abc user.add zhangsna 2000 创建用户

Grains(收集客户端信息)
1、打标签的模块
2、命令用法

3、自带收集客户端信息
4、信息存在客户端
5、是在现有的配置文件修改

YAML规则(Master和Minion的配置文件采用YAML语法)
项目使用"-"来表示
键值对使用":"来表示
YAML使用一个固定的缩进风格表示数据层级结构关系
一般每个缩进级别由两个空格组成
注意不能用tab键
YAML的键值对采用冒号分隔
YAML的键值对对应python的字典

YAML表示形式
name: web

name:
web

字典可以嵌套
hosts:
name: web

列表项使用一个短横杠加一个空格
- web
- dba

列表可以作为一个键值对的value(值)
pkg-http:
- httpd
- php

Grains是saltstack最重要的组件之一
可以获取minion端的基本信息,这些信息一般都是静态的,如CUP、内存、操作系统等
Grains存储在minion本地
管理员可以在minion端进行grains值的修改,如增加、删除等

salt ‘target‘ grains.items 查看grains提供的信息
salt ‘web1‘ grains.itmes
salt ‘target‘ grains.items [key] 查看grains指定的key信息
salt ‘*‘ saltutil.sync_grains 刷新所有配置
salt -G ‘os:RedHat‘ cmd.run ‘uptime‘ 匹配minion端os为RedHat的执行uptime命令

在minion上定义grains
vim /etc/salt/minion
grains:
role: nginx

重启:systemctl restart salt-minion

或在minion上单独定义grains
vim /etc/salt/minion.d/grains.conf 创建grains配置文件
grains:
role: nginx

重启:systemctl restart salt-minion

在master上查看角色信息
salt ‘web1‘ saltutil.sync_grains 刷新所有配置
salt ‘web1‘ grains.item role
salt ‘web1‘ grains.item |grep -i nginx

Pillar组件
pillar也是saltstack最重要的组件之一
作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用
存储在master端,存放需要提供给minion的信息
常用于敏感信息,每个minion只能访问master分配给自己的pillar信息
用于经常动态变化的信息

pillar需要一个pillar_roots来维护pillar的配置
默认pillar_roots为/srv/pillar
pillar_roots在Master配置文件中定义
例:vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar

mkdir /srv/pillar

pillar执行时需要一个名为top.sls的入口文件
通过top.sls文件作为入口,组织其它的pillar文件
sls文件采用YAML格式
例:
cd /srv/pillar
vim top.sls
base: #与pillar_roots定义一致
‘[email protected],web2‘: #过滤目标
- appweb #用于包含appweb.sls
‘[email protected]\d‘: #过滤目标
- appdb #用于包含appdb.sls
- user #用于包含user.sls

vim appdb.sls
dbname: mysql

vim appweb.sls
appname: web
software:
- apache
- nginx

vim user.sls
users:
zhangsan: 1000
lisi: 1001

同步Pillar数据
salt ‘*‘ saltutil.refresh_pillar 刷新所有配置
salt ‘*‘ pillar.items 获取pillar全部数据
salt ‘web‘ pillar.items 获取pillar提供的信息
salt ‘web‘ pillar.items appweb 获取pillar指定的key信息
salt -I ‘appename:web‘ test.ping 使用grains信息分类匹配主机
salt -I ‘appename:web‘ cmd.run ‘uptime‘ 匹配minion端appename为web的执行uptime命令

jinja模板
jinja是基于python的模板引擎
在saltstack中我们使用yaml_jinja渲染器来根据模板生产对应的配置文件
对于不同的操作系统或者不同的情况,通过Jinja可以让配置文件或者操作形成一种模板的编写方法

jinja使用步骤
在state文件中使用"- template: jinja"声明
在模板文件中使用变量"{{name}}"声明,name为变量,自己定义
在state文件中使用"- defautls: name: value"声明

使用变量
变量的基本格式为:{{变量}}
一级字典变量格式为:{{pillar[‘appname‘]}}
二级字典变量格式为:{{pillar[‘flow‘][‘maxconn‘]}}

判断语句
对grains的os值进行判断,根据不同的系统对apache的值进行不同的设定,这样apache就相当于是可以随机应变的值
例:{% if grains[‘os‘] == ‘CentOS‘ %}
apache: httpd
{% elif grains[‘os‘] == ‘Debian‘ %}
apache: apache2
{% endif %}

循环语句
在state中使用pillar数据,值通过jinja来访问pillar即可,多个值通过循环逐个获取
{% for user, uid in pillar,get(‘users‘,{}).items() %}
{{user}}:
user.present:
- uid:{{uid}}
{% endfor %}

states基础
states是satlstack中的配置语言
安装软件包、管理配置文件都需要编写一些states sls文件
states sls使用YAML语法

salt ‘web1‘ sys.list_state_modules 查看所有States的模块
salt ‘web1‘ sys.list_state_functions sysctl 查看该模块功能
salt ‘web1‘ sys.state_doc sysctl.present 查看该模块的用法

file模块
file.managed: 文件同步模块
file.append: 文件追加模块
file.directory: 创建文件模块

例1:
vim /etc/salt/master
file_roots:
base:
- /srv/base
dev:
- /srv/dev
prod:
- /srv/prod

cd /srv/
mkdir base dev prod

重启服务:systemctl restart salt-master.service

cd base/
vim top.sls
base: #名称和配置文件相对应
‘*‘: #minion域名*代表所有
- dns #和下面文件相对应

vim dns.sls
abc: #名称
file.managed: 文件同步模块
- name: /etc/resolv.conf 同步被参考文件的内容的路径
- source: salt://files/dns.conf 被参考文件路径
- user: root
- group: root
- mode: 644
- template: jinja
- defaules:
DNS: 192.168.4.100

mkdir /srv/base/files
cd /srv/base/files
touch dns.conf

cat dns.conf
nameserver {{ DNS }}

检测:
salt ‘*‘ state.highstate saltenv=base test=true
执行:
salt ‘*‘ state.highstate saltenv=base test=false

例2:
cd /srv/base/
vim top.sls
base: #名称和配置文件相对应
‘[email protected],wen2‘: #minion域名列表
- tex #和下面文件相对应

vim tex.sls
abc: #名称
file.append: #文件追加模块
- name: /etc/resolv.conf #追加到的文件路径
- text:
- DNS1:9.9.9.9 #(比上一级多两个空格),追加的内容

检测:
salt ‘*‘ state.highstate saltenv=base test=true
执行:
salt ‘*‘ state.highstate saltenv=base test=false

例3:
cd /srv/base/
vim top.sls
base: #名称和配置文件相对应
‘*‘: #minion域名*代表所有
- set #和下面文件相对应
vim ste.sls
directory: #名称
file.directory: 创建文件模块
- name: /opt/rpm_pkgs 创建的文件名
- user: root
- group: root
- dri_mode: 755 文件目录的权限
- file_mode: 644 文件的权限

检测:
salt ‘*‘ state.highstate saltenv=base test=true
执行:
salt ‘*‘ state.highstate saltenv=base test=false

cmd模块
cmd模块强制给minion执行命令
可以限制当某个条件满足时才执行命令
也可以限制当某个条件不满足时才执行命令
cmd.run: 命令模块
unless: 当unless条件不满足时,需要执行令
onlyif: 当onlyid条件满足时,需要执行令

例:
cd /srv/base/
vim top.sls
base: #名称和配置文件相对应
‘*‘: #minion域名*代表所有
- est #和下面文件相对应

vim est.sls
useradd zhangsan: #创建用户
cmd.run:
- unless: idd zhangsan #判断用户不存在

echo 123456 |passwd --stdin zhangsan: #给用户改密码
cmd.run:
- onlyif: id zhangsan #判断用户存在

检测:
salt ‘*‘ state.highstate saltenv=base test=true
执行:
salt ‘*‘ state.highstate saltenv=base test=false

系统初始化
可以在base环境下创建一个init目录,将系统初始化配置的sls文件均存放在init目录下,称其为“初始化模块”

1.配置DNS
vim /srv/salt/base/init/dns.sls
resolv_file:
file.managed:
- source: salt://init/files/resolv.conf
- user: root
- group: root
- mode: 644

2.配置History记录时间
vim /srv/salt/base/init/history.sls
profile_file: #名称
file.append: #追加模块
- name: /etc/profile #追加的文件路径
- text:
- export HISTTIMEFORMAT="%F %T" #追加的内容

3.配置内核参数优化
saltstack提供了sysctl状态模块用来进行内核参数的配置
vim /srv/salt/base/init/sysctl.sls
net.ipv4.ip_forward: #为值1开启路由
sysctl.present:
- value: 1 #值

4.创建用户
vim /srv/salt/base/init/user.sls
usreadd bob:
cmd.run:
- unless: id bob
echo 123456 |passwd --stdin bob:
cmd.run:
- onlyif: id bob

pkg模块
pkg模块可以实现软件包管理
管理的软件包包括红帽RPM包和Ubuntu的deb包等
主要方法有:
pkg.installed: 安装软件包
pkg.latest: 保持软件包最新版本
pkg.remove: 卸载软件包
pkg.purge: 下载软件包,删除配置文件
require条件:只有满足条件才执行令

service模块
软件部署完毕后,需要确保服务处于运行状态,并且能够实现开机自启。
service.running: 确保服务处于运行状态
service.enabled: 开机自启
service.disabled: 开机不自启
service.dead: 确保服务处于未运行状态
watch:服务如果能够正常启动,需要确保存在配置文件,设置如果配置文件存在,才启动服务。

例:在minion上域名为web1,web2的主机上安装httpd软件包,并修改侦听端口为8080.
cd /srv/salt/prod
mkdir files

vim top.sls
prod: #名称和配置文件相对应
‘[email protected],web2‘ #minion域名
- install #和下面文件相对应
- etc #和下面文件相对应
- service #和下面文件相对应

vim install.sls
insta: #名称
pkg.installed: #安装软件包模块
- name: httpd #软件包名

vim etc.sls
etchttp: #名称
file.managed: #同步模块
- name: /etc/httpd/conf/httpd.conf #同步被参考文件的内容的路径
- source: salt://files/httpd.conf #被参考文件路径
- template: jinja #使用jinja模块
- defaults:
PORT: 8080
- require: #require条件
- pkg: insta #pkg模块定义的函数名称

cp /etc/httpd/conf/httpd.conf /srv/salt/prod/files/

vim /srv/salt/prod/files/httpd.conf
............
Listen {{ PORT }} #使用jinja变量
..........

vim service.sls
servi: #名称
service.running: #运行模块
- name: httpd #运行的服务名
- enable: true
- restart: true
- watch: #watch条件
- file: etchttp #file模块定义的函数名称

检测:
salt ‘*‘ state.highstate saltenv=prod test=true
执行:
salt ‘*‘ state.highstate saltenv=prod

原文地址:http://blog.51cto.com/13399294/2161036

时间: 2024-10-13 22:35:31

saltstack管理集群的相关文章

管理集群中的 crs 管理员

 管理集群中的 crs 管理员 oracle Managing CRS Administrators in the Cluster Use the following commands to manage CRS Administrators in the cluster: The CRS Administrator is a predefined administrator role in Oracle Clusterware that controls the creation of s

34_创建Redis集群 管理集群

版本:4.0.8 环境准备 准备 6台(51-56) redis服务器  以默认配置运行redis服务即可 一.创建Redis集群1.启用集群功能( 51-56 都要配置)]# netstat -antupl |grep :6379(要有东西)]# /etc/init.d/redis_6379 stop *一一对应,以52为例*]# vim /etc/redis/6379.conf70 bind 192.168.4.5293 port 6352815 cluster-enabled yes823

mesos+mrathon+zookeeper的docker管理集群亲手搭建实例(详细)

1:规划(5master+3slave) master: 10.64.5.184 ---master1 10.64.5.185 ---master2 10.64.5.186 ---master3 10.64.5.187 ---master4 10.64.5.188 ---master5 slave: 10.64.5.170 ---slave1 10.64.5.172 ---slave2 10.64.5.167 ---slave3 2:配置master节点     (1)关闭防火墙 master1

搭建zookeeper管理集群

Zookeeper集群 一.实验环境 Zookeeper集群环境安装过程详解 Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务--分布式同步(Distributed Synchronization).命名服务(Naming Service).集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务.ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一

K8S使用Statefulset管理集群pod模式(7)

上次我们说到了deployment来管理pod容器的副本数量,如果挂掉之后容器再次启动就可以了,但是如果要是启动的是mysql集群.zookeeper集群.etcd这种集群,里面都有id号,这种有关联的,如果一旦挂掉之后,在启动之后呢,集群id是否会变化呢?答案是肯定会变的.那有没有另外的一种控制器模式吗?当然k8s会给我吗提供的.[statefulset]那什么场景需要使用StatefulSet呢?官方给出的建议是,如果你部署的应用满足以下一个或多个部署需求,则建议使用StatefulSet

mesos+marathon+zookeeper的docker管理集群亲手搭建实例(环境Centos6.8)

资源:3台centos6.8虚拟机 4cpu 8G内存 ip 10.19.54.111-113 1.System Requirements及安装环境配置并关闭防火墙与SELinux For full support of process isolation under Linux a recent kernel >=3.10 is required. 由于我使用的centos6.8,所以要升级内核(http://www.cnblogs.com/zhangmingcheng/p/6046274.h

saltstack搭建集群详解1

使用saltstack完成这个架构图: 配置思路 (1).系统初始化 Base环境下存放所有系统都要执行的状态,调整内核参数,dns,装zabbix-agent等 (2).功能模块(如:上面的haproxy) 如上面的haproxy nginx php memcached等服务,每一个服务都建一个目录,把每一个服务要执行的状态都放在这个目录下. (3).业务模块 以业务为单位,一个业务里可能包含haproxy,nginx,php等,业务需要什么服务就把功能模块里对应的服务include 1.编辑

saltstack搭建集群3

系统初始化模块--------------zabbix-agent 在配置文件里设置pillar路径 [[email protected] init]# vim /etc/salt/master pillar_roots: base: - /srv/pillar/base [[email protected] init]# /etc/init.d/salt-master restart 在pillar里建立top.sls和zabbix.sls [[email protected] init]#

saltstack搭建集群2

功能模块-----keepalived模块 写之前先找一台主机源码安装测试 http://www.keepalived.org/software/keepalived-1.2.19.tar.gz [[email protected] tools]# tar xf keepalived-1.2.19.tar.gz [[email protected] tools]# cd keepalived-1.2.19 [[email protected] keepalived-1.2.19]# ./conf