24.1 自动化运维介绍
随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等)。从初期的几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,那么标准化、自动化、架构优化、过程优化等降低IT服务成本的因素越来越被人们所重视。其中,自动化最开始作为代替人工操作为出发点的诉求被广泛研究和应用。
IT运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。
传统运维的缺陷:
传统运维效率低,大多工作人为完成
传统运维工作繁琐,容易出错
传统运维每日重复做相同的事情
传统运维没有标准化流程
传统运维的脚本繁多,不能方便管理
常见自动化运维工具:
Puppet: (www.puppetlabs.com)基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
Saltstack:(官网 https://saltstack.com,文档docs.saltstack.com )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,因为Saltstack有一个消息队列。Saltstack配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible: (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
24.2 saltstack安装
1、配置hosts文件
服务端: hostname server vim /etc/hosts 192.168.222.111 server 192.168.222.112 client 客户端: hostname client vim /etc/hosts 192.168.222.111 server 192.168.222.112 client
2、安装saltstack yum源(服务端客户端都需安装)
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
3、服务端安装:
yum install -y salt-master salt-minion
4、客户端安装:
yum install -y salt-minion
24.3 启动saltstack服务
- 编辑配置文件:(服务端、客户端都修改)
vim /etc/salt/minion # resolved, then the minion will fail to start. #master: salt master: server //添加指定服务端
- 启动服务
服务端: [root@server ~]# systemctl start salt-master [root@server ~]# systemctl start salt-minion [root@server ~]# ps aux |grep salt root 13112 1.8 1.8 389144 34380 ? Ss 16:15 0:01 /usr/bin/python /usr/bin/salt-master root 13128 0.0 1.0 306180 19396 ? S 16:15 0:00 /usr/bin/python /usr/bin/salt-master root 13141 0.0 1.7 469800 32980 ? Sl 16:15 0:00 /usr/bin/python /usr/bin/salt-master root 13142 0.0 1.7 388004 32968 ? S 16:15 0:00 /usr/bin/python /usr/bin/salt-master root 13145 0.2 1.9 391452 36964 ? R 16:15 0:00 /usr/bin/python /usr/bin/salt-master root 13146 0.0 1.8 388772 33812 ? S 16:15 0:00 /usr/bin/python /usr/bin/salt-master root 13147 0.0 1.8 503484 33900 ? Sl 16:15 0:00 /usr/bin/python /usr/bin/salt-master root 13148 1.4 2.2 401532 42948 ? S 16:15 0:01 /usr/bin/python /usr/bin/salt-master root 13149 1.4 2.2 401536 42956 ? S 16:15 0:01 /usr/bin/python /usr/bin/salt-master root 13150 0.2 1.8 462876 34308 ? Sl 16:15 0:00 /usr/bin/python /usr/bin/salt-master root 13157 1.4 2.2 401532 42956 ? S 16:15 0:01 /usr/bin/python /usr/bin/salt-master root 13158 1.4 2.2 401540 42964 ? S 16:15 0:01 /usr/bin/python /usr/bin/salt-master root 13159 1.4 2.2 401540 42972 ? S 16:15 0:01 /usr/bin/python /usr/bin/salt-master root 13248 2.1 0.9 313772 16956 ? Ss 16:16 0:00 /usr/bin/python /usr/bin/salt-minion root 13560 3.2 1.1 407656 22168 ? Dl 16:17 0:00 /usr/bin/python /usr/bin/salt-minion root 13600 0.0 1.0 403992 19820 ? S 16:17 0:00 /usr/bin/python /usr/bin/salt-minion root 13640 1.0 0.0 112720 560 pts/0 D+ 16:17 0:00 grep --color=auto salt [root@server ~]# netstat -lntp |grep python tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 13141/python tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 13147/python
客户端:客户端不监听端口 [root@client ~]# systemctl start salt-minion [root@client ~]# ps aux |grep salt root 1199 0.5 2.1 313624 21396 ? Ss 16:14 0:00 /usr/bin/python /usr/bin/salt-minion root 1202 1.7 4.2 571412 42592 ? Sl 16:14 0:00 /usr/bin/python /usr/bin/salt-minion root 1210 0.0 1.9 406696 20036 ? S 16:14 0:00 /usr/bin/python /usr/bin/salt-minion root 1300 0.0 0.0 112676 984 pts/0 S+ 16:15 0:00 grep --color=auto salt
- 4505端口是用来发布消息的,4506端口则是与客户端通信、传输数据的。
24.4 saltstack配置认证
- minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,我们需要把公钥传输给master
[root@client ~]# ls /etc/salt/pki/minion/ minion.pem minion.pub
master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master通过salt-key工具接收到minion传过来的公钥后,就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接收master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub。
[root@server ~]# ls /etc/salt/pki/master master.pem master.pub minions minions_autosign minions_denied minions_pre minions_rejected
- salt-key工具实现认证:
[root@server ~]# salt-key -a client The following keys are going to be accepted: Unaccepted Keys: client Proceed? [n/Y] y Key for minion client accepted. [root@server ~]# ls /etc/salt/pki/master/minions //接收的公钥会存放在这个目录下 client
客户端: [root@client ~]# ls /etc/salt/pki/minion minion_master.pub minion.pem minion.pub
- salt-key命令可以查看所有状态下的主机(客户端)
[root@server ~]# salt-key Accepted Keys: client server Denied Keys: Unaccepted Keys: Rejected Keys:
salt-key命令用法:
-a 后面跟主机名,认证指定主机
-A 认证所有主机
-r 跟主机名,拒绝指定主机
-R 拒绝所有主机
-d 跟主机名,删除指定主机认证
-D 删除全部主机认证
-y 省略掉交互,相当于直接按了y
24.5 saltstack远程执行命令
1、test.ping用于测试能否ping通minion端,测试已认证的minion端是否存活;*表示测试所有已经认证的minion端
[root@server ~]# salt '*' test.ping client: True server: True [root@server ~]# salt 'client' test.ping //测试指定minion client: True
2、cmd.run可以执行系统的命令,例如让所有机器都执行hostname命令:(如果是普通用户的话,只能执行普通用户能够执行的命令)
[root@server ~]# salt '*' cmd.run "hostname" client: client server: server
说明: 这里的必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端aming-01,aming-02, 那我们可以写成salt 'aming-', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项,下面会介绍到。
- 支持正则表达式:
[root@server ~]# salt 'cli*' test.ping client: True [root@server ~]# salt 'cli[a-z]*' test.ping client: True
- -L选项指定使用的是列表,需要用逗号进行分割
[root@server ~]# salt -L 'server,client' cmd.run "hostname" server: server client: client
- 有些正则表达式的使用需要加上-E来指定,不然不支持
[root@server ~]# salt -E 'cl(i|e|n|t)*' cmd.run "hostname" client: client