文章目录
一、saltstack部署
1.安装和启动
- saltstack是一个配置管理系统,能够维护预定义状态的远程节点。是一个分布式远程执行系统,用来在远程结点上执行命令和查询数据。并行的。
- 运维的核心是降低成本和提高效率
- 准备三个纯净的虚拟机server1,2,3;server1是master,server2,3是minion
- 包括安装、配置、管理
1)准备yum源
[root@server11 yum.repos.d]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
#阿里云镜像:https://developer.aliyun.com/mirror/saltstack?spm=a2c6h.13651102.0.0.3e221b118vroAq
[root@server11 yum.repos.d]# vim salt-3000.repo #改成阿里云的源http://mirrors.aliyun.com/saltstack
[salt-3000]
name=SaltStack 3000 Release Channel for Python 2 RHEL/Centos $releasever
baseurl=http://mirrors.aliyun.com/saltstack/yum/redhat/7/$basearch/3000
failovermethod=priority
enabled=1
gpgcheck=0
2)master和minion安装包
[root@server11 yum.repos.d]# yum install -y salt-master.noarch
[root@server11 yum.repos.d]# systemctl enable --now salt-master
[root@server12 salt]# yum install -y salt-minion.noarch
[root@server12 ~]# cd /etc/salt/
[root@server12 salt]# ls
[root@server12 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写
[root@server12 salt]# systemctl enable --now salt-minion.service
%server13也弄minion
[root@server13 salt]# yum install -y salt-minion.noarch
[root@server13 ~]# cd /etc/salt/
[root@server13 salt]# ls
[root@server13 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写
[root@server13 salt]# systemctl enable --now salt-minion.service
3)master端执行命令允许minion连接
master端有安全认证,需要同意连接
[root@server11 yum.repos.d]# salt-key -L
Accepted Keys:
server12
server13
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@server11 yum.repos.d]# salt-key -A#a是指定节点,A是指定所有
The following keys are going to be accepted:
Unaccepted Keys:
server12 server13
Proceed? [n/Y] y
Key for minion server12 server13 accepted.
4)master端测试与minion端的连接:
[root@server11 yum.repos.d]# yum install lsof -y
[root@server11 yum.repos.d]# lsof -i :4505
[root@server11 yum.repos.d]# salt '*' test.ping#*是指—L列出来的所有主机,检测一下是否有响应
[root@server11 yum.repos.d]# yum install python-setproctitle.x86_64 -y #安装后重起salt-master
[root@server11 yum.repos.d]# systemctl restart salt-master.service
[root@server12 salt]# pwd
/etc/salt
[root@server12 salt]# ls#在启动一个minion端时会产生一个minion_id文件,来记录主机名
cloud cloud.deploy.d cloud.profiles.d master minion minion_id proxy roster
cloud.conf.d cloud.maps.d cloud.providers.d master.d minion.d pki proxy.d
[root@server12 salt]# cat minion_id #如果要改主机名。则改完主机名后要删掉该文件,重新生成
server12
2.配置和使用
1)salt使用语句(salt内置模块的调用)
具体参考官网:http://docs.saltstack.cn/ref/states/all/index.html
[root@server11 yum.repos.d]# salt server* test.ping
[root@server11 yum.repos.d]# salt server12 test.ping
[root@server11 yum.repos.d]# salt 'server12' sys.doc pkg|grep pkg.install#查看服务使用命令
[root@server11 ~]# salt server12 pkg.install httpd
[root@server11 ~]# salt 'server12' service.start httpd
[root@server11 ~]# salt 'server12' sys.doc file #查看文件使用命令
[root@server11 ~]# cat index.html
server12
[root@server11 ~]# salt-cp server12 index.html /var/www/html/#上传文件
2) saltstack配置文件
SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
-
sls文件命名:
- sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。
- 使用子目录来做组织是个很好的选择。
- init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以
apache/init.sls
就是表示apache
. - 如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache
-
编写规则:缩进(不能用tab键)、冒号、短横杠
(具体在官方文档中查看) -
创建一个sls文件:
vim /srv/salt/apache.sls
httpd: # ID声明
pkg: # 状态声明
- installed # 函数声明
[root@server11 srv]# vim /etc/salt/master #可以看到所有文件的根目录是/srv/salt,所以需要创建
[root@server11 ~]# cd /srv/
[root@server11 srv]# ls
[root@server11 srv]# mkdir salt
[root@server11 salt]# pwd
/srv/salt
3)调用配置文件执行安装
[root@server11 srv]# cd /srv/salt/
[root@server11 salt]# mkdir apache
[root@server11 salt]# mv ~/index.html apache/
[root@server11 salt]# cd apache/
[root@server11 apache]# pwd
/srv/salt/apache
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
httpd:
pkg.installed
[root@server11 apache]# salt server12 state.sls apache.install#调用文本。不用加后缀
%安装多个
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
[root@server11 apache]# salt server12 state.sls apache.install
[root@server11 apache]# mkdir files
[root@server11 apache]# mv index.html files/
##文件操作,所有的目录都是基于/srv/salt/
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
file.managed:
- source: salt://apache/files/index.html
- name: /var/www/html/index.html
[root@server11 apache]# salt server12 state.sls apache.install
4)查看saltstack调用index.html的工作原理
[root@server12 salt]# yum install tree -y
[root@server12 salt]# cd /var/cache/salt/
[root@server12 salt]# tree .
[root@server12 salt]# cd minion/files/base/apache/files/
[root@server12 files]# ls
index.html
[root@server12 files]# md5sum index.html
f493e0f9f1dba0d3e0da7ce811875763 index.html
[root@server11 apache]# vim files/index.html
[root@server11 apache]# cat files/index.html
server12
server12
[root@server11 apache]# salt server12 state.sls apache.install
@@ -1 +1,2 @@
server12
+server12
[root@server11 apache]# md5sum files/index.html
02f29ea0b1c28693e91a843cf6057b95 files/index.html
[root@server12 files]# md5sum index.html #在server11中改变index文件,执行install.sls,会发现server12会发生相应改变,且md5sum与server11中的一致
02f29ea0b1c28693e91a843cf6057b95 index.html
saltstack的工作原理: 每个文件都有自己的md5sum(md5码)。saltstack通过发布订阅系统,将sls文件推送到远程主机的本地(saltstack有自己的缓存目录/var/cache/salt),在本地执行sls文件。
5)service.running:模块
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
file.managed:
- source: salt://apache/files/index.html
- name: /var/www/html/index.html
service.running:
- name: httpd
[root@server11 apache]# salt server12 state.sls apache.install
6)一个完整的sls文件:安装、配置、启动
[root@server11 apache]# vim install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
file.managed:
- source: salt://apache/files/httpd.conf
- name: /etc/httpd/conf/httpd.conf
service.running:
- name: httpd
- enable: true
- watch:
- file: apache
[root@server11 apache]# salt server12 state.sls apache.install
#在server12中查看结果
[root@server12 ~]# netstat -antlp#已改成8080
tcp6 0 0 :::8080 :::* LISTEN 3667/httpd
7)如果同时存在apache.sls 和 apache/init.sls,则子目录 apache/init.sls 被忽略,apache.sls将被用来表示 apache.
[root@server11 apache]# mv install.sls init.sls
[root@server11 apache]# salt server12 state.sls apache#默认的读取init.sls
#apache.sls和init.sls同时存在在apache目录下,执行salt server12 state.sls apache时先找apache.sls,忽略init.sls
二、Grains
- grains官方手册:http://docs.saltstack.cn/topics/grains/index.html
- Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当
minion重启时才会进行数据的更新。
由于grains是静态数据,因此不推荐经常去修改它。
应用场景:
信息查询,可用作CMDB。
在target中使用,匹配minion。
在state系统中使用,配置管理模块。
1.编写远程执行模块
[root@server11 salt]# mkdir /srv/salt/_modules
[root@server11 salt]# cd _modules/
[root@server11 _modules]# ls
[root@server11 _modules]# pwd
/srv/salt/_modules
[root@server11 _modules]# vim mydisk.py
[root@server11 _modules]# cat mydisk.py
def df():
return __salt__['cmd.run']('df -h')
[root@server12 ~]# cd /var/cache/salt/minion/
[root@server12 minion]# tree .
[root@server11 _modules]# salt server12 cmd.run df
[root@server11 _modules]# salt server12 saltutil.sync_modules#推到minion端server12
server12:
- modules.mydisk
[root@server11 _modules]# salt server12 mydisk.df
2信息查询:
[root@server11 _modules]# salt '*' grains.ls#默认可用的grains
[root@server11 _modules]# salt '*' grains.item#查看每一项的值
[root@server11 _modules]# salt server12 grains.item ipv4#取单项的值
3.grains定义的三种方法
方法1,在/etc/salt/minion中定义
[root@server12 salt]# cd /etc/salt/
[root@server12 salt]# ls
[root@server12 salt]# vim minion
改动:
grains:
roles:
- apache
[root@server12 salt]# systemctl restart salt-minion.service #重启salt-minion,否则数据不会更新
[root@server11 _modules]# salt server12 grains.item roles
server12:
----------
roles:
- apache
方法2,在/etc/salt/grains中定义
[root@server13 salt]# pwd
/etc/salt
[root@server13 salt]# vim grains
[root@server13 salt]# cat grains
roles:
- nginx
[root@server11 _modules]# salt server12 saltutil.sync_grains#静态的,需要同步数据
server12:
[root@server11 _modules]# salt '*' grains.item roles#查找自定义项
方法3,编写grains模块,在salt-master端创建_grains目录
[root@server11 _modules]# mkdir /srv/salt/_grains
[root@server11 _modules]# cd /srv/salt/_grains
[root@server11 _grains]# vim mygrain.py
[root@server11 _grains]# cat mygrain.py
def my_grain():
grains = {}
grains['salt'] = 'satck'
grains['hello'] = 'world'
return grains
[root@server11 _grains]# salt '*' saltutil.sync_grains
4.grains匹配运用
1)指令匹配
[root@server11 _grains]# salt -G roles:apache test.ping#在target中匹配minion
[root@server11 _grains]# salt -G roles:nginx test.ping
[root@server11 _grains]# salt -G salt:satck test.ping
2)在top文件中匹配,在指定的节点中创建应用,不同的主机中部署不同的grains
[root@server11 _grains]# pwd
/srv/salt/_grains
[root@server11 _grains]# cd ..
[root@server11 salt]# pwd
/srv/salt
[root@server11 salt]# vim top.sls
[root@server11 salt]# cat top.sls #server12上有apache,server13上有nginx
base:
'roles:apache':
- match: grain
- apache
'roles:nginx':
- match: grain
- nginx
[root@server11 salt]# mkdir nginx
[root@server11 salt]# cd nginx/
[root@server11 nginx]# pwd
/srv/salt/nginx
[root@server11 nginx]# mkdir files
[root@server11 nginx]# cd files/
[root@server11 files]# pwd
/srv/salt/nginx/files
[root@server11 files]# ls
nginx-1.18.0.tar.gz
[root@server11 files]# cd ..
[root@server11 nginx]# vim init.sls
[root@server11 nginx]# cat init.sls
nginx:
file.managed:
- source: salt://nginx/files/nginx-1.18.0.tar.gz
- name: /mnt/nginx-1.18.0.tar.gz
[root@server11 nginx]# salt '*' state.highstate
#查看运行结果
[root@server13 salt]# cd /mnt/
[root@server13 mnt]# ls
nginx-1.18.0.tar.gz
3)server12配置apache;server13配置nginx
[root@server11 salt]# cd /srv/salt/nginx/
[root@server11 nginx]# ls
files init.sls
[root@server11 nginx]# vim init.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel
file.managed:
- source: salt://nginx/files/nginx-1.18.0.tar.gz
- name: /mnt/nginx-1.18.0.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx#判断有没有这个目录
[root@server11 nginx]# salt server13 state.sls nginx
[root@server11 nginx]# scp server13:/usr/local/nginx/conf/nginx.conf .
root@server13's password:
nginx.conf 100% 2656 1.9MB/s 00:00
[root@server11 nginx]# mv nginx.conf files/
[root@server11 nginx]# cd files/
[root@server11 files]# ls
nginx-1.18.0.tar.gz nginx.conf
[root@server11 files]# vim nginx.conf
#改正用户:
user nginx;
搜索nginx systemed,看官方写法:
[root@server11 files]# vim nginx.service
[root@server1 files]# cat 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@server11 files]# cd ..
[root@server11 nginx]# vim init.sls
[root@server11 nginx]# cat init.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel
file.managed:
- source: salt://nginx/files/nginx-1.18.0.tar.gz
- name: /mnt/nginx-1.18.0.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/files/nginx.conf
nginx-service:
user.present:
- name: nginx
- shell: /sbin/nologin
- home: /usr/local/nginx
- createhome: false
file.managed:
- source: salt://nginx/files/nginx.service
- name: /usr/lib/systemd/system/nginx.service
service.running:
- name: nginx
- enable: true
- reload: true
- watch:
- file: /usr/local/nginx/conf/nginx.conf
[root@server11 nginx]# salt server13 state.sls nginx
[root@server13 ~]# ps aux#查看用户登陆
nginx 7405 0.0 0.0 46320 2024 ? S 01:03 0:00 nginx: worker process
4)安装和配置分开
[root@server11 nginx]# cp init.sls install.sls
[root@server11 nginx]# vim install.sls
[root@server11 nginx]# vim init.sls
[root@server1 nginx]# cat init.sls
#两个文件一起推
[root@server11 nginx]# salt server13 state.sls nginx.install
[root@server11 nginx]# cd ..
[root@server11 salt]# ls
apache _grains _modules nginx top.sls
[root@server11 salt]# salt '*' state.highstate#运行install和init