准备实验环境: 安装系统
1)硬件配置如下
2) 先把光标放到”install CentOS 7”,按 Tab键编辑内核参数,添加 (net.ifnames=0 biosdevname=0)
作用:使网卡名称为 eth0 这样的格式
3) 建议安装语言改成 简体中文,其他保持默认即可
4)设置完root密码等待安装完成重启即可完成系统安装
5)配置 VMware NAT 模式默认地址池
编辑----》虚拟网络编辑器
配置虚拟机
1)配置网卡
vi /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
systemctl disable firewalld
systemctl disable NetworkManager
2)设置主机名
vi /etc/hostname
linux-node1.example.com
3)设置主机名解析
vi /etc/hosts
192.168.56.11 linux-node1 linux-node1.example.com
192.168.56.12 linux-node2 linux-node2.example.com
4)设置DNS
vi /etc/resolv.conf
nameserver 192.168.56.2
5)安装最新epel yum源
注:此地址中有各种源(https://opsx.alibaba.com/mirror)
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
6)yum安装 一些基础包
yum -y install net-tools vim lrzsz tree screen lsof tcpdump nc mtr
nmap
7)关闭selinux
vim /etc/selinux/config
SELINUX=disabled
8)重启系统
yum update -y && reboot # 升级所有包同时也升级软件和系统内核, 并重启
9)确认是否一些服务是否已按计划关闭
getenforce # selinux是否关闭
firewall-cmd --state # 防火墙是否关闭
克隆一台虚拟机完成使用环境
注:克隆虚拟机必须要先关闭(shutdown)
1)右键 “管理” ----》“克隆” ----》
2)选择 从哪个状态创建克隆
3)克隆类型(创建完整克隆)
4)新建虚拟机名称
5)点击 “完成” 即可完成虚拟机克隆
6)对克隆的虚拟机 node2 进行一些简单修改
vim /etc/hostname # 1、修改主机名
linux-node2.example.com
vi /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.56.12
reboot
saltstack介绍
1、saltstack说明
1)salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ
2)用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎
3)也有一个强大的配置管理系统,通常叫做Salt State System。 4)主要作用: 远程执行、配置管理、事件驱动
a. 远程执行: 及支持 使用agent 支持 使用ssh远程执行
b. 配置管理:如果用salt描述nginx,没有就会帮你安装,如果nginx配置不对就会帮你改(保证机器状态和你描述一致)
5)特点:即可支持
agent 方式,也支持 ssh方式
2、基本原理
1)SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信
2)minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
3)master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中
3、saltstack具体步骤如下
1)Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc
2)salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。
3)master接收到命令后,将要执行的命令发送给客户端minion。
4)minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理
5)minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master
6)master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中
7)salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
4、saltstack认证原理
1)salt-master和salt-minion第一次启动时会在 /etc/salt/pki/master目录下生成公钥和私钥用于身份验证
[root@linux-node1 master]# cd /etc/salt/pki/master
[root@linux-node1 master]# ll -lh
-r-------- 1 root root 1.7K Jan 7 05:36 master.pem
-rw-r--r-- 1 root root 450 Jan 7 05:36 master.pub
2)所有未认证minion的私钥都会放到master的 /etc/salt/pki/master/minions_pre/ 文件夹下
3)当minion通过认证后就会放到 /etc/salt/pki/master/minions 文件夹下
4)master通过在认证的同时会把自己的公钥发送给minion, minion会放到 /etc/salt/pki/minion/minion_master.pub
5)这样就实现了双向密钥交换
saltstack安装
注:saltstack官方提供了各种版本系统安装方法(地址:http://repo.saltstack.com/#rhel)
1、在linux-node1 中安装saltstack master 和 minion
yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum -y install salt-master salt-minion
/etc/salt/master(master配置文件)
/etc/salt/minion(minion配置文件)
2、在linux-node2 中安装saltstack minion
yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum -y install salt-minion
/etc/salt/minion(minion配置文件)
3、在linux-node1中配置 salt-minion
vim /etc/salt/minion
#master: salt 修改为(master: 192.168.56.11) ----》配置master IP
#id: 修改为(id: linux-node1.example.com) ---》告诉master自己是谁,默认会读取当前主机名
注:saltstack是以主机名区分不同 agent 需保证主机名唯一
4、在linux-node2中配置 salt-minion
vim /etc/salt/minion
#master: salt 修改为(master: 192.168.56.11) ----》配置master IP
#id: 修改为(id: linux-node2.example.com) ---》告诉master自己是谁,默认会读取当前主机名
5、启动linux-node1中salt-maser 和 salt-minion
systemctl start salt-master # 启动salt-master
systemctl enable salt-master # 设置salt-master开机自启动
systemctl start salt-minion # 启动
systemctl enable salt-minion # 开机自启动
6、启动linux-node2中salt-minion
systemctl start salt-minion # 启动
systemctl enable salt-minion # 开机自启动
7、认证
salt-key # 在master中查看所有key的状态
salt-key -a linux-node1.example.com # 认证 linux-node1.example.com的key
salt-key -A # 一次性认证所有key
8、远程执行测试
salt \* test.ping # 测试saltstack minion与master的连通性
salt \* cmd.run 'df -h' # 在所有minion中批量执行 df -h 命令
saltstack常用模块
1、cmd.run (远程执行)
功能: 实现远程命令执行
salt ‘*’ cmd.run ‘free -m’
2、cp模块
功能: 实现远程文件、目录复制,下载Url文件等操作
# 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
vim /etc/salt/master
file_roots:
base:
- /srv/salt
dev:
- /srv/salt/dev
systemctl restart salt-master # 需要重启master
# 2、创建同步目录文件夹,和测试文件 /srv/salt/test.sh
mkdir -p /srv/salt/dev
vim /srv/salt/test.sh #创建测试文件
# 3、将 /srv/salt/ 下的test.sh文件同步到所有minion
salt '*' cp.get_file salt://test.sh /tmp/test.sh
# 4、创建目录 makedirs(当分发的位置在目标主机上不存在时,自动创建该目录)
salt '*' cp.get_file salt://test.sh /aaa/test.sh makedirs=True
# 5、将 /srv/salt 中的testdir 目录复制到所有minion
mkdir /srv/salt/testdir/
salt '*' cp.get_dir salt://testdir /aaa/
# 6、下载百度首页内容保存到所有minion中
salt '*' cp.get_url http://www.baidu.com /tmp/index.html
参考:https://www.cnblogs.com/xiaonq/p/10233439.html