环境声明
- 阿里云ECS Centos7.7.1908 ×1
- Azure虚拟机 Centos7.7.1908 ×1
- AwsEC2 Centos7.7.1908 ×1
- Vmware Centos7虚拟机 Centos7.7.1908 ×1
构建自己的Server集群
构建属于自己的服务器集群,听起来似乎很遥不可及,需要巨大成本的样子。但其实,将几台服务器联合起来管理使用,已经可以称得上一个小集群了.
方法一、作为学生党,可以借助BAT三个国内云服务商提供的学生主机各买一台,在40元以内的成本构建起属于自己的"服务集群",由于楼主本身用于AWS和Azure的一年优惠体验,所以只采购了阿里云的学生主机
方法二、另一种方法在Vmware创建多个虚拟主机,同时运行,也可以作为"服务集群 "。前提需要您的物理主机配置过关,否则同时开启多个虚拟主机,物理主机承受的工作负载很大。如果您拥有两台或以上个人主机,可以考虑将一台电脑部署为Esxi虚拟化平台,再创建多个虚拟机,使用另一台物理主机进行管理。本来也想使用Esxi的,只可惜楼主在学校的那台联想服务器忘了做内网穿透。
本文中Server集群指代的是虚拟主机服务集群,Machine集群指代的是物理主机集群。由于公有云服务商提供的主机本质上也属于虚拟主机,故本文实践和讨论的是Server集群。
认识Ansible
Ansible是一款基于Python开发的自动化运维工具,能够实现批量系统配置、批量程序部署、批量运行命令等
ANsible基于模块工作,常用模块包括shell模块、复制模块、用户模块、软件包模块、服务模块、文件模块、剧本模块等待
Ansible官网: https://docs.ansible.com/
安装Ansible模块及基本配置
我们无需为集群中的每台服务器部署Ansible,只需为一台主机安装Ansible作为Ansible服务器,其余作为Ansible客户机即可。为了节约云服务器资源,本文使用一台Vmware主机作为Ansible服务器。下面开始安装。
- 安装红帽拓展源
yum install -y epel-release
- 安装Ansible
yum install -y ansible
安装完成后,为了方便其他Ansible客户机的管理,在Ansible服务器的本地解析文件中添加相关信息
vim /etc/hosts
为每台客户机配置易于记忆的域名
本文将三台客户机分别命名为
aliserver、awsserver、azuserver
在配置完成后,您可以使用
ping [hostname]
检测是否可以正确解析
Ansible主机清单配置
/etc/ansible/hosts是Ansible的主机清单文件,包含连接Ansible客户机的基本信息。注意,Ansible服务器和客户机的通信是基于ssh的。接下来,由浅入深配置主机清单文件。
- 仅添加客户机
vim /etc/ansible/hosts
在末尾加入`
[ip] aliserver
[ip] awsserver
[ip] azuserver
保存退出后,输入
ansible aliserver -m ping -o -u root -k
输入密码后以及同意ssh主机密钥检测的安全提示后,得到如下提示,证明测试连通性成功
`aliserver ' SUCCESS => {
"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},
"changed": false, "ping": "pong"}`
另外两台客户机的测试同上测试连通性语句参数说明
aliserver 目标主机或主机组
-m 指定模块ping
ping 模块
-u 用户
-k 使用密码
- 添加组
编辑 /etc/hosts文件在三台主机的上一行,添加[server]字段,即定义了一个客户机组再次使用测试连通性语句`
ansible server -m ping -o -u
依此输入密码即可测试组中所有主机的连通性
- 添加主机的连接相关信息
如果不想每次测试连通性都输入一串参数,您可以在主机清单文件中添加主机配置信息,在每一行主机后面,以[参数]=参数值,空格作为参数分隔符的形式添加连接信息。例如
aliserver ansible_ssh_user='root' ansible_ssh_pass='xxx'`
常见可选参数
- 利用变量简化信息的填写
在您命名的server集群组中,如果它们的连接信息具有一致的部分,您可以使用Vars变量将参数简化。例如在定义的server组中,具有相同的端口号,用户,可以使用以下格式同一组中的主机一次性配置参数
[server]``host[1:4] #主机名的填写支持类似正则的简化填写
[server:vars]
ansible_ssh_user='root'
ansible_ssh_pass='xxx'
- 分组组合
分组不仅支持将主机划分至某个组,同时支持将组划分至一个组中,作为子组,方便集群机器的灵活管理。为了将组与主机区分,您需要使用children声明。
[server1]
host[1:2]
[server2]
host[3:4]
[server:children]
server1
server2
- 指定清单文件,方便主机清单的跨设备迁移使用
使用ansible语句操作时默认的主机清单文件是/etc/ansible/hosts。为了方便清单文件的重复和跨设备使用,您可以在主机或组参数前添加主机清单文件参数。例如存在主机清单文件hostlist,,可以使用以下语句进行操作`
ansible -i hostlist host1 -m ping -o
总结
- Ansible作为运维自动化工具,在仅使用一台主机作为ansible服务器的情况下,实现客户机的批量化管理和部署。
- Ansible服务器与客户机之间的通信基于ssh协议,请确保服务器sshd服务的正常,ssh端口号,防火墙与云服务商安全组的配置。另外,使用密码的方式进行通信并不安全,尤其是将连接信息写入主机清单文件时,存在关键信息暴露的危险
- 本文举例用到的ping如上所示,是基于ssh的通信行为,与ICMP协议无关,ping是Ansible的一个模块,Ansible的工作都是基于模块工作的,下一篇我们也会详细介绍Ansible的常用模块。
个人博客同步更新