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 update select结合语句详解及应用

    “SQL update select结合语句详解及应用”是一种常用的SQL查询方式。它能够根据条件筛选出要更新的数据,然后更新到指定的列中。下面是详细的攻略: 1. 基本语法 SQL update select结合语句的基本语法如下: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 其中,表名称是要更新的表的名称,列名称和新值是…

    database 2023年5月21日
    00
  • Redis分布式锁详解

    Redis分布式锁是一种基于Redis实现的分布式锁,用于解决多个进程(或多个实例)访问共享资源时可能引发的并发问题。下面,本文将为读者详细讲解Redis分布式锁的完整攻略,包括Redis分布式锁的设计思路、代码实现以及使用注意事项。 Redis分布式锁的设计思路 Redis分布式锁的设计思路主要包括以下几个方面: 锁的存储结构 Redis分布式锁的存储结构…

    Redis 2023年3月21日
    00
  • MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程

    MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程 下载安装包 打开浏览器,访问MySQL官网,找到MySQL 5.0.96 for Windows x86 32位绿色精简版的下载链接,点击下载。 下载完成后,解压缩得到一个文件夹。 安装MySQL 进入MySQL文件夹,在文件夹中找到mysqld.exe,并运行该文件,即可启…

    database 2023年5月21日
    00
  • 解决php用mysql方式连接数据库出现Deprecated报错问题

    这里是解决php用mysql方式连接数据库出现Deprecated报错问题的完整攻略。 问题描述 在使用PHP连接MySQL数据库时,可能会出现以下Deprecated报错信息: Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the …

    database 2023年5月18日
    00
  • Mysql带And关键字的多条件查询语句

    当需要进行多条件查询时,可以使用MySQL中的AND关键字来实现。AND连接的两个条件都要满足才能被查询到。下面是Mysql带AND关键字的多条件查询语句的完整攻略: 标准语句格式 SELECT * FROM table_name WHERE condition_1 AND condition_2 AND condition_3…; 示例说明 假设存在一…

    database 2023年5月22日
    00
  • asp.net 分页sql语句(结合aspnetpager)

    借助ASP.NET和ASPNetPager,我们可以使用SQL语句对数据库进行分页。下面将提供ASP.NET分页SQL句法,同时结合ASPNetPager进行解释和说明。 分页SQL语句 分页SQL语句的结构如下: SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY {sort_expression}) AS…

    database 2023年5月21日
    00
  • MongoDB 和 Amazon DynamoDB 的区别

    MongoDB 和 Amazon DynamoDB 都是非关系型数据库 (NoSQL Database)。二者在一些方面有着相似之处,例如都支持水平扩展并可在云端使用,但它们之间也有很多区别。在以下介绍中,我们将详细讲解MongoDB 和 Amazon DynamoDB 的区别。 MongoDB 简介 MongoDB 是一种基于文档的数据库,它使用 BSON…

    database 2023年3月27日
    00
  • 快速解决mysql57服务突然不见了的问题

    当使用MySQL 5.7版本时,我们可能会遇到MySQL服务突然不见的问题。通常,这是由于服务停止或崩溃引起的。要解决此问题,我们可以按照以下步骤进行操作: 步骤1:检查MySQL服务是否正在运行 第一步,我们需要检查MySQL服务是否正在运行。要执行此操作,请使用以下命令: sudo systemctl status mysql 如果MySQL服务正在运行…

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