码迷,mamicode.com
首页 > 其他好文 > 详细

saltstack管理集群

时间:2018-08-17 16:28:10      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:本地   apache2   安装软件   创建用户   通信   rem   键值对   directory   空格   

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: ‘L@web1,web2‘ 可以写多台minion主机 other: ‘E@db[0-9] and N@abc‘ and是交集 #other: ‘E@db[0-9] or N@abc‘ 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定义一致 ‘L@web1,web2‘: #过滤目标 - appweb #用于包含appweb.sls ‘E@db\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: #名称和配置文件相对应 ‘L@web1,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: #名称和配置文件相对应 ‘L@web1,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

saltstack管理集群

标签:本地   apache2   安装软件   创建用户   通信   rem   键值对   directory   空格   

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

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!