ansible是目前比较流行的一款开源的自动化工具,可以使用它来自动化任务,部署应用程序实现it基础架构。
ansible可以用来自动化日常任务,比如,服务器的初始化配置、安装和更新软件包等。ansible架构相对比较简单,仅需通过ssh连接客户机执行任务即可。
本文将利用ansible 剧本编排(playbook)实现如何对mogdb的自动化安装部署,具体步骤如下:
2台主机:
一台为安装ansible的主机(192.168.9.1),
另外一台为需要部署mogdb的主机(192.168.9.21)
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-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即可,大大提高效率。