与之前的ansible一样,saltstack也是使用python语言所编写的自动化运维工具。但是二者的通信机制却并不相同。
相比较于ansible以linux系统的SSH服务为基础的通信方式,saltstack使用的则是ZMQ消息队列的方式来进行通信。前者的优势在于直接调用linux集成的底层服务,这样就不需要客户端来进行通信了,但这又导致其效率不够高。而后者采用的是C/S架构,即服务端和客户端的通信模式,效率很高。
以下的关于saltstack的简介,引用自博客:https://blog.51cto.com/13760226/2308580
saltstack组件:
1、Salt Master:中心管理系统。此系统用于将命令和配置发送到在受管系统上运行的Salt minion。即相当于server服务端
2、Salt Minions:被管理的系统。 该系统运行Salt minion,它从Salt master接收命令和配置。即相当于client客户端。
saltstack的安装与部署
之前提到过,saltstack采用的是C/S架构,因此要在管理主机上安装salt-master,而在要管理的主机上安装salt-minion。
由于我忘了拷贝已有的安装包,就不采用自建软件仓库的方式来安装了。进入saltstack的官网http://docs.saltstack.cn/
找到自己对应的系统版本来安装。
具体的安装步骤(实验系统版本rhel7.3):
1.根据系统版本导入密钥 rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub 2.创建并保存repo文件,创建网络yum源 vim /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=1 gpgcheck=1 gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub 3.运行命令 sudo yum clean expire-cache sudo yum update 4.按需求安装组件,如:salt-minion,salt-master等 yum install salt-master yum install salt-minion 我所使用的三台虚拟机,其中60为server端,安装salt-master 而61,62分别为client端,安装salt-minion
环境部署:
0.在正式地部署之前,要先将三台虚拟机的防火墙服务都关闭 systemctl stop firewalld systemctl disable firewalld 1.在60主机上,启动salt-master管理程序 systemctl start salt-master 2.分别在61,62主机上更改salt-minion的配置文件,并启动 cd /etc/salt ls vim minion # 将原master: salt更改为salt-master主机的IP地址 systemctl start salt-minion 3.在60主机上检测61,62两台主机,并授权key salt-key -L # 显示当前master的授权情况 salt-key -A # 将所有监测到的未授权key的主机加入授权 上面命令授权的实质是salt-master与salt-minion相互交换密钥 4.测试 salt server61 test.ping # 使用test模块中的ping方法,测试能否推送到目标主机server61 salt server62 test.ping 注意的是,这里的主机名server61,62等均是以salt-key -L所显示的为准 而且,saltstack支持正则表达式
使用saltstack部署服务
从配置文件/etc/salt/minion(或master)中,可以看到默认的用于推送服务的文件根目录是/srv/salt
(配置文件的file roots
选项下);也就意味着,我们推送服务的各种配置文件都是以该目录为根目录来查找的。
但注意的是,这个目录需要我们自己创建
部署apache服务
1.创建用于推送服务的目录 mkdir /srv/salt cd /srv/salt mkdir apache 2.创建文件用于推送apache服务 cd apache vim apache.sls apache-install: # 唯一性声明;在一个sls文件中这个名字(标识符)只能作为唯一性声明一次,不能重复定义 pkg.installed: # 下载httpd - pkgs: - httpd - httpd-tools file.managed: # 相当于ansible的playbook文件中的copy模块 - name: /etc/httpd/conf/httpd.conf # 将source源文件复制到目标远程主机的该位置,相当于ansible中copy模块的dest选项 - source: salt://apache/files/httpd.conf # 源文件位置,相当于ansible中的src(salt://这个语法是指从saltstack的文件根目录/srv/salt开始查找) service.running: - name: httpd - reload: true - watch: # watch选项用于监控文件apache/install.sls的执行,如果有变动,那么执行running这个方法。参数reload表示服务重启 - file: apache-install 3.先在61主机上安装httpd,将其配置文件/etc/httpd/conf/httpd.conf远程复制到salt-master主机上作为apache服务配置文件的模板 yum install -y httpd scp /etc/httpd/conf/httpd.conf 172.25.60.60:/srv/salt/apache/files 4.在salt-master(60主机)上推送apache的安装部署服务 salt server61 state.sls apache.install # 与ansible不同的是,推送命令不需要一定在服务推送配置文件的根目录/srv/salt下执行 # 向server61主机推送文件apache/install.sls(这个文件是在默认根目录/srv/salt下查找的,省略了sls文件后缀,因为前面有state.sls参数); state.sls是说明配置文件的语法
部署haproxy
1.创建用于推送服务的目录 mkdir haproxy 2.创建文件用于推送apache服务 cd haproxy vim install.sls haproxy-install: pkg.installed: - pkgs: - haproxy - httpd-tools file.managed: - name: /etc/haproxy/haproxy.cfg - source: salt://haproxy/files/haproxy.cfg service.running: - name: haproxy - reload: true - watch: - file: haproxy-install 3.先在61主机上安装haproxy,将其配置文件/etc/haproxy/haproxy.cfg远程复制到salt-master主机上作为haproxy服务配置文件的模板 yum install -y haproxy scp /etc/httpd/conf/httpd.conf 172.25.60.60:/srv/salt/haproxy/install 4.在salt-master(60主机)上推送haproxy的安装部署服务 vim files/haproxy.cfg # 编辑haproxy服务配置文件的模板 salt server61 state.sls haproxy.install # 在部署haproxy服务之前,确保61,62两台主机上部署了apache服务 5.测试 curl 172.25.60.61:8080 # 会轮询访问61,62两台主机
部署keepalived
在上面haproxy的基础上,实现haproxy+keepalived高可用
1.创建用于推送服务的目录 mkdir keepalived 2.创建文件用于推送keepalived服务 cd keepalived vim install.sls keepalived-install: pkg.installed: - pkgs: - keepalived file.managed: - name: /etc/keepalived/keepalived.conf - source: salt://keepalived/files/keepalived.conf service.running: - name: keepalived - reload: true - watch: - file: keepalived-install 3.先在61主机上安装keepalived,将其配置文件/etc/keepalived/keepalived.conf远程复制到salt-master主机上作为keepalived服务配置文件的模板 yum install -y keepalived scp /etc/keepalived/keepalived.conf 172.25.60.60:/srv/salt/keepalived/install 4.在salt-master(60主机)上推送keepalived的安装部署服务 vim files/keepalived.conf # 编辑keepalived服务配置文件的模板 salt server61 state.sls keepalived.install # 在部署keepalived服务之前,确保61,62两台主机上部署了apache服务和haproxy服务 salt server62 state.sls keepalived.install # 先将模板文件中的MASTER更改为BACKUP,优先级降低 5.测试 curl 172.25.60.200:8008 # 访问虚拟IP,会轮询访问61,62两台主机 systemctl stop keepalived # 模拟master宕机 curl 172.25.60.200:8008 # 仍然可以正常访问