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即可,大大提高效率。




