Docker部署SQL Server 2019 Always On集群的实现

下面我来简单介绍一下Docker部署SQL Server 2019 Always On集群的实现攻略。

一、概述

SQL Server 2019 Always On集群是一种高可用的解决方案,可以保证数据库服务的连续性和可靠性。而采用Docker部署SQL Server 2019 Always On集群,则可以更容易地进行部署和管理。

二、实现步骤

  1. 准备Docker环境

首先需要在服务器上安装并启动Docker服务,具体安装过程可以参考官方文档进行配置。

  1. 编写Dockerfile文件

在准备好Docker环境之后,需要编写Dockerfile文件,以创建包含SQL Server 2019的Docker映像。以下是一份示例的Dockerfile代码:

#基础镜像
FROM mcr.microsoft.com/mssql/server:2019-latest

#设置环境变量
ENV MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>
ENV ACCEPT_EULA=Y

#运行SQL Server安装脚本
COPY install.sql /var/opt/mssql/init/
RUN /opt/mssql/bin/sqlservr & sleep 10 \
    && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourStrong!Passw0rd>' \
       -Q 'CREATE DATABASE testdb;' \
    && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourStrong!Passw0rd>' \
       -Q 'USE testdb; CREATE TABLE testtable (id INT, name VARCHAR(200));'

其中,""是SQL Server管理员帐户的密码。

  1. 构建Docker映像

编写好Dockerfile文件后,执行以下命令构建Docker映像:

docker build -t sql2019 .

其中,“sql2019”是构建的Docker映像名称。

  1. 创建Docker容器

在Docker映像构建完成后,需要创建Docker容器来部署SQL Server 2019 Always On集群。以下是示例的Docker容器创建命令:

docker run --name sql1 -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" \
-p 1433:1433 -d sql2019

其中,“sql1”是创建的Docker容器名称,“-e”参数用于设置环境变量,“-p”参数用于设置端口映射。

  1. 配置SQL Server 2019 Always On集群

在创建好Docker容器后,需要进一步配置SQL Server 2019 Always On集群。以下是示例的配置命令:

CREATE LOGIN [login] WITH PASSWORD = '<YourPassword>';
CREATE AVAILABILITY GROUP [testag] WITH (CLUSTER_TYPE = EXTERNAL);

ALTER AVAILABILITY GROUP [testag] JOIN REPLICA ON 'sql1' WITH (ENDPOINT_URL = 'TCP://sql1:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);

ALTER AVAILABILITY GROUP [testag] GRANT CREATE ANY DATABASE;
ALTER AVAILABILITY GROUP [testag] GRANT VIEW ANY DATABASE;
ALTER AVAILABILITY GROUP [testag] GRANT VIEW SERVER STATE;

CREATE AVAILABILITY GROUP [testag] GRANT CONNECT SQL TO [login];
CREATE AVAILABILITY GROUP [testag] GRANT VIEW SERVER STATE TO [login];
CREATE AVAILABILITY GROUP [testag] GRANT VIEW ANY DATABASE TO [login];

这些命令用于创建登录帐户、创建可用性组,以及向可用性组添加副本。

  1. 启动SQL Server 2019 Always On集群

完成配置后,需要启动SQL Server 2019 Always On集群。以下是示例的命令:

ALERT AVAILABILITY GROUP [testag] WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY_ONLY);
ALTER AVAILABILITY GROUP [testag] GRANT CREATE ANY DATABASE;
ALTER AVAILABILITY GROUP [testag] GRANT VIEW SERVER STATE;
ALTER AVAILABILITY GROUP [testag] SET (CLUSTER_TYPE = EXTERNAL);
ALTER AVAILABILITY GROUP [testag] SET (DB_FAILOVER = ON);
ALTER AVAILABILITY GROUP [testag] SET (DTC_SUPPORT = NONE);
ALTER AVAILABILITY GROUP [testag] SET (FAILURE_CONDITION_LEVEL = 3);
ALTER AVAILABILITY GROUP [testag] SET (HEALTH_CHECK_TIMEOUT = 30000);
ALTER AVAILABILITY GROUP [testag] SET (KBAG_ENABLED = ON);
ALTER AVAILABILITY GROUP [testag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 2);
ALTER AVAILABILITY GROUP [testag] SET (SEEDING_MODE = AUTOMATIC);
ALTER AVAILABILITY GROUP [testag] SET (VERSION = 10);

三、示例说明

示例一

假设你希望在Docker容器中创建一个名为“testdb”的数据库,并创建一个名为“testtable”的表。

首先需要写一份名为“install.sql”的SQL Server安装脚本,其内容如下:

CREATE DATABASE testdb;

USE testdb;

CREATE TABLE testtable (id INT, name VARCHAR(200));

接下来,在Dockerfile中添加以下代码:

COPY install.sql /var/opt/mssql/init/
RUN /opt/mssql/bin/sqlservr & sleep 10 \
    && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourStrong!Passw0rd>' \
       -i /var/opt/mssql/init/install.sql

这样,当Docker容器启动时,会自动执行名为“install.sql”的SQL Server安装脚本。

示例二

假设你希望在Docker容器中创建一个名为“testag”的SQL Server 2019 Always On集群,并向其添加两个副本,一个在“sql1”服务器上,另一个在“sql2”服务器上。

首先需要创建一个名为“sql2”的Docker容器,其命令如下:

docker run --name sql2 -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" \
-p 1434:1433 -d sql2019

接下来,在数据库服务器上执行以下命令:

CREATE LOGIN [login] WITH PASSWORD = '<YourPassword>';
CREATE AVAILABILITY GROUP [testag] WITH (CLUSTER_TYPE = EXTERNAL);

ALTER AVAILABILITY GROUP [testag] JOIN REPLICA ON 'sql1' WITH (ENDPOINT_URL = 'TCP://sql1:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
ALTER AVAILABILITY GROUP [testag] JOIN REPLICA ON 'sql2' WITH (ENDPOINT_URL = 'TCP://sql2:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);

ALTER AVAILABILITY GROUP [testag] GRANT CREATE ANY DATABASE;
ALTER AVAILABILITY GROUP [testag] GRANT VIEW ANY DATABASE;
ALTER AVAILABILITY GROUP [testag] GRANT VIEW SERVER STATE;

CREATE AVAILABILITY GROUP [testag] GRANT CONNECT SQL TO [login];
CREATE AVAILABILITY GROUP [testag] GRANT VIEW SERVER STATE TO [login];
CREATE AVAILABILITY GROUP [testag] GRANT VIEW ANY DATABASE TO [login];

这些命令用于向可用性组添加两个副本。最后,启动SQL Server 2019 Always On集群:

ALERT AVAILABILITY GROUP [testag] WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY_ONLY);
ALTER AVAILABILITY GROUP [testag] GRANT CREATE ANY DATABASE;
ALTER AVAILABILITY GROUP [testag] GRANT VIEW SERVER STATE;
ALTER AVAILABILITY GROUP [testag] SET (CLUSTER_TYPE = EXTERNAL);
ALTER AVAILABILITY GROUP [testag] SET (DB_FAILOVER = ON);
ALTER AVAILABILITY GROUP [testag] SET (DTC_SUPPORT = NONE);
ALTER AVAILABILITY GROUP [testag] SET (FAILURE_CONDITION_LEVEL = 3);
ALTER AVAILABILITY GROUP [testag] SET (HEALTH_CHECK_TIMEOUT = 30000);
ALTER AVAILABILITY GROUP [testag] SET (KBAG_ENABLED = ON);
ALTER AVAILABILITY GROUP [testag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 2);
ALTER AVAILABILITY GROUP [testag] SET (SEEDING_MODE = AUTOMATIC);
ALTER AVAILABILITY GROUP [testag] SET (VERSION = 10);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker部署SQL Server 2019 Always On集群的实现 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 深入了解SQL注入

    介绍SQL注入攻击,需要先理解什么是SQL语句和它的运行方式。 SQL语句 SQL是一种常用于操作关系型数据库的语言,它包含许多指令用于增删改查数据,常见的指令有: SELECT:查询数据 INSERT:插入数据 UPDATE:更新数据 DELETE:删除数据 SQL运行过程 当我们在应用程序中使用SQL指令时,应用程序会将指令传递给数据库服务器,然后服务器…

    database 2023年5月22日
    00
  • 数据库报错:Unknown column ‘xxx’ in ‘where clause’问题的解决过程

    当我们在使用数据库时,可能会遇到”Unknown column ‘xxx’ in ‘where clause'”这样的报错。这个错误通常意味着你的数据库表格中没有名为’xxx’的列,但是你在一个WHERE子句中引用了这个列。 如果出现这个问题,要尽快解决它,否则可能会导致数据库查询失败。以下是解决此问题的完整攻略: 理解报错信息首先,读取报错信息并理解它的意…

    database 2023年5月18日
    00
  • linux网站建立步骤

    下面我将为你详细讲解 Linux 网站建立的步骤及完整攻略。 1. 配置服务器 首先,你需要在你的服务器上配置 Linux,这需要你有一定的 Linux 系统基础知识和经验。你需要选择一款适合你的 Linux 操作系统版本,并安装必要的软件和服务,如 Apache Web 服务器、MySQL 数据库、PHP 解释器等。 2. 配置域名和 DNS 你需要为你的…

    database 2023年5月22日
    00
  • PouchDB 和 Neo4j 的区别

    PouchDB 和 Neo4j 是两种不同类型的数据库。PouchDB 是一种客户端数据库,可在浏览器和移动应用程序中使用,而 Neo4j 是一种图形数据库,用于存储和管理大量复杂的关联数据。下面将详细讲解它们之间的区别和特点。 1. 数据模型 PouchDB 是一种面向文档的数据库,使用 JSON 格式来存储数据。它的数据模型类似于 MongoDB 或 C…

    database 2023年3月27日
    00
  • Oracle 数据仓库ETL技术之多表插入语句的示例详解

    下面我将详细讲解“Oracle 数据仓库ETL技术之多表插入语句的示例详解”的完整攻略。 1. 简介 在数据仓库ETL过程中,数据从来源端被抽取出来,然后经过转换和清洗,最后加载到目标端的数据仓库中。在这个过程中,使用多表插入语句是非常常见的一种技术。 2. 多表插入语句介绍 多表插入语句可以同时向多个表中插入数据,可以在一个SQL语句中插入多张表,从而减少…

    database 2023年5月21日
    00
  • MySQL日期格式化yyyy-mm-dd详解(DATE_FORMAT()函数)

    MySQL中DATE_FORMAT()函数是一种将日期/时间格式化为指定格式的函数。该函数使用的语法为: DATE_FORMAT(date,format); 其中,date参数是日期/时间值,可以是一个实际的日期/时间值,也可以是常量或变量,而format参数是指定日期/时间格式的字符串。根据format参数不同的取值,日期/时间的输出也会不同。 下面我们通…

    database 2023年5月22日
    00
  • 超级键和候选键的区别

    超级键通常指的是按键组合,例如在 Windows 系统下,常见的超级键组合包括 Ctrl+Alt+Delete、Win+R、Win+E 等。这些组合键可以方便地调用系统功能,快速打开软件应用和文件,提高工作效率。而候选键则是指输入法中的一个特殊按键,在输入中文时可以调出一个弹窗,列出所有可能的结果,用户可以选择正确的汉字。下面就分别介绍超级键和候选键的不同之…

    database 2023年3月27日
    00
  • Tomcat服务器响应过慢解决方案

    下面是详细讲解Tomcat服务器响应过慢解决方案的完整攻略: 背景 Tomcat服务器响应过慢一直是开发者面临的问题之一。当网站访问量增多时,Tomcat的性能将会受到影响,并可能导致服务的不稳定甚至崩溃。 解决方案 1. 调整JVM参数 JVM(Java Virtual Machine)是Java程序的运行环境,设置JVM参数可以适当提高Tomcat服务器…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部