sqlserver on linux always on 安装配置

60 篇文章 13 订阅
13 篇文章 1 订阅

以下步骤仅为个人安装测试记录,未在生产环境实际用过,谨慎用于生产环境。

一、 不支持的功能和服务

类型不支持的功能或服务备注
数据库引擎事务复制所有数据更改都会以事务为单位,按照其在发布服务器上发生的顺序,同步到订阅服务器上,2019起支持
合并复制允许用户同时修改订阅服务器和发布服务器上的数据,并把这些修改“合并”成一个统一的结果,2019起支持
Stretch DBSQLServer 2016中的新特性,它支持数据库一部分存在于本地,另一部分存在于Azure SQL数据库云服务中。企业使用StretchDB可以“延伸”其部署数据库到云端,比如“热”数据可以存储在本地部署的SQL Server实例中,而“冷”数据很显然可以存储到Azure中
PolyBaseSQLServer 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,FILESTREAMSQL 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、SSRSCmdExec:运行可执行程序
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
 
9NTP时间同步所有节点可以选择
1. 物理机和虚拟机时间同步
2. 虚拟机ntp时间同步(建议采用,crontab使用ntpdate)

注:默认配置中,虽然物理机上启用NTP与内网NTP服务器进行时间同步,但是虚拟机和物理机的时间同步是关闭的。
如果没有打开物理机和虚拟机之间的时间同步,会导致系统日志记录时间有问题。启动阶段(此时还不能ssh登录),在日志中的记录时间会往前推进一个小时,等启动完成后,日志中的时间再回退一个小时。
防火墙实施10防火墙要求所有节点主从库之间,需要双向打通1433及5022端口 
所有节点关闭并禁用本地防火墙
systemctl stop firewalld
systemctl disable firewalld
 
网络规划11public ip所有节点由主机或者网络组分配IP注:要求两个节点网卡名相同
12VIP所有节点只需额外预留,不需添加网卡 
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设置14CPU 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
15ENERGY_PERF_BIAS所有节点建议值:performance
16min_perf_pct所有节点建议值:100
17C-States所有节点建议值:C1 only
多节点NUMA系统上
禁用自动NUMA平衡
18kernel.numa_balancing所有节点建议值:0
虚拟地址空间内核设置19vm.max_map_count所有节点建议值:262144
磁盘设置20sysctl 设置所有节点建议值:
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 动态内存等功能。 

三、 SQLSERVER安装

操作环境需求细节内容说明
所有节点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操作没区别,这里不记录了。

五、 创建AlwaysOn AG

编号需求项操作环境需求细节内容说明
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

六、 配置Pacemaker

编号需求项操作环境需求细节内容说明
1安装Pacemaker及相关程序所有节点yum -y install pacemaker pcs fence-agents-all resource-agentscorosync 会在安装 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=2minCluster-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 
16Pacemaker创建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-agentscorosync 会在安装 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=trueIf 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 <resourceName>
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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值