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

yizhihongxing

下面我来简单介绍一下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日

相关文章

  • Go打包二进制文件的实现

    Go打包二进制文件的实现 在Go语言中,可以使用go build命令将程序编译成二进制文件。默认情况下,编译后的二进制文件将会保存在当前目录下,其名称与当前目录的名称相同。同时,也可以通过一些参数来设置编译后二进制文件的名称和路径。 编译单个Go文件 我们可以通过以下命令来将单个Go文件进行编译: go build example.go 这将会在当前目录下生…

    database 2023年5月22日
    00
  • Oracle带输入输出参数存储过程(包括sql分页功能)

    下面是针对“Oracle带输入输出参数存储过程(包括sql分页功能)”的完整攻略,通过以下内容,您可以学习并练习如何在Oracle数据库中创建带有输入输出参数的存储过程,并且带有SQL分页功能。 1. 准备工作 在开始创建存储过程之前,需要确保您已经掌握以下基础知识: Oracle数据库的基础结构与操作方法; SQL查询语句、函数、分页等基本用法; 存储过程…

    database 2023年5月21日
    00
  • Linux服务器要如何启动oracle数据库(命令启动法)

    启动 Oracle 数据库需要使用 Oracle listener 和 Oracle instance,而启动 Oracle listener 和 instance 又需要在 Linux 系统中运行相应的脚本。下面是启动 Oracle 数据库的完整攻略,包括了必要的命令和步骤,并附带了两条示例说明: 确保 Oracle 账户已登录 在 Linux 系统中启动…

    database 2023年5月22日
    00
  • MySQL中or语句用法示例

    下面是关于MySQL中or语句用法示例的完整攻略: 什么是or语句 在MySQL中,or是一种逻辑运算符,用于连接两个或多个条件,只要其中一个条件成立,整个条件就成立。在where条件中使用or可以使查询更加灵活,可以根据不同的条件来返回所需的结果。 or语句的语法 下面是or语句的用法示例: SELECT * FROM table_name WHERE c…

    database 2023年5月21日
    00
  • Redis为什么能抗住10万并发?揭秘性能优越的背后原因

    Redis是一个开源的,基于内存的,高性能的键值型数据库。它支持多种数据结构,包含五种基本类型 String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型 Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图),可以满足各种应用场景的需求。 1. Redis简介 Redis是一个开…

    Redis 2023年4月14日
    00
  • Linux主流架构运维工作简单剖析讲解

    Linux主流架构运维工作简单剖析讲解 简介 Linux运维工作主要分为三个方向:服务器运维、数据库运维和网络运维。在实践中,因为这三个方向有部分重叠,所以对于运维人员而言,全面的了解这三个方向的知识是非常重要的。 服务器运维 服务器运维包括服务器的部署、安装、配置、优化和监控等。Linux服务器运维人员需要熟悉Linux操作系统的基本命令、磁盘及文件系统管…

    database 2023年5月21日
    00
  • 备份安全措施

    备份是维护网站安全和稳定性的重要环节之一,为减少数据丢失和系统故障造成的影响,备份数据的安全性关系到网站的宏观安全。下面从备份的安全措施方面,介绍备份的管理策略和常见的应用。 一、备份管理策略 1. 常规备份 常规备份是指按照规定的时间间隔(多为每天)对网站进行备份,以应对意外的数据丢失和系统崩溃等情况。在备份数据存储的同时,还应制定详细的备份计划,包括备份…

    database 2023年3月27日
    00
  • 使用python操作redis(管道)

    一、redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。 redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个R…

    Redis 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部