以下步骤仅为个人安装测试记录,未在生产环境实际用过,谨慎用于生产环境。
类型 | 不支持的功能或服务 | 备注 |
数据库引擎 | 事务复制 | 所有数据更改都会以事务为单位,按照其在发布服务器上发生的顺序,同步到订阅服务器上,2019起支持 |
合并复制 | 允许用户同时修改订阅服务器和发布服务器上的数据,并把这些修改“合并”成一个统一的结果,2019起支持 | |
Stretch DB | SQLServer 2016中的新特性,它支持数据库一部分存在于本地,另一部分存在于Azure SQL数据库云服务中。企业使用StretchDB可以“延伸”其部署数据库到云端,比如“热”数据可以存储在本地部署的SQL Server实例中,而“冷”数据很显然可以存储到Azure中 | |
PolyBase | SQLServer 2016中的新特性,PolyBase 支持在 SQL Server 中使用以下方案: 1. 通过 SQL Server 或 PDW 查询 Hadoop 中存储的数据 2. 查询存储在 Azure Blob 存储中的数据 3. 将数据导出、导入到 Hadoop、Azure Blob 存储或 Azure Data Lake Store 4. 与 BI 工具集成 |
|
使用第三方连接的分布式查询 | ||
与 SQL Server 以外的数据源的链接的服务器 | 不能建立到其他类型数据库的 link server | |
系统扩展的存储过程(XP_CMDSHELL 等) | 在sqlserver中执行windows命令 | |
Filetable,FILESTREAM | SQL Server 2008中引入的FILESTREAM数据类型来存储非结构化数据,如文档,视频,音频,图像,数据库中存储的是文件系统上的一个指针 SQL Server 2012的FileTable则进一步增强,它可以让应用程序通过引入FileTable整合其存储和数据管理组件,允许非事务性访问,提供集成的对非结构化数据和元数据的全文搜索和语义搜索 |
|
带有 EXTERNAL_ACCESS 或 UNSAFE 权限集的 CLR 程序集 | windows中在 SQL Server 数据库中创建程序集时,可以指定代码以下安全级别的哪一种下运行:SAFE、EXTERNAL_ACCESS 或 UNSAFE | |
缓冲池扩展 | SQL Server 2014 中引入的缓冲池扩展提供数据库引擎缓冲池的非易失性随机存取内存(即SSD)扩展的无缝集成,从而显著提高 I/O 吞吐量。 | |
SQL Server 代理 | 子系统: CmdExec、PowerShell、队列读取器、SSIS、SSAS、SSRS | CmdExec:运行可执行程序 PowerShell:运行 PowerShell 脚本作业步骤 队列读取器:运行激活复制队列读取器代理的作业步骤 SSIS:ETL工具,把数据库的数据抽取到数据仓库 SSAS:Cube(多维数据库)工具,把数据仓库转换成多维数据库 SSRS:报表工具,用多维数据库作为数据源来呈现报表 |
Alerts | 事件由SQL Server生成并输入Microsoft Windows应用程序日志。SQL Server代理读取应用程序日志,并将写入的事件与您定义的警报进行比较。当SQL Server代理找到匹配项时,它会触发警报,这是对事件的自动响应。除了监视SQL Server事件之外,SQL Server代理还可以监视性能条件和Windows Management Instrumentation(WMI)事件。 要定义警报,请指定: 警报的名称。 触发警报的事件或性能条件。 SQL Server代理响应事件或性能条件所采取的操作。 |
|
日志读取器代理 | 运行激活复制日志读取器代理的作业步骤 | |
变更数据捕获 | 更改数据捕获记录插入,更新和删除应用于SQL Server表的活动 | |
托管备份 | Microsoft Azure 的 SQL Server 托管备份管理并自动执行将 SQL Server 备份到 Windows Azure Blob 存储服务 | |
高可用性 | 数据库镜像 | 以后版本也不会支持 |
Security | 可扩展的密钥管理 | |
链接服务器的 AD 身份验证 | ||
可用性组 (Ag) 的 AD 身份验证 | ||
第三方 AD 工具 (Centrify,Vintela,Powerbroker) | ||
服务 | SQL Server Browser | |
SQL Server R Services | 用于机器学习,2019起支持 | |
StreamInsight | ||
Analysis Services | ||
Reporting Services | ||
Data Quality Services | ||
Master Data Services | ||
分布式的事务处理协调器 (DTC) | 在 Linux 中不支持 Microsoft 分布式事务处理协调器 (DTC) SQL Server 2017 (14.x)。 如果您的应用程序需要使用分布式事务,并且需要 AG,部署 SQL Server在 Windows 上,2019起支持 |
编号 | 需求项 | 操作环境 | 需求细节内容 | 说明 | |
分配主机 | 1 | 操作系统要求 | 所有节点 | linux版本:Red Hat Enterprise Linux 7.3 or 7.4 Workstation, Server, and Desktop 如果使用VMWare,则关闭vmware的overcommit。 |
|
2 | 文件系统要求 | 所有节点 | 文件系统:XFS or EXT4 如果使用网络文件系统 (NFS) ,远程共享,请注意以下支持要求: 1. 使用 NFS 版本4.2 或更高版本。 较旧版本的 NFS 不支持所需的功能,例如 fallocate 和稀疏文件创建 2. 仅定位 /var/opt/mssql上 NFS 装入的目录。 不支持其他文件,如 SQL Server 系统二进制文件。 3. 请确保装载的远程共享时,NFS 客户端使用 nolock 选项。 |
||
3 | 磁盘空间要求 | 所有节点 | 不小于6GB | ||
4 | 内存要求 | 所有节点 | 不小于2GB | ||
5 | 处理器要求 | 所有节点 | 处理器速度: 不低于2 GHz 处理器核心: 不少于2核 处理器类型: 仅 x64 兼容 |
||
6 | 关闭文件系统/分区的atime选项 | 所有节点 | cat /etc/fstab,看到对应的分区是noatime ,nodiratime | 修改: vi /etc/fstab 在对应的分区处添加noatime,nodiratime 重启后生效 |
|
7 | 开启透明大页 | 所有节点 | cat /sys/kernel/mm/transparent_hugepage/enabled 应该看到[always] 如果这个文件不存在,则检查 cat /sys/kernel/mm/redhat_transparent_hugepage/enabled 如果2个文件都不存在,那么就是在系统内核中移除了THP。 |
设置重启服务器后生效 参考官方文档: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-performance-best-practices?view=sql-server-2017 |
|
8 | 禁用SELinux | 所有节点 | 当前生效: setenforce 0 重启后生效: vi /etc/selinux/config SELINUX=disabled |
||
9 | NTP时间同步 | 所有节点 | 可以选择 1. 物理机和虚拟机时间同步 2. 虚拟机ntp时间同步(建议采用,crontab使用ntpdate) 注:默认配置中,虽然物理机上启用NTP与内网NTP服务器进行时间同步,但是虚拟机和物理机的时间同步是关闭的。 |
如果没有打开物理机和虚拟机之间的时间同步,会导致系统日志记录时间有问题。启动阶段(此时还不能ssh登录),在日志中的记录时间会往前推进一个小时,等启动完成后,日志中的时间再回退一个小时。 | |
防火墙实施 | 10 | 防火墙要求 | 所有节点 | 主从库之间,需要双向打通1433及5022端口 | |
所有节点 | 关闭并禁用本地防火墙 systemctl stop firewalld systemctl disable firewalld |
||||
网络规划 | 11 | public ip | 所有节点 | 由主机或者网络组分配IP | 注:要求两个节点网卡名相同 |
12 | VIP | 所有节点 | 只需额外预留,不需添加网卡 | ||
13 | 主机名要求 | 所有节点 | vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.168.2.237 mssql01 192.168.2.238 mssql02 192.168.2.240 LINUX-SQLAG |
主机名称要求: 少于15 个字符 在网络中是唯一的 |
|
CPU设置 | 14 | CPU frequency governor | 所有节点 | 自定义tuned-adm方案 先启用tuned服务 systemctl start tuned systemctl enable tuned mkdir -p /usr/lib/tuned/mssql cp /usr/lib/tuned/latency-performance/* /usr/lib/tuned/mssql/ cd /usr/lib/tuned/mssql vi tuned.conf #根据mssql官方文档推荐设置以下参数 [main] summary=Optimize for deterministic performance at the cost of increased power consumption [cpu] governor=performance energy_perf_bias=performance min_perf_pct=100 C-States=C1 only [sysctl] #for mssql kernel.sched_min_granularity_ns = 10000000 kernel.sched_wakeup_granularity_ns = 15000000 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10 vm.swappiness=10 kernel.numa_balancing=0 vm.max_map_count=262144 使用自定义方案 tuned-adm profile mssql |
建议值:performance |
15 | ENERGY_PERF_BIAS | 所有节点 | 建议值:performance | ||
16 | min_perf_pct | 所有节点 | 建议值:100 | ||
17 | C-States | 所有节点 | 建议值:C1 only | ||
多节点NUMA系统上 禁用自动NUMA平衡 |
18 | kernel.numa_balancing | 所有节点 | 建议值:0 | |
虚拟地址空间内核设置 | 19 | vm.max_map_count | 所有节点 | 建议值:262144 | |
磁盘设置 | 20 | sysctl 设置 | 所有节点 | 建议值: kernel.sched_min_granularity_ns = 10000000 kernel.sched_wakeup_granularity_ns = 15000000 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10 vm.swappiness=10 |
|
21 | 磁盘预读 | 所有节点 | /sbin/blockdev --setra 4096 /dev/sd* | 检查 blockdev --report |
|
虚拟机和动态内存设置 | 22 | 虚拟机和动态内存设置 | 所有节点 | 如果Linux SQL Server运行在虚拟机中,请确保为虚拟机保留的内存量,不要使用 HYPER-V 动态内存等功能。 |
操作环境 | 需求细节内容 | 说明 |
所有节点 | yum -y install bzip2 yum -y install gdb yum -y install libsss_nss_idmap yum -y install cyrus-sasl yum -y install cyrus-sasl-gssapi yum -y install resource-agents -- for ha |
|
所有节点 | [root@mssql01 install]# rpm -ivh mssql-server-14.0.3037.1-2.x86_64.rpm warning: mssql-server-14.0.3037.1-2.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID be1229cf: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mssql-server-14.0.3037.1-2 ################################# [100%] |
|
所有节点 | [root@mssql01 install]# /opt/mssql/bin/mssql-conf setup Choose an edition of SQL Server: 1) Evaluation (free, no production use rights, 180-day limit) 2) Developer (free, no production use rights) 3) Express (free) 4) Web (PAID) 5) Standard (PAID) 6) Enterprise (PAID) 7) Enterprise Core (PAID) 8) I bought a license through a retail sales channel and have a product key to enter. ... Enter your edition(1-8): 7 ... Do you accept the license terms? [Yes/No]:yes Enter the SQL Server system administrator password: Confirm the SQL Server system administrator password: Configuring SQL Server... ... Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /usr/lib/systemd/system/mssql-server.service. Setup has completed successfully. SQL Server is now starting. |
1. 第6安装产品名为: Microsoft SQL Server Enterprise (64-bit);第7安装产品名为: Microsoft SQL Server Enterprise: Core-based Licensing (64-bit) 2. Enterprise Per Core license 模式最大计算能力限制为操作系统最大值,而Enterprise Server+CAL license 模式为20核 3. 该步骤会启动mssql服务并将其设置为开机自启动 |
所有节点 | rpm -ivh unixODBC-2.3.1-11.el7.x86_64.rpm [root@mssql01 install]# rpm -ivh msodbcsql17-17.2.0.1-1.x86_64.rpm warning: msodbcsql17-17.2.0.1-1.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID be1229cf: NOKEY Preparing... ################################# [100%] The license terms for this product can be downloaded from https://aka.ms/odbc172eula and found in /usr/share/doc/msodbcsql17/LICENSE.txt . By entering 'YES', you indicate that you accept the license terms. Do you accept the license terms? (Enter YES or NO) yes Updating / installing... 1:msodbcsql17-17.2.0.1-1 ################################# [100%] |
msodbcsql17 >= 17.2.0.0 is needed by (installed) mssql-tools-17.2.0.1-1.x86_64 msodbcsql17 < 17.3.0.0 is needed by (installed) mssql-tools-17.2.0.1-1.x86_64 如果有安装旧版mssql工具或较旧的 unixODBC包,请先删除 yum remove mssql-tools unixODBC-utf16-devel |
所有节点 | [root@mssql01 install]# rpm -ivh mssql-tools-17.2.0.1-1.x86_64.rpm warning: mssql-tools-17.2.0.1-1.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID be1229cf: NOKEY Preparing... ################################# [100%] The license terms for this product can be downloaded from http://go.microsoft.com/fwlink/?LinkId=746949 and found in /usr/share/doc/mssql-tools/LICENSE.txt . By entering 'YES', you indicate that you accept the license terms. Do you accept the license terms? (Enter YES or NO) yes Updating / installing... 1:mssql-tools-17.2.0.1-1 ################################# [100%] |
sqlcmd与bcp工具 |
所有节点 | mkdir -p /data001/prd/mssql/CU10/{data,cnf,log,dump,backup,audit} chown mssql.mssql -R /data001 chmod 755 -R /data001 |
|
所有节点 | systemctl stop mssql-server /opt/mssql/bin/mssql-conf set-collation Enter the collation: Chinese_PRC_CI_AS /opt/mssql/bin/mssql-conf set telemetry.customerfeedback false /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /data001/prd/mssql/CU10/data /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /data001/prd/mssql/CU10/data /opt/mssql/bin/mssql-conf set filelocation.defaultdumpdir /data001/prd/mssql/CU10/dump /opt/mssql/bin/mssql-conf set filelocation.errorlogfile /data001/prd/mssql/CU10/log/errorlog /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /data001/prd/mssql/CU10/backup /opt/mssql/bin/mssql-conf set telemetry.userrequestedlocalauditdirectory /data001/prd/mssql/CU10/audit systemctl start mssql-server |
改server排序规则(高危操作,非新建必须先备份) /opt/mssql/bin/mssql-conf set-collation Enter the collation: Chinese_PRC_CI_AS 配置客户反馈 /opt/mssql/bin/mssql-conf set telemetry.customerfeedback false 默认数据目录 /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /data001/prd/mssql/CU10/data 默认日志目录 /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /data001/prd/mssql/CU10/data 默认转储目录 /opt/mssql/bin/mssql-conf set filelocation.defaultdumpdir /data001/prd/mssql/CU10/dump 默认错误日志目录 /opt/mssql/bin/mssql-conf set filelocation.errorlogfile /data001/prd/mssql/CU10/log/errorlog 默认备份目录 /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /data001/prd/mssql/CU10/backup 本地审核目录 /opt/mssql/bin/mssql-conf set telemetry.userrequestedlocalauditdirectory /data001/prd/mssql/CU10/audit |
所有节点 | 启用 SQL Server 代理 /opt/mssql/bin/mssql-conf set sqlagent.enabled true 重新启动 SQL Server: systemctl restart mssql-server |
从SQL Server 2017 CU4开始,SQL Server Agent是随附mssql server封装,并预设为停用;在之前版本需要额外安装mssql-server-agent,否则会报错 |
所有节点 | Root用户 echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bash_profile source ~/.bashrc |
|
所有节点 | sqlcmd -S localhost -U SA -P 1> select name from sys.databases; 2> GO |
|
所有节点 | 新增4个数据文件(最多与CPU数相同),初始5GB,自动增长100MB 日志文件初始100MB,自动增长100MB |
Linux安装sqlserver时无法选择tempdb文件个数,需要自行添加 |
用SSMS连接跟普通windows操作没区别,这里不记录了。
编号 | 需求项 | 操作环境 | 需求细节内容 | 说明 |
1 | 打开Always On AG特性 | 所有节点 | /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 systemctl restart mssql-server |
|
2 | 安装ha组件 | 所有节点 | rpm -ivh mssql-server-ha-14.0.3037.1-2.x86_64.rpm | |
3 | 启用 AlwaysOn_health 事件会话 | 所有节点 | ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON); GO |
可以选择启用 AlwaysOn 可用性组扩展的事件,以便在对某一可用性组进行故障排除时帮助诊断根本原因 |
4 | 创建数据库主密钥 | 所有节点 | USE master CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'xxxx'; GO |
既然节点没有加入域,那么就不能用域认证,只能用证书认证,因此需要创建证书和端点。xxxx为ag用户密码 |
5 | 为实例创建加密证书 | 所有节点 | USE master CREATE CERTIFICATE mssql01_cert WITH SUBJECT = 'mssql01 certificate for Availability Group' GO |
Linux 上的 SQL Server 服务使用证书验证镜像端点之间的通信 红色部分根据各节点情况修改 |
6 | 使用实例证书创建端点 | 所有节点 | USE master CREATE ENDPOINT Endpoint_AvailabilityGroup STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE mssql01_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL ); GO |
数据库端点使用TCP协议在参与数据库镜像会话或承载可用性副本的服务器实例之间发送和接收消息。 数据库端点在唯一的 TCP 端口号上进行侦听,端口可以修改但必须保持一致 红色部分根据各节点情况修改 |
7 | 备份证书文件 | 所有节点 | USE master BACKUP CERTIFICATE mssql01_cert TO FILE = '/data001/prd/mssql/CU10/data/mssql01_cert.cer'; GO |
红色部分根据各节点情况修改 |
8 | 拷贝证书文件至其他节点 | 所有节点 | 节点1 scp /data001/prd/mssql/CU10/data/mssql01_cert.cer mssql@mssql02:/data001/prd/mssql/CU10/data 节点2 scp /data001/prd/mssql/CU10/data/mssql02_cert.cer mssql@mssql01:/data001/prd/mssql/CU10/data |
运行完后每个节点都应该有2个(有几个节点就几个)certificate files,可以运行以下命令查看 ll /data001/prd/mssql/CU10/data/ 注意属主属组应该是mssql.mssql |
9 | 为其他系统创建登录名 | 所有节点 | USE master CREATE LOGIN login_AvailabilityGroup WITH PASSWORD = 'xxxx'; GO |
4~8称为配置出站连接 9~12称为配置入站连接 |
10 | 创建使用该登录名的用户 | 所有节点 | USE master CREATE USER login_AvailabilityGroup FOR LOGIN login_AvailabilityGroup GO |
|
11 | 关联用户与证书 | 所有节点 | 节点1 USE master CREATE CERTIFICATE mssql02_cert AUTHORIZATION login_AvailabilityGroup FROM FILE = '/data001/prd/mssql/CU10/data/mssql02_cert.cer' GO 节点2 USE master CREATE CERTIFICATE mssql01_cert AUTHORIZATION login_AvailabilityGroup FROM FILE = '/data001/prd/mssql/CU10/data/mssql01_cert.cer' GO |
红色部分根据各节点情况修改,各节点互相关联其他节点用户与证书,有几个节点关联几个 |
12 | 授予对该端点的登录名 CONNECT 权限 | 所有节点 | USE master GRANT CONNECT ON ENDPOINT::Endpoint_AvailabilityGroup TO [login_AvailabilityGroup]; GO |
|
13 | 为待添加用户数据库做全备 | 主节点 | BACKUP DATABASE [testag] TO DISK = N'/var/opt/mssql/data/demodb.bak' with copy_only,COMPRESSION,STATS = 10 | |
14 | 创建AG | 主节点 | USE [master] GO CREATE AVAILABILITY GROUP [LINUX_SQLAG] WITH ( AUTOMATED_BACKUP_PREFERENCE = PRIMARY, DB_FAILOVER = ON, DTC_SUPPORT = NONE, CLUSTER_TYPE = EXTERNAL ) FOR DATABASE [testag] REPLICA ON N'mssql01' WITH ( ENDPOINT_URL = N'TCP://mssql01:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE ( ALLOW_CONNECTIONS = NO ) ), N'mssql02' WITH ( ENDPOINT_URL = N'TCP://mssql02:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE ( ALLOW_CONNECTIONS = NO) ) GO |
如果主机名太长,sqlserver会截取前15位导致无法认到主机报以下错误 Msg 35237, Level 16, State 1, Server DBA-SQLServer-A, Line 2 None of the specified replicas for availability group LINUX_SQLAG maps to the instance of SQL Server to which you are connected. Reenter the command, specifying this server instance to host one of the replicas. This replica will be the initial primary replica. |
15 | 启用AG | 从节点 | ALTER AVAILABILITY GROUP [LINUX_SQLAG] JOIN WITH (CLUSTER_TYPE = EXTERNAL) ALTER AVAILABILITY GROUP [LINUX_SQLAG] GRANT CREATE ANY DATABASE; GO |
|
16 | 添加AG监听IP | 主节点 | USE [master] GO ALTER AVAILABILITY GROUP [LINUX_SQLAG] ADD LISTENER N'LINUX-SQLAG' ( WITH IP ( (N'192.168.2.240', N'255.255.255.0') ), PORT=1433 ); GO |
|
17 | 验证 | 所有节点 | ping LINUX-SQLAG | 目前这个就是ping不通的,但应该可以看到主机名对应的ip |
编号 | 需求项 | 操作环境 | 需求细节内容 | 说明 | ||
1 | 安装Pacemaker及相关程序 | 所有节点 | yum -y install pacemaker pcs fence-agents-all resource-agents | corosync 会在安装 pacemaker 的时候一起安装,pcs 是需要独立安装的,MSDN 文档中规定,还需要安装额外的两个程序 fence-agents-all和resource-agents (a) pcs,即Pacemaker Configuration System,是Pacemaker和Corosync配置工具 (b)Fence Agents,隔离代理,允许Pacemaker隔离和阻止行为异常的节点影响群集可用性 (c)Resource Agents,资源代理,允许Pacemaker管理服务和资源的软件,像启动或停止SQL Server AlwaysOn AG资源,像Windows上的群集资源DLL。 |
||
2 | 启动服务 | 所有节点 | systemctl start pcsd systemctl enable pcsd systemctl enable pacemaker.service systemctl enable corosync.service |
|||
3 | 为hacluster用户设置密码 | 所有节点 | passwd hacluster | 安装Pacemaker时会自动创建用户,密码各节点要设成一样 | ||
4 | 节点间配置认证 | 任意节点 | pcs cluster auth mssql01 mssql02 -u hacluster | |||
5 | 创建Linux集群 | 任意节点 | pcs cluster setup --name LINUXHACLUS mssql01 mssql02 | 任一台机器执行即可,-name后为集群名,集群名后为各节点主机名 | ||
6 | 启动Linux集群 | 任意节点 | pcs cluster start --all | |||
7 | 设置Linux集群开机启动 | 任意节点 | pcs cluster enable --all | [root@mssql01 ~]# pcs cluster enable --all mssql01: Cluster Enabled mssql02: Cluster Enabled |
||
8 | 配置fencing | 任意节点 | pcs property set stonith-enabled=false | 生产环境不建议设为false,但启用该功能需要额外硬件(如UPS或远端电源管理装置) 表示应隔离失败的节点及包含无法停止资源的节点,如果设定为 true或未设定,则在配置更多 STONITH 属性之前,该集群会拒绝启动资源。 |
||
9 | 设置群集重新检查间隔 | 任意节点 | pcs property set cluster-recheck-interval=2min | Cluster-recheck-interval表示检查群集资源参数、约束和其他群集选项中的更改的轮询间隔,建议将其设为不小于60s的值。如果副本出现故障,群集尝试在一定的时间间隔内重启副本,该间隔由failure-timeout值和cluster-recheck-interval值确定。如果failure-timeout设置为60秒,cluster-recheck-interval设置为120秒,重启尝试间隔大于60秒并且小于120秒。 | ||
10 | 配置failure-timeout | 任意节点 | pcs resource update LINUX_SQLAG meta failure-timeout=60s | |||
11 | 配置start-failure-is-fatal | 任意节点 | pcs property set start-failure-is-fatal=true | 标志特定节点资源启动失败后是否还继续尝试启动。当设为false时,集群会根据当前启动失败次数和migration-threshold(失败上限次数)的值决定是否继续启动。如果设为true,启动失败将导致当前启动失败次数被设置为INFINITY,导致资源立即移动到其他节点 | ||
12 | 为Pacemaker创建login账户 | 所有节点 | USE master GO CREATE LOGIN pacemakerLogin WITH PASSWORD = 'xxxx'; GO |
|||
13 | 授权 | 所有节点 | USE master GO GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::LINUX_SQLAG TO pacemakerLogin GO GRANT VIEW SERVER STATE TO pacemakerLogin GO |
|||
14 | 配置密码文件 | 所有节点 | vi /var/opt/mssql/secrets/passwd 输入pacemakerLogin用户及其密码 |
|
||
15 | 查看集群状态 | 任意节点 | pcs status --full | |||
16 | Pacemaker创建AG资源 | 任意节点 | pcs resource create LINUX_SQLAG ocf:mssql:ag ag_name=LINUX_SQLAG master notify=true | |||
17 | 创建VIP资源 | 任意节点 | pcs resource create AGListener_VIP ocf:heartbeat:IPaddr2 ip=192.168.2.240 cidr_netmask=24 | |||
19 | 创建排列约束 | 与创建VIP资源节点相同 | pcs constraint colocation add AGListener_VIP LINUX_SQLAG-master INFINITY with-rsc-role=Master | 配置VIP资源与AG资源运行在同一节点 | ||
20 | 创建排序约束 | 同上 | pcs constraint order promote LINUX_SQLAG-master then start AGListener_VIP | 资源的启动关闭顺序 | ||
21 | 集群状态检查 | 任意节点 | pcs status | |||
22 | 在数据库查询集群信息 | 任意节点 | 使用VIP连接到数据库 SELECT @@SERVERNAME as replica_name, @@VERSION, host_platform, host_distribution, host_release FROM sys.dm_os_host_info GO SELECT a.name as AG_Name, a.cluster_type_desc, b.dns_name, c.ip_address, c.ip_subnet_mask FROM sys.availability_groups a INNER JOIN sys.availability_group_listeners b ON a.group_id=b.group_id INNER JOIN sys.availability_group_listener_ip_addresses c ON b.listener_id=c.listener_id |
编号 | 需求项 | 操作环境 | 需求细节内容 | 说明 |
1 | 操作系统配置 | 新增节点 | 见【操作系统设置】部分 | |
2 | 添加新主机名信息 | 所有节点 | [root@mssql03 ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain 192.168.2.237 mssql01 192.168.2.238 mssql02 192.168.2.240 LINUX-SQLAG 192.168.2.239 mssql03 |
|
3 | 安装配置sqlserver软件 | 新增节点 | 见【SQLSERVER安装】部分 | |
4 | 配置AG准备 | 新增节点 | 见【创建AlwaysOn AG】部分 1-4 | |
5 | 创建证书 | 新增节点 | USE master CREATE CERTIFICATE mssql03_cert WITH SUBJECT = 'mssql03 certificate for Availability Group' GO |
Linux 上的 SQL Server 服务使用证书验证镜像端点之间的通信 红色部分根据各节点情况修改 |
6 | 创建 endpoint | 新增节点 | USE master CREATE ENDPOINT Endpoint_AvailabilityGroup STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE mssql03_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL ); GO |
数据库镜像端点使用传输控制协议 (TCP) 在参与数据库镜像会话或承载可用性副本的服务器实例之间发送和接收消息。 数据库镜像端点在唯一的 TCP 端口号上进行侦听 红色部分根据各节点情况修改 |
7 | 备份证书文件 | 新增节点 | USE master BACKUP CERTIFICATE mssql03_cert TO FILE = '/data001/prd/mssql/CU10/data/mssql03_cert.cer'; GO |
红色部分根据各节点情况修改 |
8 | 拷贝证书文件至其他节点 | 所有节点 | 节点1 scp /data001/prd/mssql/CU10/data/mssql01_cert.cer mssql@mssql03:/data001/prd/mssql/CU10/data 节点2 scp /data001/prd/mssql/CU10/data/mssql02_cert.cer mssql@mssql03:/data001/prd/mssql/CU10/data 节点3 scp /data001/prd/mssql/CU10/data/mssql03_cert.cer mssql@mssql01:/data001/prd/mssql/CU10/data scp /data001/prd/mssql/CU10/data/mssql03_cert.cer mssql@mssql02:/data001/prd/mssql/CU10/data |
运行完后每个节点都应该有3个(有几个节点就几个)certificate files,可以运行以下命令查看 ll /data001/prd/mssql/CU10/data/ 注意属主属组应该是mssql.mssql |
9 | 创建LOGIN账户 | 新增节点 | USE master CREATE LOGIN login_AvailabilityGroup WITH PASSWORD = 'xxxx'; GO |
|
10 | 为LOGIN账户创建user | 新增节点 | USE master CREATE USER login_AvailabilityGroup FOR LOGIN login_AvailabilityGroup GO |
|
11 | 关联用户与证书 | 新增节点 | 节点1 USE master CREATE CERTIFICATE mssql03_cert AUTHORIZATION login_AvailabilityGroup FROM FILE = '/data001/prd/mssql/CU10/data/mssql03_cert.cer' GO 节点2 USE master CREATE CERTIFICATE mssql03_cert AUTHORIZATION login_AvailabilityGroup FROM FILE = '/data001/prd/mssql/CU10/data/mssql03_cert.cer' GO 节点3 USE master CREATE CERTIFICATE mssql01_cert AUTHORIZATION login_AvailabilityGroup FROM FILE = '/data001/prd/mssql/CU10/data/mssql01_cert.cer' GO USE master CREATE CERTIFICATE mssql02_cert AUTHORIZATION login_AvailabilityGroup FROM FILE = '/data001/prd/mssql/CU10/data/mssql02_cert.cer' GO |
红色部分根据各节点情况修改,各节点互相关联其他节点用户与证书,有几个节点关联几个 |
12 | 授权登录端点 | 新增节点 | USE master GRANT CONNECT ON ENDPOINT::Endpoint_AvailabilityGroup TO [login_AvailabilityGroup]; GO |
|
13 | 新增可用性副本 | 主节点 | ALTER AVAILABILITY GROUP [LINUX_SQLAG] ADD REPLICA ON N'mssql03' WITH ( ENDPOINT_URL = N'TCP://mssql03:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE ( ALLOW_CONNECTIONS = NO) ) GO |
1> ALTER AVAILABILITY GROUP [LINUX_SQLAG] ADD REPLICA ON 2> N'mssql03' WITH 3> ( 4> ENDPOINT_URL = N'TCP://mssql03:5022', 5> FAILOVER_MODE = EXTERNAL, 6> AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 7> SEEDING_MODE = AUTOMATIC, 8> SECONDARY_ROLE 9> ( 10> ALLOW_CONNECTIONS = NO) 11> ) 12> GO |
14 | 启用AG | 新增节点 | ALTER AVAILABILITY GROUP [LINUX_SQLAG] JOIN WITH (CLUSTER_TYPE = EXTERNAL) ALTER AVAILABILITY GROUP [LINUX_SQLAG] GRANT CREATE ANY DATABASE; GO |
[root@mssql03 ~]# sqlcmd -S localhost -U SA -P xxxx 1> 2> ALTER AVAILABILITY GROUP [LINUX_SQLAG] JOIN WITH (CLUSTER_TYPE = EXTERNAL) 3> ALTER AVAILABILITY GROUP [LINUX_SQLAG] GRANT CREATE ANY DATABASE; 4> GO |
15 | 验证 | 新增节点 | ping LINUX-SQLAG [root@mssql03 ~]# sqlcmd -S localhost -U SA -P xxxx 1> select name from sys.databases; 2> GO |
看是否有同步AG数据库 |
16 | 安装Pacemaker及相关程序 | 新增节点 | yum -y install pacemaker pcs fence-agents-all resource-agents | corosync 会在安装 pacemaker 的时候一起安装,pcs 是需要独立安装的,MSDN 文档中规定,还需要安装额外的两个程序 fence-agents-all和resource-agents |
17 | 启动服务 | 新增节点 | systemctl start pcsd systemctl enable pcsd systemctl enable pacemaker.service systemctl enable corosync.service |
|
18 | 为hacluster用户设置密码 | 新增节点 | passwd hacluster | 安装Pacemaker时会自动创建用户,密码各节点要设成一样 |
19 | 节点间配置认证 | 新增节点 | pcs cluster auth mssql01 mssql02 mssql03 -u hacluster | [root@mssql03 ~]# pcs cluster auth mssql01 mssql02 mssql03 -u hacluster Password: mssql03: Authorized mssql02: Authorized mssql01: Authorized |
20 | 将新增节点加入集群 | 主节点 | pcs cluster node add mssql03 | [root@mssql02 ~]# pcs cluster node add mssql03 Disabling SBD service... mssql03: sbd disabled Sending remote node configuration files to 'mssql03' mssql03: successful distribution of the file 'pacemaker_remote authkey' mssql01: Corosync updated mssql02: Corosync updated Setting up corosync... mssql03: Succeeded Synchronizing pcsd certificates on nodes mssql03... mssql03: Success Restarting pcsd on the nodes in order to reload the certificates... mssql03: Success |
21 | 验证添加情况 | 所有节点 | 添加后可以看到corosync.conf文件已更新 cat /etc/corosync/corosync.conf |
|
22 | 配置fencing | 所有节点 | pcs property set stonith-enabled=false | 生产环境不建议设为false,但启用该功能需要额外硬件(如UPS或远端电源管理装置) 表示应隔离失败的节点及包含无法停止资源的节点,如果设定为 true或未设定,则在配置更多 STONITH 属性之前,该集群会拒绝启动资源。 |
23 | 设置群集属性群集重新检查间隔 | 所有节点 | pcs property set cluster-recheck-interval=2min | 指示检查群集资源参数、 约束或其他群集选项中的更改的轮询间隔,建议将其设为不小于60s的值(比如两分钟) |
24 | 配置resource-level | 所有节点 | pcs property set start-failure-is-fatal=true | If the cluster property start-failure-is-fatal is set to true (which is the default), start failures cause the failcount to be set to INFINITY and thus always cause the resource to move immediately. |
25 | 配置failure-timeout | 所有节点 | pcs resource update LINUX_SQLAG meta failure-timeout=60s | |
26 | 为Pacemaker创建login账户 | 新增节点 | USE master GO CREATE LOGIN pacemakerLogin WITH PASSWORD = 'xxxx'; GO |
|
27 | 授权 | 新增节点 | USE master GO GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::LINUX_SQLAG TO pacemakerLogin GO GRANT VIEW SERVER STATE TO pacemakerLogin GO |
|
28 | 配置密码文件 | 新增节点 | vi /var/opt/mssql/secrets/passwd 输入pacemakerLogin用户及其密码 |
|
29 | 启动Linux集群 | 新增节点 | pcs cluster start | |
30 | 设置Linux集群开机启动 | 新增节点 | pcs cluster enable | [root@mssql03 ~]# pcs cluster enable --all mssql01: Cluster Enabled mssql02: Cluster Enabled mssql03: Cluster Enabled |
31 | 查看集群状态 | 任意节点 | pcs status --full |
编号 | 需求项 | 操作环境 | 需求细节内容 | 说明 | |
手动故障转移 | 1 | 故障转移命令 | 主节点 | pcs resource move LINUX_SQLAG-master mssql03 --master | 当设置CLUSTER_TYPE = EXTERNAL时,FAILOVER_MODE也只能为EXTERNAL,使用这些设置,所有手动或自动故障转移操作都由外部集群管理器执行。此时不要再使用Transact-SQL、SSMS或powershell进行故障转移,而应该使用集群管理工具 |
2 | 删除位置约束 | 主节点 | pcs constraint list --full pcs constraint remove cli-prefer-LINUX_SQLAG-master |
在手动故障转移期间,pcs命令move或crm命令migrate会为要放置在新目标节点上的资源添加位置约束。为避免之后手动转移失败,需要把位置约束删掉。 | |
强制故障转移 | 3 | 配置可用性组资源不再由集群管理 | 从节点 | pcs resource unmanage LINUX_SQLAG | 如果未能将资源模式设置为非托管模式,请删除该资源(当你删除某个资源时,还将删除所有关联的约束) pcs resource delete |
4 | 设置会话上下文变量external_cluster | 从节点 | EXEC sp_set_session_context @key = N'external_cluster', @value = N'yes'; | ||
5 | 故障转移命令 | 从节点 | ALTER AVAILABILITY GROUP LINUX_SQLAG FORCE_FAILOVER_ALLOW_DATA_LOSS; | ||
6 | 重新配置可用性组资源由集群管理 | 新主节点 | pcs resource manage LINUX_SQLAG | 如果前面删除了群集资源,需要重新创建 | |
7 | 重新启动的群集资源监视 | 新主节点 | pcs resource cleanup LINUX_SQLAG |