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日

相关文章

  • 查看修改mysql编码方式让它支持中文(gbk或者utf8)

    要将MySQL编码方式修改为支持中文,需要开发人员做如下操作: 1. 确定当前MySQL服务器默认编码方式 首先需要确定当前MySQL服务器默认编码方式,可以输入以下命令查看: mysql> SHOW VARIABLES LIKE ‘character_set_%’; 执行上述命令后可以看到一系列的字符编码,其中比较重要的有: character_se…

    database 2023年5月22日
    00
  • 数据库索引知识点整理

    数据库索引知识点整理 什么是数据库索引 数据库索引是一种数据结构,它可以帮助我们快速检索和查询数据库中的数据。它相当于一张表,其中包含列和对应的数据。 索引可分为聚集索引和非聚集索引,聚集索引的物理排列方式与数据存储方式相同,因此每个表只能有一个聚集索引,而非聚集索引则是建立在新的索引表中的。 为什么要使用数据库索引 提高查询速度:通过使用索引,查询速度可以…

    database 2023年5月19日
    00
  • MySQL查看索引(SHOW INDEX)方法详解

    MySQL中可以使用SHOW INDEX语句来查看表的索引信息,该语句的语法形式如下: SHOW INDEX FROM tablename; 其中,tablename表示需要查看索引的表名。 该语句的结果包括以下信息: Table:索引所属的表名; Non_unique:索引是否允许相同的值,0表示唯一索引,1表示非唯一索引; Key_name:索引名称; …

    MySQL 2023年3月10日
    00
  • Java异常日志堆栈丢失的原因与排查

    Java异常日志堆栈丢失是我们在开发过程中常见的问题之一,也是比较棘手的问题之一。本文将详细讲解Java异常日志堆栈丢失的原因与排查的完整攻略。 什么是Java异常日志堆栈丢失 当Java程序运行时发生异常时,JVM会在控制台或日志文件中打印异常堆栈信息。这些异常堆栈信息是极其重要的,可以帮助我们找到异常的源头并修复问题。然而,在某些情况下,我们可能会发现日…

    database 2023年5月21日
    00
  • hadoop中hive配置mysql

    1.首先下载hive 下载地址   选择带有 bin 选项的  ,不然以后还要自己编译 解压安装 移动到/usr/local/hive  下 进入hive目录,进入conf cp hive-env.sh.template hive-env.sh cp hive-default.xml.template hive-site.xml cp hive-log4j2…

    MySQL 2023年4月13日
    00
  • 如何使用Python实现数据库中数据的批量拆分合并?

    以下是使用Python实现数据库中数据的批量拆分合并的完整攻略。 数据库中数据的批量拆分合并简介 在数据库中,批量拆合并是将多记录拆分成多个记录或将多个记录合并成一个记录。在Python中,可以使用pymysql连接MySQL,并使用SELECT和INSERT`语句实现批量拆分合并。 步骤1:连接数据库 在Python中,可以使用pymysql连接MySQL…

    python 2023年5月12日
    00
  • mysql 单机数据库优化的一些实践

    MySQL 单机数据库优化的一些实践 MySQL 作为常用的关系型数据库管理系统,在应用中被广泛使用。为了更好地提高 MySQL 单机数据库的性能和稳定性,我们需要对其进行一些优化的实践。 优化前的准备工作 在进行 MySQL 单机数据库的优化之前,我们需要对数据库的整体情况了解清楚,在此之前,我们需要准备以下工作: 系统层面的优化:主要优化系统的 I/O …

    database 2023年5月19日
    00
  • Oracle数据创建虚拟列和复合触发器的方法

    下面是详细讲解“Oracle数据创建虚拟列和复合触发器的方法”的完整攻略。 创建虚拟列 确定需要创建虚拟列的表,并确认虚拟列的计算公式。 使用 ALTER TABLE 语句添加虚拟列,语法如下: sql ALTER TABLE table_name ADD (column_name data_type [GENERATED ALWAYS] AS (expre…

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