服务器断电后自启动

引子

创业公司的生产资料主要集中在自己搭建的服务器上,由于一些客观因素(没钱,环境差)导致服务器经常断电,一般周末经常性的『技术性』断电重启,导致坑爹的一早来就要手动开机、手动启动虚拟机、手动启动后台进程,不知不觉中一上午就没有了,一次两次可以,次数多了之后难免烦躁,打算一劳永逸解决这件事情。

解决方案

解决这个问题其实就是分别解决下面几个问题:

  • 自动开机
  • 自动开启虚拟机
  • 自动开启进程

通电自动开机

关于自动开机的原理及方式有很多,比如来电自动、鼠标键盘启动、局域网自动唤醒等等,我们这里打算用来电自动的方式。

通电自动开机依赖于服务器的主板支持该功能;对于支持该功能的主板,其BIOS设置里这个功能是一般默认关闭,我们需要在 BIOS 设置里开启该功能。至于具体的设置,由于不同主板设置选项各不相同,本文暂时不做论述,大家可以自行 google 或者在各厂家的产品页面寻求帮助。

虚拟机自启动

为了方便服务器的管理,一般需要在物理机上安装特定的虚拟机管理软件,比较知名的如 citrix 公司的 XenServer、vmware的 vSphere 等。自动开启虚拟机依赖具体的虚拟机管理软件。我们使用开源的XenServer,6.0之后的版本已经支持虚拟机随server启动而启动。XenServer 以 ISO 的形式提供,包含服务端、GUI客户端 XenCenter及命令行工具 xe-cli 等。详细的下载和安装可以参考 官网

通过命令行 xe-cli 可以设置虚拟机在物理机启动后自启动,xe-cli 在 ISO 镜像文件里,以 rpm 的形式提供。以 Centos6 环境为例,安装 xe-cli:

1
$ rpm -ivh xe-cli-7.1.0-137263c.x86_64.rpm

注意,这里的 xe-cli 可以安装在和服务器连接的内网机器上,可以是任意一台虚拟机系统里,其本质和 GUI 形式的客户端管理工具 XenCenter 类似,只不过是命令行形式而已。

我们设置需要连接的服务器物理机 ip (例如10.1.164.37)以及登录用户密码

1
2
3
4
$ cat ~/.xe 
server=10.1.164.37
username=root
password=123456

然后设置资源池 (vm-pool) 允许自动重启,先列出所有 pool 的 uuid,然后设置

1
2
3
4
5
6
7
8
$ xe pool-list
uuid ( RO) : 8f05704a-09be-d56a-0b08-f6f2e8a10d46
name-label ( RW):
name-description ( RW):
master ( RO): b33b36ba-6f9d-43e3-90c9-bb62e27193bf
default-SR ( RW): <not in database>

$ xe pool-param-set uuid=8f05704a-09be-d56a-0b08-f6f2e8a10d46 other-config:auto_poweron=true

最后选择需要自动重启的虚拟机,然后设置为自动重启(同样使用 uuid 来设置):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ xe vm-list
uuid ( RO) : 2548c2b1-103d-8d6a-433d-77cbc8cabfb8
name-label ( RW): Base
power-state ( RO): halted
uuid ( RO) : 756d3025-d365-8de3-6f54-755464534e84
name-label ( RW): svr.test.164.43
power-state ( RO): halted
uuid ( RO) : 68d76d60-9b5b-40fe-b88f-edf0cd8906da
name-label ( RW): Control domain on host: xenserver-fbilcznb
power-state ( RO): running

$ xe vm-param-set uuid=756d3025-d365-8de3-6f54-755464534e84 other-config:auto_poweron:true

$ xe vm-param-set uuid=68d76d60-9b5b-40fe-b88f-edf0cd8906da other-config:auto_poweron:true

详细可以参看 这里

自动启动进程

自动启动进程就比较简单了,通过 chkconfig 命令或者修改 /etc/rc.local 文件就可以在系统启动时候做任何你想做的事情了,我们在这里添加一些启动数据库和服务器进程的操作。

使用 chkconfig

chkconfig 使用说明

1
2
3
4
5
用法:    chkconfig [--list] [--type <type>] [name]
chkconfig --add <name>
chkconfig --del <name>
chkconfig --override <name>
chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>

以设置 mysqld 进程自动启动为例

mysqld 自启动

或者

使用 rc.local

修改 /etc/rc.local

添加

/etc/init.d/mysqld start

结尾

至此,我们终于一劳永逸解决这些烦人的问题了,是时候泡杯咖啡好好享受生活了。。。。

参考资料

如何设置BIOS使服务器断电后再来电能自动开机

How to Setup XenServer 6.x to Auto-Start Virtual Machines