Ansible是目前比较流行的一款开源的自动化工具,可以使用它来自动化任务,部署应用程序实现IT基础架构。
Ansible可以用来自动化日常任务,比如,服务器的初始化配置、安装和更新软件包等。Ansible架构相对比较简单,仅需通过SSH连接客户机执行任务即可。
本文将利用Ansible 剧本编排(playbook)实现如何对MogDB的自动化安装部署,具体步骤如下:
一、环境准备
2台主机:
一台为安装Ansible的主机(192.168.9.1),
另外一台为需要部署MogDB的主机(192.168.9.21)
二、Ansible安装和配置
1、Ansible安装
使用yum进行安装Ansible(需提前进行配置好yum源)
yum install epel-release -y
yum install ansible -y
安装完成后,查看ansible版本:
[root@cs79-mysql ~]# 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, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
2、配置主机清单
修改主机清单/etc/ansible/hosts,添加主机列表
[root@cs79-mysql ansible]# pwd
/etc/ansible
#cat hosts
[dbserver]
192.168.9.21 ansible_ssh_user=root ansible_ssh_pass=123456
###192.168.9.21为本次需要安装MogDB的主机
3、测试主机连通性
[root@cs79-mysql ansible]# ansible dbserver -m ping
三、Ansible自动安装MogDB剧本编排思路
ansible-playbook配置思路:
通过vars中的main.yml配置变量,主要设置软件版本、存放目录、安装目录、密码等;
通过tasks中的main.yml将安装文件传输到远程服务器上存放目录;
通过tasks中的main.yml将MogDB安装到变量中定义的安装目录;
通过InstallMogDB.yml调用剧本(playbook)实现自动部署;
四、具体实现
1、创建相关目录
[root@cs79-mysql roles]# pwd
/etc/ansible/roles
[root@cs79-mysql roles]# mkdir -p MogDB_Install/{files,vars,tasks,templates}
[root@cs79-mysql roles]# cd MogDB_Install/
[root@cs79-mysql MogDB_Install]# ls
files tasks templates vars
#tree MogDB_Install
MogDB/
├── files
├── tasks
├── templates
└── vars
4 directories, 0 files
Playbook的目录组织结构如下:
files:存放需要同步到异地服务器的安装文件或者配置文件;
tasks:MogDB安装过程需要进行的执行的任务;
templates:用于执行MogDB安装的模板文件,一般为脚本;
vars:安装定义的变量;
2、下载MogDB软件包到files目录
下载安装包放入到/etc/ansible/roles/MogDB_Install/files目录下
[root@cs79-mysql files]# wget https://cdn-mogdb.enmotech.com/mogdb-media/3.0.1/MogDB-3.0.1-CentOS-x86_64.tar.gz
–2022-09-05 22:43:53-- https://cdn-mogdb.enmotech.com/mogdb-media/3.0.1/MogDB-3.0.1-CentOS-x86_64.tar.gz
Resolving cdn-mogdb.enmotech.com (cdn-mogdb.enmotech.com)… 58.218.215.93
Connecting to cdn-mogdb.enmotech.com (cdn-mogdb.enmotech.com)|58.218.215.93|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 139264406 (133M) [application/gzip]
Saving to: ‘MogDB-3.0.1-CentOS-x86_64.tar.gz’
100%[==================================================================================================================================================================================================>] 139,264,406 12.8MB/s in 10s
2022-09-05 22:44:04 (12.9 MB/s) - ‘MogDB-3.0.1-CentOS-x86_64.tar.gz’ saved [139264406/139264406]
#ls
MogDB-3.0.1-CentOS-x86_64.tar.gz
下载完后,进行解压(安装需用到解压后的MogDB-3.0.1-CentOS-64bit.tar.gz这个包)
#tar -xf MogDB-3.0.1-CentOS-x86_64.tar.gz
#ls -lrt
total 274016
-rw-r–r-- 1 20001 20001 107200316 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit.tar.gz
-rw-r–r-- 1 20001 20001 65 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit.sha256
-rw-r–r-- 1 20001 20001 5078313 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit-Libpq.tar.gz
-rw-r–r-- 1 20001 20001 410121 Aug 5 18:38 upgrade_sql.tar.gz
-rw-r–r-- 1 20001 20001 8028953 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit-tools.tar.gz
-rw-r–r-- 1 20001 20001 65 Aug 5 18:38 upgrade_sql.sha256
-rw-r–r-- 1 20001 20001 14167708 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit-om.tar.gz
-rw-r–r-- 1 20001 20001 65 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit-om.sha256
-rw-r–r-- 1 20001 20001 6411863 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit-cm.tar.gz
-rw-r–r-- 1 20001 20001 65 Aug 5 18:38 MogDB-3.0.1-CentOS-64bit-cm.sha256
-rw-r–r-- 1 root root 139264406 Aug 5 19:35 MogDB-3.0.1-CentOS-x86_64.tar.gz
3、创建变量文件
[root@cs79-mysql playbook]# vi /etc/ansible/roles/MogDB_Install/vars/main.yml
MogDB_version: MogDB-3.0.1-CentOS-64bit.tar.gz
#解压目录地址
dir: /opt/mogdb/
#软件安装目录名
MogDB_dir: /opt/mogdb/software
#数据目录
datadir: /opt/mogdb/data
#数据库密码
MogDB_password: Enmo@123
4、创建任务文件
[root@cs79-mysql playbook]# vi /etc/ansible/roles/MogDB_Install/tasks/main.yml
- name: 关闭防火墙
shell: systemctl disable firewalld.service && systemctl stop firewalld.service
ignore_errors: true
- name: 关闭selinux
shell: sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
ignore_errors: true
- name: 创建组
group: name=dbgrp gid=2000
- name: 创建用户
user:
name=omm uid=2000 group=dbgrp
- name: 修改密码
shell: echo 'Enmo@123' | passwd --stdin omm
- name: 新建目录
file: path="{{item}}" state=directory mode=0755 owner=omm group=dbgrp
with_items:
- /opt/mogdb/
- /opt/mogdb/software/
- /opt/mogdb/data/
- name: 上传安装包
copy: src={{MogDB_version}} dest={{dir}} owner=omm group=dbgrp mode=0644
tags: install
- name: "解压软件包"
unarchive: src={{dir}}/{{MogDB_version}} dest={{MogDB_dir}} copy=no list_files=yes
- name: "安装依赖包"
yum: name="gcc,gcc-c++,libaio-devel" state=installed
- name: "配置环境变量"
shell: echo -e "export GAUSSHOME={{MogDB_dir}}\nexport PATH={{MogDB_dir}}/bin:\$PATH\nexport LD_LIBRARY_PATH=\$GAUSSHOME/lib:\$LD_LIBRARY_PATH" >> /home/omm/.bashrc
- name: "修改属主属组"
shell: chown omm:dbgrp -R /opt/mogdb/ warn=false
- name: "初始化数据库"
shell: su - omm -c " gs_initdb --pgdata={{datadir}} --nodename=primary --pwpasswd={{MogDB_password}} --encoding=UTF-8 --locale=en_US.UTF-8 "
- name: "修改初始化参数"
shell: |
echo -e "port=26000\nlisten_addresses = '0.0.0.0'\npassword_encryption_type = 0\nlog_directory = 'pg_log'\nremote_read_mode=non_authentication" >> {{datadir}}/postgresql.conf && chown omm.dbgrp {{datadir}}/postgresql.conf
echo -e "host all all 0.0.0.0/0 md5" >> {{datadir}}/pg_hba.conf && chown omm.dbgrp {{datadir}}/pg_hba.conf
- name: "启动MogDB"
shell: ss -anpt|grep 26000 && su - omm -c "gs_ctl restart -D {{datadir}} " || su - omm -c "gs_ctl start -D {{datadir}} "
- name: "登录数据库"
shell: ss -anpt|grep 26000 && su - omm -c "gsql -d postgres -p26000 -r -l"
5、创建MogDB角色文件,用于调用MogDB_Install
[root@cs79-mysql playbook]# vi /etc/ansible/playbook/InstallMogDB.yml
- name: Install MogDB
hosts: dbserver
remote_user: root
roles:
- MogDB_Install
6、检验yml文件
yml文件校验没有问题,开始进行自动化安装
7、自动化安装MogDB
[root@cs79-mysql playbook]# ansible-playbook InstallMogDB.yml
8、登录数据库
安装完成后,登录数据库进行验证
[root@MogDB ~]# su - omm
Last login: Tue Sep 6 10:40:28 CST 2022 from 192.168.9.1 on pts/1
[omm@MogDB ~]$ gsql -d postgres -p26000
gsql ((MogDB 3.0.1 build 1a363ea9) compiled at 2022-08-05 17:31:04 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+-------------+-------------+-------------------
postgres | omm | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | omm | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/omm +
| | | | | omm=CTc/omm
template1 | omm | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/omm +
| | | | | omm=CTc/omm
(3 rows)
MogDB=#
至此,自动化部署MogDB完毕,如果有多台机器需要部署,添加主机相关信息到/etc/ansible/hosts即可,大大提高效率。