OphidiaBigData.ophidia-cluster
Ophidia 集群角色
这个 ansible 角色部署并配置一个 ECAS 集群,为基于 Ophidia 框架、JupyterHub 和基于 Grafana 的监控系统的科学数据分析提供完整的环境。
简介
这个库包含已发布在 Ansible Galaxy 上的 Ansible 角色:https://galaxy.ansible.com/OphidiaBigData/ophidia-cluster/
角色变量
- cert_passwd:证书和用户账号的密码
- ophdb_passwd:MySQL 的密码
- oph_user:运行 Ophidia 框架的用户
- oph_account_user:要创建的 Ophidia 用户账号的用户名
- oph_account_passwd:要创建的 Ophidia 用户账号的密码
- base_path:共享数据文件夹的基础路径
- io_prefix:Ophidia IO 节点的主机名前缀
- io_node_number:集群中考虑的 IO 节点数量
- io_hostnames:Ophidia IO 节点的主机名列表
- io_cpus:Ophidia IO 节点的核心数
- io_ips:Ophidia IO 节点的 IP 地址列表
- server_hostname:Ophidia 服务器节点的主机名
- private_server_ip:Ophidia 服务器节点的私有 IP 地址
- public_server_ip:Ophidia 服务器节点的公共 IP 地址
- nfs_subnet:Ophidia io-compute 节点的子网(用于 NFS 文件夹挂载)
- mysql_subnet:集群节点上 MySQL 服务器的子网(用于数据库授权)
- deploy_type:部署类型('install'、'configure' 或 'complete')
- node_type:要部署的节点类型('server'、'io' 或 'single')
- user_home:用户主目录的路径
- force_reinstall:标志(false 或 true),用于定义在角色第二次执行时是否更新实例
依赖关系
需要 grycap.nfs 和 grycap.slurm 角色。
要求
需要至少 Ansible v2.3。
示例剧本
安装和配置 ECAS 集群的示例剧本:
- hosts: oph-server
pre_tasks:
- name: 从 oph-io 收集信息
setup:
delegate_to: "{{ item }}"
delegate_facts: true
loop: "{{ groups['oph-io'] }}"
- name: 创建 NFS 共享目录
file: path=/data state=directory owner=root group=root
roles:
- { role: 'OphidiaBigData.ophidia-cluster', node_type: 'server', deploy_type: 'complete', server_hostname: "{{ansible_hostname}}", io_hostnames: "{{ groups['oph-io']|map('extract', hostvars, 'ansible_hostname')|list }}", io_ips: "{{ groups['oph-io']|map('extract', hostvars, ['ansible_default_ipv4','address'])|list if 'oph-io' in groups else []}}", private_server_ip: "{{ ansible_default_ipv4.address }}", public_server_ip: "{{ ansible_default_ipv4.address }}", nfs_subnet: 'oph-*', mysql_subnet: 'oph-%'}
- hosts: oph-io
roles:
- { role: 'OphidiaBigData.ophidia-cluster', node_type: 'io', deploy_type: 'complete', server_hostname: "{{ hostvars['oph-server']['ansible_hostname'] }}", io_hostnames: "{{ groups['oph-io']|map('extract', hostvars, 'ansible_hostname')|list if 'oph-io' in groups else []}}", io_ips: "{{ groups['oph-io']|map('extract', hostvars, ['ansible_default_ipv4', 'address'])|list if 'oph-io' in groups else []}}", private_server_ip: "{{ hostvars['oph-server']['ansible_default_ipv4']['address'] }}", public_server_ip: "{{ hostvars['oph-server']['ansible_default_ipv4']['address'] }}", nfs_subnet: "oph-*", mysql_subnet: "oph-%" }