/etc/hosts文件实现节点间名称解析(避免依赖DNS),格式如下:192.168.1.10 centos00 # 主节点
192.168.1.11 centos01 # 从节点1
192.168.1.12 centos02 # 从节点2
yum-utils、curl、wget等基础工具;sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo
sudo yum install -y mssql-server
YourStrongPassw0rd)和版本(选择“Evaluation”或“Developer”版本用于测试):sudo /opt/mssql/bin/mssql-conf setup
sudo systemctl start mssql-server
sudo systemctl enable mssql-server
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
1表示运行正常):SELECT serverproperty('HadrManagerStatus');
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKey123!';
master数据库为例):CREATE CERTIFICATE Node00_Cert
WITH SUBJECT = 'Node00 SQL Server Certificate',
EXPIRY_DATE = '2026-12-31';
BACKUP CERTIFICATE Node00_Cert
TO FILE = '/var/opt/mssql/certs/Node00_Cert.cer';
CREATE ENDPOINT Hadr_endpoint
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATA_MIRRORING (
ROLE = ALL,
AUTHENTICATION = CERTIFICATE Node00_Cert,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO [sqlserviceaccount]; -- 替换为SQL Server服务账户
sudo yum install -y pacemaker corosync pcs
ssh-keygen -t rsa # 在主节点生成密钥
ssh-copy-id centos01 # 复制到从节点
ssh-copy-id centos02
sudo systemctl start pcsd
sudo systemctl enable pcsd
sudo pcs cluster auth centos00 centos01 centos02 -u hacluster -p YourClusterPassw0rd
sudo pcs cluster setup --name SQLCluster centos00 centos01 centos02
sudo pcs cluster start --all
sudo pcs cluster enable --all
centos00)上执行,指定同步副本(SYNCHRONOUS_COMMIT)和自动故障转移(EXTERNAL):CREATE AVAILABILITY GROUP [SQLAG]
WITH (CLUSTER_TYPE = EXTERNAL, DB_FAILOVER = ON)
FOR REPLICA ON
N'centos00' WITH (
ENDPOINT_URL = N'TCP://centos00:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'centos01' WITH (
ENDPOINT_URL = N'TCP://centos01:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
ALTER AVAILABILITY GROUP [SQLAG] GRANT CREATE ANY DATABASE;
sudo pcs resource create SQLAG ocf:mssql:ag ag_name=SQLAG meta failure-timeout=30s
sudo pcs resource create SQLListener ocf:mssql:listener listener_name=SQLListener port=1433 ag_name=SQLAG
sudo pcs constraint colocation add SQLListener with SQLAG INFINITY
sudo pcs constraint order promote SQLAG then start SQLListener
sudo pcs cluster standby centos00 # 将主节点设为备用
sudo pcs status # 检查主节点是否切换至从节点
SQLListener,端口1433),验证读写操作是否正常。BACKUP COMPRESSION DEFAULT);crm_mon命令监控集群状态,设置日志轮转避免磁盘空间耗尽;memory.memorylimitmb)和并行度(max degree of parallelism)。通过以上步骤,可在CentOS上搭建SQL Server AlwaysOn可用性组集群,实现数据库的高可用性与故障自动转移。如需更复杂的配置(如跨数据中心部署),建议参考Microsoft官方文档或咨询专业数据库管理员。