ansible-playbook 写arm版达梦7数据库的一键安装脚本

达梦官方提供镜像目前是dm8_x86 版本,因为众所周知的国产化方面的需求,需要在kylin v10机器上部署一个DM数据库以及其他使用数据库的服务,为了更便捷的交付需要把安装步骤都写入到ansible 脚本里,这里就单说下DM 的部署

DM7 数据库镜像build

先使用安装包在Arm宿主机上进行安装

#创建安装目录
mkdir /dm7
#更改目录权限
chown dmdba.dinstall -R /dm7#创建用户组
groupadd distall
#创建安装用户
useradd -g distall dmdba
#初始化用户密码
passwd dmdba#dmdba用户的~/.bash_profile 里添加如下内容:export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm7/bin"
export DM_HOME="/dm7"
export PATH=$DM_HOME/bin:$PATH:$HOME/bin# 数据库安装./DMInstall.bin -i# 通过执行dminit文件初始化实例参数来创建实例
./dminit PATH=/dm7/data LOG_PATH=/dm7/data/DAMENG/DAMENG01.log LOG_PATH=/dm7/data/DAMENG/DAMENG02.log LOG_PATH=/dm7/data/DAMENG/DAMENG03.log EXTENT_SIZE=16 PAGE_SIZE=8 LOG_SIZE=500 CASE_SENSITIVE=Y DB_NAME=DAMENG INSTANCE_NAME=DMSERVER port_num=5236 SYSDBA_PWD=123456789012# 创建数据库服务实例
./dm_service_installer.sh -t dmserver -i /dm7/data/DAMENG/dm.ini -p DMSERVER# 启动数据库
./DmServiceDMSERVER start

安装目录在/dm7 目录

构建镜像Dockerfile, 把宿主机上安装二进制文件服务到镜像里

FROM centos:centos8COPY /dm7 /WORKDIR /dm7

构建镜像 dm7:centos_kylin_arm64

安装脚本

ansible 安装入口 install.yaml

  hosts: node_hostsgather_facts: falsevars:ansible_python_interpreter: /usr/bin/python2tasks:# 加载所有镜像- name: load all images for dm, harbor etc.include_role:name: deploytasks_from: 01.loadimages.ymlwhen: (deploy_type is not defined) or (deploy_type == "loadimages")tags: [ "always" ]# 创建dm的namespace- name: Create namespaceinclude_role:name: deploytasks_from: 02.create_ns.ymlwhen: (deploy_type is not defined) or (deploy_type == "create_namespace")tags: [ "always" ]# 部署 dm 数据库- name: Deploy DMinclude_role:name: deploy_rlstudiotasks_from: 03.dm.ymlwhen: (deploy_type is not defined) or (deploy_type == "dm")tags: [ "always" ]

01.loadimages.yml

- name: Load all imagesargs:chdir: "{{ role_path }}/images/"shell: |echo "load all images"# 查找当前目录及其子目录下的所有 .tar 文件,并循环处理find . -type f -name "*.tar" | while read -r tar_file; doecho "Loading Docker image from: $tar_file"docker load -i "$tar_file"if [ $? -eq 0 ]; thenecho "Successfully loaded: $tar_file"elseecho "Failed to load: $tar_file"fidoneecho "All .tar files have been processed."ignore_errors: True

01.create_ns.yml

- name: Create dm namespaceshell: "kubectl create namespace {{ dm7_namespace }} "ignore_errors: True

03.dm.yml

- name: Label dm7 node | rlstudio/dataNode=dmdelegate_to: "{{ inventory_hostname }}"shell: "{{ kubectl }} label --overwrite node {{ inventory_hostname }} rlstudio/dataNode=dm"vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Ensure parent directory existsfile:path: "{{ dm7_dir }}"state: directorymode: 0755become: yesvars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Deploy dm7 | copy persistent volumecopy:src: "{{ role_path }}/files/dm7/data"dest: "{{ dm7_dir }}"mode: 0755delegate_to: "{{ inventory_hostname }}"run_once: truebecome: yesvars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: chmod dm7 persistent volume | sudo chmod -R 777 /dm7/datadelegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"shell: |sudo chmod -R 777 /dm7/data- name: Deploy dm7 | modify dm7.yaml (nodePort)delegate_to: "{{ inventory_hostname }}"run_once: trueshell: "sed -i 's/nodePort:.*$/nodePort: {{ rlstudio_dm7_port }}/' {{ role_path }}/files/dm_dp/dm7_svc.yaml"vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Deploy dm7 | modify dm7.yaml (pvc path)delegate_to: "{{ inventory_hostname }}"run_once: trueshell: "sed -i 's#path:.*$#path: {{ dm7_dir }}#' {{ role_path }}/files/dm_dp/dm7_dp.yaml"vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Check if PVC existsshell: "kubectl get pvc dm7-data-pvc -n dm --ignore-not-found"register: pvc_checkdelegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Apply PVC if it does not existshell: "kubectl apply -f {{ role_path }}/files/dm_dp/dm7_pvc.yaml"when: pvc_check.stdout == ""delegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Deploy dmdelegate_to: "{{ inventory_hostname }}"run_once: trueshell: "kubectl apply -f {{ role_path }}/files/dm_dp/dm7_dp.yaml -n {{ dm7_namespace }}"vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Check if dm7-nodeport Service exists and get detailsshell: "kubectl get service dm7-nodeport -n dm -o json --ignore-not-found"register: service_checkdelegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"ignore_errors: yes- name: Apply dm7-nodeport Service if it does not existshell: "kubectl apply -f {{ role_path }}/files/dm_dp/dm7_svc.yaml"when: service_check.stdout | length == 0delegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Deploy dm7 | Check dm7 statusblock:- name: Check status dm7 is runningshell: "{{ kubectl }} get pod -n dm --no-headers | awk '{print $3}'"register: shell_resultretries: 40delay: 20until: shell_result.stdout == "Running"vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"rescue:- name: Status of dm7 is not runningfail:msg: "Please check dm7 status"vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"

上面涉及k8s deployment 的部署文件

dm7_dp.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:name: dm7namespace: dm
spec:replicas: 1selector:matchLabels:app: apps.deployment-dm-dm7template:metadata:labels:app: apps.deployment-dm-dm7spec:containers:- name: container-0image: dm7:centos_kylin_arm64imagePullPolicy: IfNotPresentports:- containerPort: 5236name: 5236tcp31236protocol: TCPvolumeMounts:- mountPath: /dm7/dataname: dm7-datavolumes:- name: dm7-datapersistentVolumeClaim:claimName: dm7-data-pvc

dm7_pvc.yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: dm7-data-pvnamespace: dm
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncehostPath:path: /dm7/data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: dm7-data-pvcnamespace: dm
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi

dm7_svc.yaml

apiVersion: v1
kind: Service
metadata:name: dm7-nodeportnamespace: dm
spec:type: NodePortselector:app: apps.deployment-dm-dm7ports:- name: 5236tcp31236port: 5236targetPort: 5236nodePort: 31236protocol: TCP

执行安装脚本

ansible-playbook playbooks/install.yml -e deploy_type=dm

启动成功

工具测试下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络:华为数通HCIA学习:静态路由基础

文章目录 前言静态路由基础静态路由应用场景 静态路由配置静态路由在串行网络的配置静态路由在以太网中的配置 负载分担配置验证 路由备份(浮动静态路由)配置验证 缺省路由配置验证 总结 华为HCIA 基础实验-静态路由 & eNSP静态路由 基础…

无人机等非合作目标公开数据集2025.4.3

一.无人机遥感数据概述 1.1 定义与特点 在遥感技术的不断发展中,无人机遥感数据作为一种新兴的数据源,正逐渐崭露头角。它是通过无人驾驶飞行器(UAV)搭载各种传感器获取的地理空间信息,具有 覆盖范围大、综合精度高、…

详细介绍一下C++中的extern关键字

在C中,extern 是一个用于声明变量或函数具有外部链接性的关键字,它告诉编译器该符号的定义存在于其他文件(或作用域)中,当前文件仅需引用它。extern 常用于多文件编程和跨模块协作,以下是其详细说明&#x…

英语口语 -- 常用 1368 词汇

英语口语 -- 常用 1368 词汇 介绍常用单词List1 (96 个)时间类气候类自然类植物类动物类昆虫类其他生物地点类 List2 (95 个)机构类声音类食品类餐饮类蔬菜类水果类食材类饮料类营养类疾病类房屋类家具类服装类首饰类化妆品类 Lis…

中级:Git面试题全攻略

一、引言 在现代软件开发中,Git作为分布式版本控制系统,被广泛应用于代码管理与团队协作。面试官通过Git相关问题,考察候选人对版本控制的基本概念、操作流程以及解决实际问题的能力。本文将深入解读Git的基本操作、分支管理、冲突解决等常见…