一.saltstack简介
1.saltstack简介
-
Saltstack是基于Python开发的一套C/S架构,具备Puppet、Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高;使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高;
-
Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器。目前Salt-cloud项目也已经合并到Saltstack主项目里,Saltstack已经支持Docker相关模块,在友好地支持各大云平台之后,配合Saltstack的Mine实现各云平台业务自动扩展。
2.saltstack的通信端口
- master端:4505
- minion端:4506
altstack的master端监听4505与4506端口。4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。
3.saltstack三大功能
- 远程执行
- 配置管理
- 云管理
4.ZeroMQ简介
ZeroMQ的详细信息可参考:https://www.cnblogs.com/rainbowzc/p/3357594.html
ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。
2.系统架构
三.saltstack的部署
实验环境
主机名(IP) | 服务 |
---|---|
server1(172.25.254.1) | salt-master |
server2(172.25.254.2) | salt-minion |
server3(172.25.254.3) | salt-minion |
1.搭建第三方yum源
第三方yum源要用到的安装包,repodate为软件包生成的仓库:
//在物理机上将搭建的第三方仓库发布到http的默认发布目录下
[root@foundation77 ~]# mv /home/kiosk/Desktop/2018/ /var/www/html/
[root@foundation77 ~]# mount /home/kiosk/Desktop/rhel-server-7.3-x86_64-dvd.iso /var/www/html/file/
[root@foundation77 ~]# ls /var/www/html/
2018 file
//在server1,server2,server3上配置第三方yum源:
[root@server1 ~]# cd /etc/yum.repos.d/ ##server2和server3的第三方yum源配置同server1
[root@server1 yum.repos.d]# vim salt.repo
[saltstack]
name=saltstack
baseurl=http://172.25.254.77/2018
gpgcheck=0
2.在server1上安装salt-master,并开启master服务
[root@server1 ~]# yum install -y salt-master
[root@server1 ~]# cd /etc/salt/
[root@server1 salt]# systemctl start salt-master
[root@server1 salt]# systemctl enable salt-master
3.server2及server3上安装salt-minion,并且编辑minion的配置文件指定master,开启minion服务
//server2:
[root@server2 yum.repos.d]# yum install -y salt-minion
[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# vim minion
16 master: 172.25.254.1
[root@server2 salt]# systemctl start salt-minion
[root@server2 salt]# systemctl enable salt-minion
//server3:
[root@server3 yum.repos.d]# yum install -y salt-minion
[root@server3 ~]# cd /etc/salt/
[root@server3 salt]# vim minion
16 master: 172.25.254.1
[root@server3 salt]# systemctl start salt-minion
[root@server3 salt]# systemctl enable salt-minion
4.在server1上添加key,并且测试
[root@server1 salt]# salt-key -L ##查看key发现没添加
[root@server1 salt]# salt-key -A ##-A表示所有
[root@server1 salt]# salt-key -L ##再次查看添加完成
[root@server1 salt]# salt '*' test.ping ##测试
5.查看server1上master的相应信息
//查看master的端口相应信息
[root@server1 salt]# yum install -y lsof
//查看master查看的相应进程,因为进程显示的python语言,因此需要下载python语言的相应解释器
[root@server1 salt]# yum install -y python-setproctitle.x86_64
[root@server1 salt]# ps ax ##产生1python的相应的进程及其作用
//查看master上的master.pub及其minion上的minion_master.pub发现公匙是相同的
//server1:
[root@server1 salt]# cd pki/master
[root@server1 master]# md5sum master.pub
5d62a03af30164bf630d5180c3654e44 master.pub
//server2:
[root@server2 minion]# md5sum minion_master.pub
5d62a03af30164bf630d5180c3654e44 minion_master.pub ##minion与master上的相同
四.YAML在sls文件中的应用,部署服务
1.编写master的配置文件添加该模块
[root@server1 salt]# vim master
添加该模块:取消注释
file_roots:
base:
- /srv/salt
[root@server1 salt]# mkdir /srv/salt
[root@server1 salt]# systemctl restart salt-master
[root@server1 salt]# cd /srv/salt/
[root@server1 salt]# pwd
/srv/salt
2.在添加的sls文件的模块指定的路径下部署apache
//编辑sls文件
[root@server1 salt]# mkdir apache
[root@server1 apache]# vim install.sls
httpd:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
service.running:
- name: httpd
- enable: true
- reload: true
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
//添加文件中所指出的配置文件
[root@server1 apache]# mkdir files
[root@server1 apache]# cd files/
[root@server1 files]# scp server2:/etc/httpd/conf/httpd.conf .
3.在server2上安装apache
[root@server1 apache]# salt server2 state.sls apache.install apache.install表示在apache目录下的install安装文件
执行过程中产生的相应信息都在上图的相应目录下
3.重新编写sls文件配置安装与服务开启分离,相当于ansible的角色
//编辑安装文件:
[root@server1 apache]# vim install.sls
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
//编辑开启服务的文件
[root@server1 apache]# vim service.sls
include:
- apache.install ##包含安装文件
httpd-service:
service.running:
- name: httpd
- enable: true
- reload: true
- watch: 监控安装文件
- file: httpd-install
//安装httpd:
//开启服务:
五.nginx服务的推送
1.在/srv/salt目录下建立相应的nginx目录并且在nginx目录下建立相应的存放nginx压缩包的目录
[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# mkdir nginx
[root@server1 salt]# cd nginx/
[root@server1 nginx]# mkdir files
[root@server1 nginx]# cd files/
[root@server1 files]# ls
nginx-1.15.8.tar.gz
2.编写相应的sls安装文件并且现在server3(minion)上进行解压相应的操作,因为nginx在编译的过程中会产生相应的debug,需要在编译过程中将其注释掉
[root@server1 nginx]# vim install.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- make
- pcre-devel
- zlib-devel
file.managed:
- name: /mnt/nginx-1.15.8.tar.gz 压缩包重新存放的位置
- source: salt://nginx/files/nginx-1.15.8.tar.gz 压缩包的存放位置
cmd.run:
- name: cd /mnt && tar zxf nginx-1.15.8.tar.gz && cd nginx-1.15.8
- creates: /mnt/nginx-1.15.8
[root@server1 nginx]# salt server3 state.sls nginx.install 在server3上执行解压
查看debug文件:
[root@server3 salt]# cd /mnt/
[root@server3 mnt]# ls
nginx-1.15.8 nginx-1.15.8.tar.gz
[root@server3 mnt]# cd nginx-1.15.8
[root@server3 nginx-1.15.8]# vim auto/cc/gcc
171 # debug
172 CFLAGS="$CFLAGS -g" 需要用到在后面进行安装时用到,所以需要查看
3.再次编写nginx的安装文件,并且进行安装
[root@server1 nginx]# vim install.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- make
- pcre-devel
- zlib-devel
file.managed:
- name: /mnt/nginx-1.15.8.tar.gz
- source: salt://nginx/files/nginx-1.15.8.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.15.8.tar.gz && cd nginx-1.15.8 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
4.准备nginx服务启动脚本将脚本放到server3相应的服务的目录下并且进行相应的测试
[root@foundation77 6.8]# vim nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@foundation77 6.8]# scp nginx.service root@172.25.254.3:/etc/systemd/system
//在server3上重启模块并且进行查看
[root@server3 system]# pwd
/etc/systemd/system
[root@server3 system]# systemctl daemon-reload
5.关闭server3上的nginx服务并且将服务脚本,及其配置文件烤到server1 master上的nginx的相应的files文件的模版目录下
6.在server1进行配置nginx服务的sls文件,实现远程控制服务的开启和关闭
[root@server1 nginx]# pwd
/srv/salt/nginx
[root@server1 nginx]# vim service.sls
[root@server1 nginx]# vim service.sls
include:
- nginx.install 包括nginx.install的安装文件
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/files/nginx.conf nginx的配置文件的来源
nginx-service:
file.managed:
- name: /etc/systemd/system/nginx.service
- source: salt://nginx/files/nginx.service nginx的脚本来源
service.running:
- name: nginx
- enable: true
- reload: true
- watch:
- file: /usr/local/nginx/conf/nginx.conf
7.在master上进行服务的推送开启server3上的nginx的服务并且在server3上进行查看验证
在server3上查看服务的状态:
则服务推送成功
8.编辑顶层模块文件将apache及其nginx服务的安装都写进去,并且推送顶层模块进行测试
[root@server1 ~]# cd /srv/salt/nginx/
[root@server1 nginx]# ls
files install.sls service.sls
[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# vim top.sls
base:
'server2':
- apache.service
'server3':
- nginx.service