Initial commit
This commit is contained in:
commit
84c07990b4
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"DockerRun.DisableDockerrc": true
|
||||
}
|
||||
63
README.md
Normal file
63
README.md
Normal file
@ -0,0 +1,63 @@
|
||||
# OpenGauss Docker 单节点部署
|
||||
|
||||
这个Ansible项目用于快速部署OpenGauss Docker单节点实例,基于官方OpenGauss容器镜像。
|
||||
|
||||
## 前提条件
|
||||
|
||||
- 目标服务器能够连接互联网
|
||||
- 目标服务器上已安装Python 3
|
||||
- 部署服务器上已安装Ansible
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 配置部署
|
||||
|
||||
1. 编辑 `inventory.ini` 文件,配置目标服务器信息:
|
||||
|
||||
```ini
|
||||
[opengauss_servers]
|
||||
opengauss ansible_host=192.168.1.100 ansible_user=root ansible_port=22
|
||||
```
|
||||
|
||||
2. 根据需要修改 `vars/main.yml` 中的变量:
|
||||
|
||||
```yaml
|
||||
# OpenGauss Docker配置
|
||||
opengauss_version: "latest" # 使用最新版本
|
||||
opengauss_container_name: "opengauss" # 容器名称
|
||||
opengauss_port: 5432 # 容器内端口
|
||||
opengauss_host_port: 8888 # 宿主机映射端口
|
||||
opengauss_password: "Gauss@123" # 数据库密码,请修改为符合复杂度要求的密码
|
||||
```
|
||||
|
||||
### 2. 执行部署
|
||||
|
||||
```bash
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
部署成功后,将显示连接信息。
|
||||
|
||||
### 3. 连接数据库
|
||||
|
||||
使用以下命令连接数据库:
|
||||
|
||||
```bash
|
||||
gsql -d postgres -U gaussdb -W'您的密码' -h 服务器IP -p 8888
|
||||
```
|
||||
|
||||
## 密码复杂度要求
|
||||
|
||||
OpenGauss密码必须符合以下要求:
|
||||
- 长度8个字符以上
|
||||
- 必须同时包含大写字母、小写字母、数字、以及特殊符号
|
||||
- 特殊符号仅包含"#?!@$%^&*-"
|
||||
- "!$&"需要用转义符"\"进行转义
|
||||
|
||||
## 数据持久化
|
||||
|
||||
数据被持久化保存在目标服务器的 `/opengauss` 目录,可以通过修改 `vars/main.yml` 文件中的 `opengauss_data_dir` 变量来更改。
|
||||
|
||||
## 官方文档
|
||||
|
||||
更多信息请参考[OpenGauss容器镜像安装官方文档](https://docs.opengauss.org/zh/docs/latest/docs/InstallationGuide/%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E5%AE%89%E8%A3%85.html)
|
||||
10
ansible.cfg
Normal file
10
ansible.cfg
Normal file
@ -0,0 +1,10 @@
|
||||
[defaults]
|
||||
inventory = inventory.ini
|
||||
host_key_checking = False
|
||||
deprecation_warnings = False
|
||||
timeout = 30
|
||||
pipelining = True
|
||||
|
||||
[ssh_connection]
|
||||
retries = 3
|
||||
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
|
||||
44
deploy.sh
Executable file
44
deploy.sh
Executable file
@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 颜色设置
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # 无颜色
|
||||
|
||||
# 显示欢迎信息
|
||||
echo -e "${BLUE}====================================================${NC}"
|
||||
echo -e "${BLUE} OpenGauss Docker 单节点部署工具 ${NC}"
|
||||
echo -e "${BLUE}====================================================${NC}"
|
||||
|
||||
# 检查ansible是否安装
|
||||
if ! command -v ansible &> /dev/null; then
|
||||
echo -e "${RED}错误: 未检测到ansible命令, 请先安装ansible${NC}"
|
||||
echo "安装命令: pip install ansible"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查inventory.ini文件是否已经配置
|
||||
if grep -q "<your_server_ip>" inventory.ini; then
|
||||
echo -e "${RED}错误: 请先修改inventory.ini文件,配置服务器IP、用户名和SSH端口${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 运行ansible playbook
|
||||
echo -e "${GREEN}开始部署 OpenGauss Docker 单节点...${NC}"
|
||||
ansible-playbook -i inventory.ini deploy.yml
|
||||
|
||||
# 检查部署结果
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}OpenGauss Docker 单节点部署成功!${NC}"
|
||||
echo -e "${GREEN}以下是连接信息:${NC}"
|
||||
echo -e "${GREEN} 主机: 目标服务器IP${NC}"
|
||||
echo -e "${GREEN} 端口: 8888${NC}"
|
||||
echo -e "${GREEN} 用户: gaussdb${NC}"
|
||||
echo -e "${GREEN} 密码: 在vars/main.yml中配置的密码${NC}"
|
||||
echo -e "${GREEN} 连接命令: gsql -d postgres -U gaussdb -W'您的密码' -h 服务器IP -p 8888${NC}"
|
||||
else
|
||||
echo -e "${RED}OpenGauss Docker 单节点部署失败!${NC}"
|
||||
echo -e "${RED}请检查错误输出并尝试修复问题.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
8
deploy.yml
Normal file
8
deploy.yml
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
- name: 部署OpenGauss Docker单节点
|
||||
hosts: opengauss_servers
|
||||
become: true
|
||||
vars_files:
|
||||
- vars/main.yml
|
||||
roles:
|
||||
- opengauss-docker
|
||||
23
group_vars/opengauss_servers/vars.yml
Normal file
23
group_vars/opengauss_servers/vars.yml
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
# Docker 相关配置
|
||||
docker_repository: https://download.docker.com/linux/centos/docker-ce.repo
|
||||
docker_packages:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
|
||||
# OpenGauss 相关配置
|
||||
opengauss_version: "latest"
|
||||
opengauss_container_name: "opengauss-server"
|
||||
opengauss_data_dir: "/data/opengauss"
|
||||
opengauss_container_data_dir: "/var/lib/opengauss/data"
|
||||
opengauss_host_port: "8888"
|
||||
opengauss_port: "5432"
|
||||
opengauss_password: "Gauss@123"
|
||||
opengauss_nodename: "gaussdb"
|
||||
opengauss_username: "gaussdb"
|
||||
opengauss_dbname: "postgres"
|
||||
|
||||
# 确保所有端口类型变量都是字符串
|
||||
opengauss_host_port: "{{ opengauss_host_port | string }}"
|
||||
opengauss_port: "{{ opengauss_port | string }}"
|
||||
5
inventory.ini
Normal file
5
inventory.ini
Normal file
@ -0,0 +1,5 @@
|
||||
[opengauss_servers]
|
||||
opengauss ansible_host=ihwpc2.1msoft.cn ansible_user=root ansible_port=31822
|
||||
|
||||
[all:vars]
|
||||
ansible_python_interpreter=/usr/bin/python3
|
||||
23
roles/opengauss-docker/tasks/check_prerequisites.yml
Normal file
23
roles/opengauss-docker/tasks/check_prerequisites.yml
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
# 检查Python
|
||||
- name: 检查Python版本
|
||||
command: python3 --version
|
||||
register: python_version
|
||||
ignore_errors: yes
|
||||
changed_when: false
|
||||
|
||||
- name: 显示Python版本
|
||||
debug:
|
||||
msg: "Python版本: {{ python_version.stdout }}"
|
||||
when: python_version.rc == 0
|
||||
|
||||
# 检查Docker是否已安装
|
||||
- name: 检查Docker是否已安装
|
||||
command: docker --version
|
||||
register: docker_check
|
||||
ignore_errors: yes
|
||||
changed_when: false
|
||||
|
||||
- name: 显示Docker安装状态
|
||||
debug:
|
||||
msg: "Docker已安装: {{ docker_check.stdout if docker_check.rc == 0 else '未安装' }}"
|
||||
147
roles/opengauss-docker/tasks/main.yml
Normal file
147
roles/opengauss-docker/tasks/main.yml
Normal file
@ -0,0 +1,147 @@
|
||||
---
|
||||
# 检查前置条件
|
||||
- name: 检查前置条件
|
||||
include_tasks: check_prerequisites.yml
|
||||
|
||||
# 安装依赖包
|
||||
- name: 安装必要的系统工具 (RedHat系列)
|
||||
package:
|
||||
name:
|
||||
- yum-utils
|
||||
- device-mapper-persistent-data
|
||||
- lvm2
|
||||
state: present
|
||||
when: ansible_facts['os_family'] == "RedHat"
|
||||
|
||||
- name: 安装必要的系统工具 (Debian系列)
|
||||
apt:
|
||||
name:
|
||||
- apt-transport-https
|
||||
- ca-certificates
|
||||
- curl
|
||||
- gnupg-agent
|
||||
- software-properties-common
|
||||
state: present
|
||||
when: ansible_facts['os_family'] == "Debian"
|
||||
|
||||
- name: 安装必要的系统工具 (Darwin)
|
||||
homebrew:
|
||||
name:
|
||||
- docker
|
||||
state: present
|
||||
when: ansible_facts['os_family'] == "Darwin"
|
||||
|
||||
# 添加Docker仓库
|
||||
- name: 添加Docker仓库
|
||||
get_url:
|
||||
url: "{{ docker_repository }}"
|
||||
dest: /etc/yum.repos.d/docker-ce.repo
|
||||
mode: '0644'
|
||||
when: ansible_facts['os_family'] == "RedHat"
|
||||
|
||||
# 安装Docker
|
||||
- name: 安装Docker
|
||||
package:
|
||||
name: "{{ docker_packages }}"
|
||||
state: present
|
||||
when: docker_check.rc != 0
|
||||
|
||||
# 启动Docker服务
|
||||
- name: 启动并启用Docker服务
|
||||
systemd:
|
||||
name: docker
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
# 创建OpenGauss数据目录
|
||||
- name: 创建OpenGauss数据目录
|
||||
file:
|
||||
path: "{{ opengauss_data_dir }}"
|
||||
state: directory
|
||||
mode: '0777'
|
||||
|
||||
# 拉取官方OpenGauss镜像
|
||||
- name: 拉取OpenGauss Docker镜像
|
||||
docker_image:
|
||||
name: "opengauss/opengauss-server:{{ opengauss_version }}"
|
||||
source: pull
|
||||
register: pull_image_result
|
||||
|
||||
# 停止并移除已存在的容器(如果存在)
|
||||
- name: 检查容器是否存在
|
||||
command: docker ps -a -f name={{ opengauss_container_name }}
|
||||
register: container_exists
|
||||
changed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
- name: 移除已存在的容器
|
||||
command: docker rm -f {{ opengauss_container_name }}
|
||||
when: opengauss_container_name in container_exists.stdout
|
||||
ignore_errors: true
|
||||
|
||||
# 运行OpenGauss容器
|
||||
- name: 运行OpenGauss Docker容器
|
||||
docker_container:
|
||||
name: "{{ opengauss_container_name }}"
|
||||
image: "opengauss/opengauss-server:{{ opengauss_version }}"
|
||||
state: started
|
||||
privileged: yes
|
||||
restart_policy: always
|
||||
ports:
|
||||
- "{{ opengauss_host_port }}:{{ opengauss_port }}"
|
||||
env:
|
||||
GS_PASSWORD: "{{ opengauss_password | string }}"
|
||||
GS_NODENAME: "{{ opengauss_nodename | string }}"
|
||||
GS_USERNAME: "{{ opengauss_username | string }}"
|
||||
GS_USER_PASSWORD: "{{ opengauss_password | string }}"
|
||||
GS_PORT: "{{ opengauss_port | string }}"
|
||||
GS_DB: "{{ opengauss_dbname | string }}"
|
||||
volumes:
|
||||
- "{{ opengauss_data_dir }}:{{ opengauss_container_data_dir }}"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "gs_ctl query -D {{ opengauss_container_data_dir }}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
|
||||
# 等待OpenGauss服务启动
|
||||
- name: 等待OpenGauss服务启动
|
||||
pause:
|
||||
seconds: 60 # 增加等待时间确保服务完全启动
|
||||
|
||||
# 检查OpenGauss连接
|
||||
- name: 检查OpenGauss容器状态
|
||||
command: docker ps -f name={{ opengauss_container_name }} --format "{{ '{{' }}.Status{{ '}}' }}"
|
||||
register: container_status
|
||||
changed_when: false
|
||||
retries: 5
|
||||
delay: 10
|
||||
until: container_status.stdout.find("healthy") != -1 or container_status.stdout.find("Up") != -1
|
||||
|
||||
- name: 显示OpenGauss容器状态
|
||||
debug:
|
||||
msg: "OpenGauss容器状态: {{ container_status.stdout }}"
|
||||
|
||||
# 验证数据库连接
|
||||
- name: 等待数据库端口可用
|
||||
wait_for:
|
||||
host: localhost
|
||||
port: "{{ opengauss_port }}"
|
||||
timeout: 300
|
||||
state: started
|
||||
|
||||
- name: 测试数据库连接
|
||||
command: >
|
||||
docker exec {{ opengauss_container_name }}
|
||||
gsql -d {{ opengauss_dbname }}
|
||||
-U {{ opengauss_username }}
|
||||
-W {{ opengauss_password }}
|
||||
-p {{ opengauss_port }}
|
||||
-c "SELECT version();"
|
||||
register: db_test
|
||||
changed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
- name: 显示数据库连接测试结果
|
||||
debug:
|
||||
msg: "数据库连接测试结果: {{ db_test.stdout if db_test.rc == 0 else db_test.stderr }}"
|
||||
21
vars/main.yml
Normal file
21
vars/main.yml
Normal file
@ -0,0 +1,21 @@
|
||||
---
|
||||
# OpenGauss Docker配置
|
||||
opengauss_version: "latest"
|
||||
opengauss_container_name: "opengauss"
|
||||
opengauss_port: 5432
|
||||
opengauss_host_port: 8888
|
||||
opengauss_password: "Gauss@123" # 请修改为符合复杂度要求的密码
|
||||
opengauss_nodename: "gaussdb"
|
||||
opengauss_username: "gaussdb"
|
||||
opengauss_dbname: "postgres"
|
||||
|
||||
# 数据持久化
|
||||
opengauss_data_dir: "/opengauss"
|
||||
opengauss_container_data_dir: "/var/lib/opengauss"
|
||||
|
||||
# Docker配置
|
||||
docker_repository: "https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo"
|
||||
docker_packages:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
Loading…
x
Reference in New Issue
Block a user