前情回顾

前面介绍了“光环”数据库的基本情况和安装办法。

以及 HaloDB 的 Oracle 和 MySQL 兼容模式:

HaloDB是基于原生PG打造的新一代高性能安全自主可控全场景通用型统一数据库。 业内首次创造性的提出插件式内核架构设计,通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求。从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持x86、arm等异构平台之间的混合部署。

但有同学问,三步走还是太复杂,有没有更简单的安装方式。

答案是有的,《HaloDB产品吐槽群》群里提供了shell版本的一键安装脚本,留言带你进群。

言归正传。

本文将介绍另外一种快速部署的实现,编写 Ansible 脚本快速安装 HaloDB。

环境信息

本文实操环境为 CentOS 7.9 和 HaloDB 1.0.14

系统版本:

$ hostnamectl
   Static hostname: centos7.shawnyan.cn
...
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.118.1.el7.x86_64
      Architecture: x86-64

halo 安装包:

halo_14.el7.x86_64.build231130.tar.gz

Ansible 是什么

Ansible 是红帽转为企业运维设计的一个开源的自动化平台,它允许系统管理员自动化云提供商、企业网络和数据中心的配置、部署、更新、监控和安全管理。

Ansible 使用SSH来管理节点,因此不需要在目标服务器上安装代理。Ansible 使用YAML语言编写剧本(playbooks),语法简单,易于理解和编写。

Ansible 拥有丰富的模块库,可以执行各种系统管理任务。Ansible 可以并行执行任务,同时安装多台机器,提高自动化效率,节约部署时间。

(几个Ansible和HaloDB的彩蛋)

  • tux
< TASK [Hello, HaloDB!] >
 -----------------------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/
  • elephant
< TASK [Hello, HaloDB!] >
 -----------------------
 \     /\  ___  /\
  \   // \/   \/ \\
     ((    O O    ))
      \\ /     \ //
       \/  | |  \/
        |  | |  |
        |  | |  |
        |   o   |
        | |   | |
        |m|   |m|
  • dragon
< TASK [Hello, HaloDB!] >
 -----------------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \
           /     /  \/_/    //   |  \  \
           @_^_@'/   \/_   //    |   \   \
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~

如何使用 Ansible 快速部署 Halo

使用 Ansible 快速部署 HaloDB 数据库通常涉及以下步骤:

1. 安装Ansible

确保你的控制节点(运行Ansible的机器)上安装了Ansible。

yum install ansible python-psycopg2
ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 2.7.5 (default, Nov 14 2023, 16:14:06) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

2. 编写Playbook

创建一个名为 deploy_halo.yml 的 Ansible playbook 来定义部署步骤。

接下来分析一下 deploy_halo.yml 都包含哪些模块。

  1. yum 模块

定义了一个变量packages,它包含一个列表,列表中包含要安装的软件包名称。

使用yum模块来安装HaloDB的依赖包。

yum:
  name: "{{ packages }}"
vars:
packages:
  - sysstat
  - ...
  1. user 模块

使用user模块创建halo系统用户,该用户用于管理halo数据库。

user:
  name: halo
  uid: 2024
  group: halo
  state: present

参数含义如下:

  • name: 要创建的用户的名称。
  • uid: 指定用户的用户ID。
  • group: 指定用户的主要组。
  • state: 指定期望的状态,present表示确保用户存在。
  1. shell 模块

使用shell模块执行shell命令,这里用于解压软件包、复制文件和修改文件所有权。

- name: unpackge halo
  shell: |
    mkdir -p /opt/halo
    chown -R halo:halo /opt/halo
  1. command 模块

使用command模块执行命令,这里用于初始化和启动数据库。

- name: inin halo db
  become_user: halo
  become_flags: "-i"
  command: pg_ctl init

参数含义如下:

  • become_user: 指定以哪个用户身份执行命令。
  • become_flags: 指定用户身份执行命令的标志,-i表示使用该用户环境变量。
  1. postgresql_query 模块
postgresql_query:
  db: halo0root
  port: 1921
  login_user: halo
  query: SELECT version()

参数含义如下:

  • db: 指定要查询的数据库名称,这里指定为 halo0root。
  • port: 指定数据库服务监听的端口,halodb默认端口为1921。
  • login_user: 指定用于登录数据库的用户名。
  • query: 指定要执行的SQL查询,这里是查询halodb的版本。

3. 执行Playbook

运行playbook来进行自动化部署。

准备好了playbook,我们就可以运行脚本部署halodb,执行命令如下。

ansible-playbook deploy_halo.yml

<!-- date; ANSIBLE_NOCOWS=1 ansible-playbook deploy_halo.yml; date -->

安装日志输出如下:

Tue May 28 20:56:57 CST 2024

PLAY [Deploy HaloDB] *************************************************************************************************************************

...

TASK [start halo db] *************************************************************************************************************************
changed: [localhost]

TASK [query db version] **********************************************************************************************************************
ok: [localhost]

TASK [debug] *********************************************************************************************************************************
ok: [localhost] => {
    "msg": {
        "version": "羲和(Halo) 1.0.14.10 (231130) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit"
    }
}

PLAY RECAP ***********************************************************************************************************************************
localhost                  : ok=11   changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Tue May 28 20:57:06 CST 2024

总结

到此,我们借助Ansible实现了快速部署并拉起Halo数据库,安装效率比纯手工提高了很多。

好了,这一部分内容先介绍到这里,如果你对HaloDB感兴趣,欢迎留言,带你进《HaloDB产品吐槽群》。

#halo #postgresql #ansible