1.实现高可用(apache+nginx+keepalived)
前面实验使用server1(saltstack的master节点)给server2(saltstack的minion节点)安装了httpd服务,给server3(saltstack的minion节点)安装了nginx服务
现在使用server1给server2和server3部署高可用keepalived
实验:
(1)在/srv/salt目录下建立keepalived目录,进入keepalived目录,编辑推送脚本文件
先实现一个推送安装keepalived任务
推送成功,server2和server3上成功安装keepalived
(2)编辑推送脚本文件
写入变量:高可用两个节点的状态,优先级别使用变量
(3)在keepalived目录下面建立files目录,复制server2上的keepalived的配置文件到这个目录下,编辑此文件
写入一个Vip:172.25.12.100,供外界客户端访问测试
(4)编辑之前的pillar目录下的变量文件
(5)编辑全局变量文件
(6)全局推送,给server2和server3上面安装keepalived,实现高可用
(7)验证:
server2上的httpd服务和server3上的nginx服务是开启的
在server2上可以看到Vip:172.25.12.100
在浏览器上访问测试一下,可以看到httpd服务的默认发布页
当关闭server2上的kepalived高可用后,vip就会漂移
可以看到vip已经漂移到了server3上面
浏览器上访问测试:
可以看到是server3上的nginx默认发布页
在server2上重启高可用keepalived,就会发现vip又回来了,这是因为我们设置的server2优先级高
2.Job管理
2.1 Job简介
master在下发指令任务时,会附带上产生的jid。
minion在接收到指令开始执行时,会在本地的/var/cache/salt/minion/proc目录下产生该jid命名的文件,用于在执行过程中master查看当前任务的执行情况。
指令执行完毕将结果传送给master后,删除该临时文件。
2.2 Job cache
Job缓存默认保存24小时:
vim /etc/salt/master
keep_jobs: 24
当处于图形化管理的时候,推送的结果是看不到的,而这些存放结果的job文件,就是查看推送成功与否的重要指示
master端Job缓存目录:
/var/cache/salt/master/jobs
2.3 将推送数据保存在数据库中的方式
为了可以长久性保存job文件并且可以随时方便的查看,就需要将job储存在数据库里,方式就是当minion节点返回数据给master是,master在将数据发送给数据库进行储存
方式一:在master节点和minion节点均部署数据库
(1)在server1和server2上安装数据库
(2)开启server1上的数据库,进行安全初始化,初始化完成后登陆
(3)编辑test.sql语句文件,给数据库导入job的数据
CREATE DATABASE `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE `salt`;
DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
`jid` varchar(255) NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
`fun` varchar(50) NOT NULL,
`jid` varchar(255) NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar(255) NOT NULL,
`success` varchar(10) NOT NULL,
`full_ret` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(4)将数据导入
(5)查看数据库
此时还没有数据,显时为空
(6)在server2上编辑minion配置文件,开启return: mysql,给数据库写入数据,重启minion服务
(7)测试,在数据库上进行授权,添加授权用户
(8)在数据库的表中查看数据已经写入
第一种方式,缺点是需要在每一个minion节点安装数据库
方式二:只在master节点部署数据库
(1)查看缓存
(2)编辑master配置文件,添加数据
(3)登陆数据库,添加用户授权
(4)在master上安装,MySQL-python插件支持使用
(5)重启salt-master服务
(6)master与minion进行交互,通过 salt server3 test.ping来测试客户端是否在线,并被master管理,如果返回True,则说明客户端已经被master管理,并处于在线状态。
(8)在数据库中进行查看,发现数据已经写入数据库的表中
2.4 Job管理命令
salt-run jobs.active ## 查看所有minion当前正在运行的jobs(在所有minions上运行saltutil.running)
salt-run jobs.list_jobs ## 列出当前master jobs cache中所有job
salt-run jobs.lookup_jid <jid> ##从master jobs cache中查询指定jid的运行结果