1.配置管理

1.1 puppet

  • /'pʌpɪt/  木偶;傀儡;受他人操纵的人

使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。

问题:

学习曲线非常陡峭

centos上装个puppet,Ruby环境让人头大

puppet没有远程执行功能(执行100台服务器命令),只能借助Func第三方工具

Func烂,真烂,难用。

1.2 Ansible

1. 优点:

出名原因,被红帽收购,redhat所有东西会附属ansible的自动化部署

轻量级,容易使用,不需要装agent, (salt 需要装minion,也可以不用装,直接使用ssh)

python开发

2.缺点:

没有agent,大规模环境下,通过ssh(串行,10个10个跑)会很慢,(salt是并行的)

3.国内趋势

  Ansible + SaltStack(主)

Ansible  200台机器  并发50  CPU负载80 不停报错

2000台就是噩梦

1.3 SaltStack

强化版的FUNC (远程执行),弱化版的Puppet

1. 传统方法:

  1万台服务器

  ssh循环登陆节点列表并执行一堆命令

  容易出错,效率低下,网络安全,ssh密钥和命令执行权限

2. 来源

  作者住在,salt盐湖城

各种stack很火,openstack

3. 四大功能

       ()远程执行 Remote Execution
      1w台机器同时执行命令 ()配置(状态)管理 Configuration Managemet
      修改配置文件,重新load,怎么干,装什么服务   ()事件驱动 Event-Driven Infrastructure
      epoll 被动的,监听描述符,我centos挂了,事件发到队列,salt执行某些操作 ()云管理 Salt Cloud
      管理所有的公有云和私有云,不用学习各种云的API,salt已经封装好了

4.所有东西可以定制

描述语言,模板语言,web,所有centos执行命令,自己写状态写脚本,官方东西太多了,api

5. 组件 SaltStack Components

 Salt Master
Salt Minions
为什么叫奴才?
认证的机制: 地主同意,奴才才能来地主家干活
奴才认你为地主,你才是地主 Execution Modules 执行模块
Formulas (States) 状态
.....

2.saltstack安装

安装官网:https://repo.saltstack.com

master端 192.168.194.131

minion端  192.168.194.132

2.1 安装centos,初始化

1.关闭SELinux,iptables。

关闭Linux中的iptables,firewalld,SELINUX  https://blog.csdn.net/zha6476003/article/details/89425811

    注:生成环境需要iptables开启  master端4505、4506端口, 
#关闭firewalld,禁止开机启动
[root@VM_0_13_centos var]# systemctl stop firewalld
[root@VM_0_13_centos var]# systemctl disable firewalld.service #关闭iptables
[root@VM_0_13_centos var]# systemctl stop iptables 

2.修改网卡配置,去掉UUID MAC等(克隆机器问题)

解决CentOS克隆虚拟机无法上网问题(UUID、MAC、IP)https://blog.csdn.net/qq_35428201/article/details/81435679

重新生成网卡

https://blog.csdn.net/weixin_42291597/article/details/83690681

[root@linux-node1 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

[root@linux-node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
删除或注释HWADDR和UUID两行内容,修改IP

3.配置hostname,配置hosts

为什么需要修改hostname?

其实需要在hosts里面配置,然后根据dns服务器查找 minion,可以更快的找到
根据域名链接,更快更好

[root@localhost ~]# hostname linux-node1.example.com
[root@localhost ~]# hostname linux-node2.example.com [root@localhost ~]# cat /etc/sysconfig/network # 重启后生效
# Created by anaconda
NETWORKING=yes
HOSTNAME=linux-node1.example.com [root@localhost ~]# cat /etc/sysconfig/network # 重启后生效
# Created by anaconda
NETWORKING=yes
HOSTNAME=linux-node2.example.com
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.194.131 linux-node1.example.com linux-node1
192.168.194.132 linux-node2.example.com linux-node2

2.2、安装不同版本

https://repo.saltstack.com/2018.3.html#rhel

测试环境  python3+ centos7 + salt 2019.2.1

https://mirrors.aliyun.com/saltstack/2019.2.html#rhel

具体直接下载,该版本对应的repo

2.2 安装Repo,salt

why?

redhat Python 3 support requires that EPEL be previously installed

1、安装repo (SaltStack repository and key)   (有待商榷,请看上面)

方法1:

[root@localhost ~]# yum install https://repo.saltstack.com/py3/redhat/salt-ppy3-repo-latest.el7.noarch.rpm

方法2:aliyun镜像  https://mirrors.aliyun.com

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/repo/epel-7.repo

方法3:安装2019版本

[root@host---- yum-root-MoFHI0]# cat /etc/yum.repos.d/saltstack.repo
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=
gpgcheck=

作业:

cobbler同步它们的yum仓库到自己的电脑?

saltstack有自己的yum源 https://repo.saltstack.com

zabbix有自己的yum源  https://repo.zabbix.com

2.更新缓存

[root@localhost ~]# yum clean expire-cache

3.安装salt

master端

[root@localhost ~]# yum install salt-master -y
[root@localhost ~]# yum install salt-minion -y

minion端

[root@localhost ~]# yum install salt-minion -y

4.启动salt-master

只在,master端

[root@localhost ~]# systemctl restart salt-master

  

3. 运行Salt

1.启动minion

(1)minion配置文件

[root@localhost ~]# vim /etc/salt/minion

配置master的ip

配置id

id:默认通过python的方法socket.getfqdn()去获取fqdn名。所以要求设置好主机名并能解析。也可以使用IP地址,看业务需求。

冒号有空格

多一个空格都报错

(2)启动minion

[root@localhost ~]# systemctl restart salt-minion

2. 公钥管理

可以直接在master配置文件,打开auto_accept开关,如果minion比较多的话

1. 如何认证的?

  

认证机制

已经告诉minion了,master是谁

现在需要master同意接受minion

安全问题

通信之前进行认证,公钥私钥(类同与ssh认证)

(1)查看状态

[root@linux-node1 ~]# salt-key --help
-a ACCEPT # 支持通配符
-A --accept-all

(2)接受minion

(3)公钥交互的过程

master端,把能控制的主机放在minion

minion端,得到master的公钥

  

AES加密的

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。

2.1 minion_id的生成过程

https://my.oschina.net/u/877567/blog/199136

2.2 如何修改id

1.停止minion

2.master端 salt-key -d 删除id

3.minion删除pki  (实质删除  rm -rf pki/minion)

4. 删除minion_id

5. 修改minion的id,再启动,再在salt-master操作

需求:

多个匹配时候,如何以ip进行匹配,执行salt命令

根据的是 id 进行匹配的

现在将id的值由hostname改为ip地址

操作

# .停止minion
[root@host---- salt]# pwd
/etc/salt
[root@host---- salt]# systemctl stop salt-minion # .master删除minion
[root@host---- ]# salt-key -d host----* # .minion删除pki、缓存的minion_id
[root@host---- salt]# rm -rf pki/ # 实质删除 rm -rf pki/minion
[root@host---- salt]# rm -rf minion_id # .minion修改id
[root@host-192-168-23-44 salt]# vim /etc/salt/minion

# .重启minion,在master重新操作
[root@host---- salt]# systemctl restart salt-minion
[root@host---- salt]# systemctl status salt-minion -l

3.远程执行

salt 命令

*是通配符,转义了就行

[root@linux-node1 ~]# salt '*' test.ping
[root@linux-node1 ~]# salt \* test.ping
[root@linux-node1 ~]# salt "*" test.ping

* 匹配了所有了目标
test 模块
ping 模块的方法
ssh中Ping是ICMP
这里的ping,是master给minion发了一个包,能收到返回True
‘uptime’ 方法的参数
[root@linux-node1 ~]# salt '*' cmd.run 'uptime'
linux-node1.example.com:
:: up :, user, load average: 0.01, 0.04, 0.05
linux-node2.example.com:
:: up :, user, load average: 0.00, 0.01, 0.05
[root@linux-node1 ~]# salt '*' cmd.run 'free -m'
linux-node2.example.com:
total used free shared buff/cache available
Mem:
Swap:
linux-node1.example.com:
total used free shared buff/cache available
Mem:

4.通信机制

(1)端口开放

minion不需要监听端口,minion只需要连到master上。

master端:4505,4506。

(2)ZeroMQ  http://zeromq.org

官方文档:https://docs.saltstack.com/en/latest/topics/development/topology.html

底层通信利用了ZeroMQ

(1)发送与订阅 (订报纸,并行)

所有minion会连接到4505,发送命令。所有主机同时执行,同时返回

(2)4506接受返回,请求与相应。

5. 配置管理

https://docs.saltstack.com/en/latest/topics/yaml/index.html

1.YAML语法

  

语法规则:3个基本规则
缩进2个空格
冒号后面必有空格:除了路径与结尾
短横线后1个空格

     

2. 状态配置文件放哪?

[root@host-192-168-23-39 master]# vim /etc/salt/master

# base  # test测试环境  # 开发环境

3. 配置master

[root@host-192-168-23-39 master]# vim /etc/salt/master

[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev,test,prod}
[root@linux-node1 ~]# tree /srv/salt/
/srv/salt/
├── base
├── dev
├── prod
└── test

# 每次修改master配置文件必须重启master

[root@linux-node1 ~]# systemctl restart salt-master

4. 配置Apache的sls

[root@linux-node1 base]# tree
.
└── web
└── apache.sls directory, file
[root@linux-node1 base]# cd web/
[root@linux-node1 web]# cat apache.sls
apache-install:
pkg.installed:
- name: httpd apache-service:
service.running:
- name: httpd
- enable: True

远程执行模块,配置管理模块

apache-install:
pkg.installed: # 不同系统,包安装命令
- name: httpd apache-service: # id,不能重复
service.running: # 状态模块:方法
- name: httpd #参数 # name包的名称:
- enable: True # enable 开机启动:

5. 执行命令

[root@linux-node1 web]# salt 'linux-node2.example.com' state.sls web.apache saltenv=prod

[root@linux-node1 web]# salt 'linux-node2.example.com' state.sls web.apache
# 默认在base环境下
# 对应 apache.sls中的各个参数

test下,http服务已经安装,启动了

  

minion关闭httpd,在来一遍

[root@linux-node2 ~]# systemctl stop httpd

[root@linux-node1 web]# salt 'linux-node2.example.com' state.sls web.apache

linux-node2.example.com:
----------
ID: apache-install
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: ::32.264555
Duration: 627.531 ms
Changes:
----------
ID: apache-service
Function: service.running
Name: httpd
Result: True
Comment: Service httpd is already enabled, and is running
Started: ::32.892558
Duration: 413.061 ms
Changes:
----------
httpd:
True Summary
------------
Succeeded: (changed=)
Failed:
------------
Total states run:

6. 高级配置 top.sls

上述都是不自动化的,自动化是:我说干活,你们就干活

(1)top.file    # 默认在base环境下

[root@linux-node1 ~]# vim /etc/salt/master

(2)编写top.sls

[root@linux-node1 base]# pwd
/srv/salt/base
[root@linux-node1 base]# cat top.sls
base:
'*':
- web.apache

base:     # 环境
'*': # 所有节点执行这个状态
- web.apache # 执行web目录下的apache.sls

(3)执行命令,高级状态 highstate

[root@linux-node1 base]# salt '*' state.highstate

* 通知谁,所有主机干活,在所有节点上执行这个highstate

topfile里面*是指定哪些主机节点干活。

 

(4)test

100台机器,先在1个上面跑一下,再在其他上面跑

[root@linux-node1 base]# salt '*' state.highstate test=True   # 不是真的执行,如何执行的话,会发生什么

先关闭node2的 httpd

4. 总结

1.出现问题

Question1:

只有一个秘钥

只出现一个主机

  

解决方法: 其他机器的minion配置文件有错误,注意空格,冒号

Question2:

[root@linux-node1 ~]# systemctl status salt-minion
Jul :: linux-node1.example.com salt-minion[]: [ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for seconds before attempting to re-authenticate salt master已缓存此节点的公钥,此salt minion将等待10秒,然后再尝试重新验证。

网上参考:

    https://www.cnblogs.com/phennry/p/5419451.html

    https://www.cnblogs.com/phennry/p/5419451.html

    https://blog.csdn.net/xiegh2014/article/details/53114257

    https://blog.51cto.com/molewan/2060851

解决办法:

请务必关闭selinux和iptables

2. 小提醒

知识获取廉价,文档获取廉价,你抄我我抄你

我的时间很贵

培训的价值,用更短的时间学会这个东西

01_3大配置管理工具、SaltStack安装、修改minion_id的更多相关文章

  1. 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群

    首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...

  2. 自动化运维工具SaltStack安装配置

    SaltStack是一种全新的基础设置管理方式,部署轻松,在几分钟内可运作起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯.通过部署SaltStack环境,我们可以在成千上万台服务 ...

  3. 在CentOS 6.4上安装Puppet配置管理工具

    在CentOS 6.4上安装Puppet配置管理工具 linux, puppetAdd comments 五052013 上篇说了下在ubuntu12.04上安装puppet,安装的版本为puppet ...

  4. saltstack安装与配置

    Saltstack是基于Python开发的一套C/S架构,具备Puppet.Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高:使用号称世界上最快的消息队列ZeroMQ使得 ...

  5. SaltStack安装篇

    一.基础介绍1.简介 salt 是一个基础平台管理工具 salt是一个配置管理系统,能够维护预定于状态的远程节点 salt是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据 2.salt的核 ...

  6. Saltstack 安装配置详解

    下面这篇文章主要介绍另外一个运维自动化工具 Saltstack . 一.简介 Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master ...

  7. 自动化运维工具 SaltStack 搭建

    原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...

  8. 自动化运维工具SaltStack详细部署

    ==========================================================================================一.基础介绍==== ...

  9. 自动化运维工具SaltStack详细部署【转】

    ==========================================================================================一.基础介绍==== ...

随机推荐

  1. java持续添加内容至本地文件

    package com.lcc.commons; import com.lcc.commons.dto.FileLogDTO; import java.io.*; import java.util.A ...

  2. strCmd.Format("delete FROM userTable where name = '%s'", name);

    string.Format("select * from 数据库表 where 用户名='%s' and 密码='%s' ",m_1,m_2); 把[m_1]和[m_2]的值按照[ ...

  3. MySQL-复杂查询及条件-起别名-多表查询-04

    目录 基本查询语句及方法 测试数据创建 创建数据库与表 插入表记录数据 数据展示 常见结果排版 另一种结果排版 \G 简单查询语句的书写与执行顺序 查询语句书写 执行顺序 科普-- 起别名 写法 可以 ...

  4. MySQL8在CentOS7上的安装

    Install_CentOS7_MySQL8_binary.sh #!/bin/bash MySQL_Package=mysql-8.0.16-linux-glibc2.12-x86_64.tar.x ...

  5. [多平台]pymo – 手机上的 GalGame 引擎

    [多平台]pymo – 手机上的 GalGame 引擎 介绍下这个能在手机上玩移植 GalGame 的游戏引擎,不知道有多少人听过呢?相信如果有喜欢在手机上玩 GalGame 的同学肯定听过类似的东西 ...

  6. 怎样将当前节点从DOM树中移除

    1. 获取到当前节点. 2. 获取到当前节点的父节点. 3. 使用 Node.prototype.removeChild() 移除当前节点. <!DOCTYPE html> <htm ...

  7. nofollow标签浪费了多少站长做外链的时间

    对于rel=“external nofollow”和rel=“nofollow”,这两句代码,使用起来效果基本是一致的,只是前者较后者更为规范一点,两者翻译过来的意思就是:rel=“external ...

  8. 第十章、time模块

    目录 第十章.模块 第十章.模块 time模块 import time 时间戳 表示:是从1970年1月1日00:00:00开始按秒计算的偏移量. time_stamp = time.time() p ...

  9. mysql提示错误[Error Code] 1290 - The MySQL server is running with the --secure-file-priv option解决办法

    1.进入mysql查看secure_file_prive的值 $mysql -u root -p mysql>SHOW VARIABLES LIKE "secure_file_priv ...

  10. 给移动硬盘装win10,知道这些就足够了

    随着制造工业的不断发展,储存介质逐渐廉价化,以某猫和某狗为代表的电商平台上都能轻松买到大容量的原装移动硬盘.如果工厂的产品还不能满足你的要求,那么DIY是一个不错的选择,可以选择购买移动硬盘盒(2.5 ...