天涯运维之服务器远程操作

屈翰飞
2023-12-01

早期天涯sa在批量操作服务器时,采用的是SSH公钥方式来实现远程命令操作,即在管理主机生成一对密钥文件(公私钥),然后 把公钥文件复制到受控机,直接在管理主机上远程执行命令或运行脚本,例如:
ssh root@10.20.0.54 "/bin/date"。

在服务器较多的情况下,sa先在管理主机创建服务器列表的文件,然后使用shell或python写循环执行命令的程序,在管理主机上运行。

随着产品、服务及服务器的增多,sa岗位的细分,这种手工的方式已经落后。无法满足规范化、标准化和可管理的运维方向。

因此我们在运维管理平台上开发了远程操作模块,实现了对主机批量操作的功能。

远程操作模块基于Func来进行二次开发。Func是由红帽子公司以Fedora平台统一网络控制器 Func(Fedora Unified Network Controller https://fedorahosted.org/Func),目的是为了解决这一系列统一管理监控问题而设计开发的系统管理基础框架。 能有效的简化多服务器系统管理工作的工具,易于学习,易于使用,易于扩展,而且功能强大。

Func的特点有:
1、Func可以在主控机上一次管理任意多台或任意多个服务器组。
2、Func基于Certmaster(https://fedorahosted.org/certmaster/)建立了Master-Slaves主从SSL证书管控体系,可以将证书自动分发到所有受控服务器。
3、Func命令行可以直接发送远程命令或者远程获取数据。
4、Func 开发者已经完成了大多数常用任务模块的开发,包括命令执行模块、文件传输模块、IPtables模块、查看硬件信息模块、Mount模块、进程模块、服务模块、重启系统模块等。
5、可以通过Func提供的Python API轻松编写扩展模块,以实现具体功能扩展。而且任何Func命令行能完成的工作,都能通过API编程实现。
6、Func通讯基于XMLRPC和SSL标准协议。


Python使用Func的范例如下:
import Func.overlord.client as fc
client = fc.Client("*.static.tianya.cn;*.varnish.tianya.cn")

# 安装包控制
client.yumcmd.update()

# 服务控制
client.service.start("varnish54")

# 获取硬件信息
print client.hardware.info()


Func管理主机的安装过程为:
1)使用yum安装Func包:
yum install Func

编辑/etc/certmaster/certmaster.conf,用于允许自动签署(缺省为off)。
autosign = yes

2)将certmaster服务设为自动运行
/sbin/chkconfig --level 345 certmaster on
/sbin/service certmaster start



3)添加客户机ip及主机名到/etc/hosts
   
安装客户端Minions
1)安装Func包
yum install Func

2)添加服务机ip及主机名到/etc/hosts
   
3)编辑/etc/certmaster/minion.conf,指定certmaster。
[main]
certmaster = certmaster主机
log_level = DEBUG
cert_dir = /etc/pki/certmaster
   
   
   

4)允许并运行Funcd服务
/sbin/chkconfig --level 345 Funcd on
/sbin/service Funcd start

在MASTER中签署KEY
1)在certmaster系统中运行
certmaster-ca --list
   
2)为所需系统签署keys
certmaster-ca --sign hostname        
注:如果打开autosigning,以上将自动完成。
   

开放防火墙端口,缺省时certmaster监听51235端口,Funcd监听51234端口。

   
Func一些常用命令如下:
查看有多少客户机注册
certmaster-ca --list-sign

查看当前有哪些服务器注册到主控机
Func '*' ping
查看所有服务器的硬件信息
Func '*' call hardware info
查看varnish35上的系统负载
Func 'varnish35' call command run /usr/bin/uptime
启动varnish35上的httpd服务
Func 'varnish35' call service start httpd
运行脚本
Func '*' call command run "/bin/date"
('10.2.0.12', [0, 'Fri Jul 29 19:50:25 CST 2011\n', ''])


我们的远程操作模块主要由以下几个功能组成:
1、角色管理功能
创建角色,将用户添加到不同的角色中。
在角色中添加可执行的操作模块。

2、模块管理功能
对操作模块进行管理,包括模块名称,执行方法,Func模块的名称,Func的方法,命令行和执行参数。
   
例如,重启linux主机的操作模块为直接调用Func模块。执行方法为commandline,Func模块为RebootModule,方法为reboot。
   
重启resin服务的操作模块为,执行方法为运行脚本,添加执行的shell脚本。操作时系统将脚本通过Func的文件传输命令上传脚本到目标主机,在远端执行后自动删除脚本。

Python的代码为
client.local.copyfile.send(shellfile)
client.command.run("chmod +x  " +shellfile) # 加执行权限     
client.command.run("/bin/sh "+shellfile)     
client.command.run("rm -f "+shellfile)
     
也可以在主机端预装shell脚本,通过模块来远程调用脚本。
   
3、主机认证功能
将未认证主机认证到Func中。
将已认证主机从Func中撤消认证。
 

还有一些其它功能,如操作日志,登陆日志,操作统计等。


远程操作模块可以调取资源中心的数据,因此可实现按产品、按功能、按机柜或按机房等对指定的一台或所有服务器进行统一的操作。

远程操作模块可以满足绝大多数服务器自动化运维的工作内容,减轻了sa的工作量,降低了操作失误的风险。同时将一部分特定的操作授权给研发团队,为研发工程师线上处理产品和服务提供了便利,也避免了线上的安全风险。

现在远程操作模块日操作数量达二百之多,按每项操作节省sa的30分钟重复工作计算,每天节约100多个工作小时,让sa能把工作重心放在更重要的工作中去。


 类似资料: