/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官方文档或咨询专业数据库管理员。