下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇)

一.      创建共享磁盘和 Cluster

微软官方配置文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure

Linux Cluster结构图如下:

具体配置步骤如下:

1.            安装及配置SQL Server

a)       先安装两个SQL Server作为Cluster的两个节点,请参考博文“SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截图)”(如果需要更多节点则安装更多);

b)      在Secondary端停掉并禁用SQL Server服务:

  1. sudo systemctl stop mssql-server
  2. sudo systemctl disable mssql-server

c)       备份同步Server Master Key(由于Linux中SQL Server是以本地用户mssql运行的,因此不同的节点无法识别别的节点的认证,所以需要备份同步加密key从Primary端到其它节点上以便于能够成功解密Server Master Key):

  • Secondary端备份原来的machine-key:
  1. sudo su
  2. cd /var/opt/mssql/secrets
  3. mv machine-key machine-key.original.bak
  • Primary端把machine-key复制到Secondary端:
  1. sudo su
  2. cd /var/opt/mssql/secrets/
  3. scp machine-key root@**<Secondary Node IP Address>**:/var/opt/mssql/secrets/
  • Secondary端检查是否成功备份过来并且添加相关权限:
  1. ls

  1. chown mssql:mssql machine-key

d)      在Primary端为Pacemaker程序创建一个SQL登录用户,并给足足够的权限运行sp_server_diagnostics。

先开启SQL Server服务:

  1. sudo systemctl start mssql-server

连接到SQL Server上:

  1. sqlcmd -S localhost -U sa -P **<Your Password>**

执行以下SQL语句创建用户并赋予权限:

  1. USE [master] CREATE LOGIN [<loginName>] with PASSWORD= N'<loginPassword>'
  2. GRANT VIEW SERVER STATE TO <loginName>
  3. GO

退出sqlcmd:

  1. exit

e)      在Primary端停掉并禁用SQL Server服务:

  1. sudo systemctl stop mssql-server
  2. sudo systemctl disable mssql-server

f)        配置每一个节点的hosts文件,保证互相能够识别。

  1. sudo vi /etc/hosts

下图是配置完成后的例子:

2.            配置共享磁盘以及转移数据库文件

有很多种提供共享磁盘的解决方案。下面简单介绍配置NFS的共享磁盘。推荐使用Kerberos去配置NFS以提高安全性:https://www.certdepot.net/rhel7-use-kerberos-control-access-nfs-network-shares/。这里仅介绍最简单的方式用于简单测试和学习。

用NFS配置共享磁盘

找另一个RHEL系统机器作为NFS Server,执行如下命令(由于仅是测试研究,这里选用Cluster的一个节点作为NFS Server也可):

a)       安装NFS软件包:

  1. sudo yum -y install nfs-utils

b)      启用并开启rpcbind服务:

  1. sudo systemctl enable rpcbind && systemctl start rpcbind

c)       启用并开启nfs-server服务:

  1. sudo systemctl enable nfs-server && systemctl start nfs-server

d)      编辑/etc/exports文件去设置想要共享的存储路径,注意每一个共享是一行:

  1. vi /etc/exports

设置完的例子如下:

e)      导出共享并确定是否成功:

  1. sudo exportfs -rav
  2. sudo showmount -e

f)        在SELinux中添加异常设置:

  1. sudo setsebool -P nfs_export_all_rw

g)       防火墙中允许相关服务通信:

  1. sudo firewall-cmd --permanent --add-service=nfs
  2. sudo firewall-cmd --permanent --add-service=mountd
  3. sudo firewall-cmd --permanent --add-service=rpc-bind
  4. sudo firewall-cmd --reload

为Cluster所有节点设置NFS

在所有的Cluster节点机器上执行如下命令,确保能访问NFS共享磁盘:

a)       安装NFS软件包:

  1. sudo yum -y install nfs-utils

b)      防火墙中允许相关服务通信:

  1. sudo firewall-cmd --permanent --add-service=nfs
  2. sudo firewall-cmd --permanent --add-service=mountd
  3. sudo firewall-cmd --permanent --add-service=rpc-bind
  4. sudo firewall-cmd --reload

c)       确认是否可以看到NFS共享:

  1. sudo showmount -e **<IP OF NFS SERVER>**

更多关于NFS的文档资源参考以下站点:

设置数据库文件路径为共享磁盘

转移数据库文件到共享磁盘上:

a)       在Primary节点上先把数据库文件保存到临时路径/var/opt/mssql/tmp下,

  1. su mssql
  2. mkdir /var/opt/mssql/tmp
  3. cp /var/opt/mssql/data/* /var/opt/mssql/tmp
  4. rm /var/opt/mssql/data/*
  5. exit

b)      在所有节点上编辑/etc/fstab文件,保证重启系统后自动挂载NFS共享磁盘:

  1. <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=,intr

例子如下:

Note(摘自微软):

关于如何配置Fencing,请参考How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On(RHEL Pacemaker中配置STONITH)

c)       挂载刚刚配置的NFS存储:

  1. sudo mount -a

可以执行mount命令检测是否已经成功挂载:

d)      在Primary节点上把临时路径下的数据库文件复制到新挂载的路径下,并保证mssql这个本地用户有读写权限:

  1. chown mssql /var/opt/mssql/data
  2. chgrp mssql /var/opt/mssql/data
  3. su mssql
  4. cp /var/opt/mssql/tmp/* /var/opt/mssql/data/
  5. rm /var/opt/mssql/tmp/*
  6. exit

e)      在Primary节点上开启SQL Server服务验证是否成功,这时SQL Server已经使用NFS服务器上的共享磁盘了:

  1. sudo systemctl start mssql-server
  2. sudo systemctl status mssql-server
  3. sudo systemctl stop mssql-server

f)        在其它非Primary节点上依次开启SQL Server服务验证是否成功。

Note:目前所有节点的SQL Server都使用这个NFS服务器共享磁盘了,根据微软推荐,为了防止冲突,需要使用一个File System Cluster资源来防止一个共享路径被挂载多次。

3.            安装及配置Pacemaker

在所有Cluster节点下依次执行以下操作:

a)       创建一个文件保存之前为Pacemaker创建的SQL Server登录用户账户密码信息:

  1. sudo touch /var/opt/mssql/secrets/passwd
  2. sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd
  3. sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd
  4. sudo chown root:root /var/opt/mssql/secrets/passwd
  5. sudo chmod /var/opt/mssql/secrets/passwd

b)      设置防火墙允许Pacemaker服务通信:

  1. sudo firewall-cmd --permanent --add-service=high-availability
  2. sudo firewall-cmd --reload

Note:如果使用的是其它防火墙工具,需要开启如下端口。

TCP: Ports 2224, 3121, 21064

UDP: Port 5405

c)       安装Pacemaker软件包:

  1. sudo yum install pacemaker pcs fence-agents-all resource-agents

d)      设置安装Pacemaker和Corosync时创建的默认用户hacluster的密码:

  1. sudo passwd hacluster

e)      启用并开启pcsd服务,以及启用Pacemaker:

  1. sudo systemctl enable pcsd && sudo systemctl start pcsd
  2. sudo systemctl enable pacemaker

f)        安装FCI资源代理:

  1. sudo yum install mssql-server-ha

4.            创建Cluster

下面正式创建Cluster:

a)       在Primary节点上创建Cluster:

  1. sudo pcs cluster auth **<nodeName1 nodeName2 …>** -u hacluster
  2. sudo pcs cluster setup --name **<clusterName>** **<nodeName1 nodeName2 …>**
  3. sudo pcs cluster start --all

例子如下:

b)      目前CTP 2.1中没有HyperV和cloud环境用的fencing,因此暂时需要禁用fencing功能(不推荐在生产环境中禁用)

  1. sudo pcs property set stonith-enabled=false
  2. sudo pcs property set start-failure-is-fatal=false

c)       配置Cluster的相关资源信息,可能需要设置的信息如下:

SQL Server Resource Name——SQL Server资源名字,

Timeout Value ——Cluster等待一个资源起来的超时时间,如果是SQL Server,则是master database启动的时间,

Floating IP Resource Name——虚拟IP资源的名字,

IP Address——用来连接SQL Cluster实例的IP地址,

File System Resource Name——文件系统资源的名字,

device——NFS共享路径,

directory——本地挂载路径,

fstype——文件共享类型,比如nfs。

脚本如下:

  1. sudo pcs cluster cib cfg
  2. sudo pcs -f cfg resource create **<sqlServerResourceName>** ocf:mssql:fci op defaults timeout=**<timeout_in_seconds>**
  3. sudo pcs -f cfg resource create **<floatingIPResourceName>** ocf:heartbeat:IPaddr2 ip=**<ip Address>**
  4. sudo pcs -f cfg resource create **<fileShareResourceName>** Filesystem device=**<networkPath>** directory=**<localPath>** fstype=**<fileShareType>**
  5. sudo pcs -f cfg constraint colocation add **<virtualIPResourceName>** **<sqlResourceName>**
  6. sudo pcs -f cfg constraint colocation add **<fileShareResourceName>** **<sqlResourceName> **
  7. sudo pcs cluster cib-push cfg

例子如下:

  1. sudo pcs cluster cib cfg
  2. sudo pcs -f cfg resource create mssqlha ocf:mssql:fci op defaults timeout=60s
  3. sudo pcs -f cfg resource create virtualip ocf:heartbeat:IPaddr2 ip=10.2.38.180
  4. sudo pcs -f cfg resource create fs Filesystem device="10.2.38.178:/mnt/nfs" directory="/var/opt/mssql/data" fstype="nfs"
  5. sudo pcs -f cfg constraint colocation add virtualip mssqlha
  6. sudo pcs -f cfg constraint colocation add fs mssqlha
  7. sudo pcs cluster cib-push cfg

配置完成后SQL Server会运行在Cluster其中一个节点上。

d)      使用如下命令确认Cluster中相关SQL Server服务是否正常:

  1. sudo pcs status

下图是正常启动的情况:

e)      正常启动后就可以用Cluster虚拟IP访问SQL Server了:

Note:

  • 如果某些资源启动的时候有问题,可以使用下面这个命令诊断启动:
  1. sudo pcs resource debug-start **<resource id>**

如果没问题或者有问题修复后,则重启Cluster服务稍微等一段时间就好使了:

  1. sudo pcs cluster stop --all
  2. sudo pcs cluster start --all

2.      管理和使用Cluster(基础篇)

这里暂时只介绍一个常用的功能Failover,可以转移某个资源到目的端节点上:

  1. sudo pcs resource move **<sqlResourceName>** **<targetNodeName>**
  2. sudo pcs resource clear **<sqlResourceName>**

  • Linux上为SQL Server搭建的共享磁盘集群系统和Windows SQL Cluster是不一样的(所以标题为“类”),它不能用SQL  Query来判断是否是Cluster了,以下命令目前检测不出来是Cluster也获取不到任何信息:
  1. select serverproperty(‘IsClustered’);
  2. select * from ::fn_virtualservernodes();
  3. select * from sys.dm_os_cluster_nodes,sys.dm_io_cluster_shared_drives;

从这个站点可以找到依据,但是不确定未来是否有变化:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure

Note: 文档比较基础,未来可能会继续更新。


[原创文章,转载请注明出处,仅供学习研究之用,如有错误请留言,谢谢支持]

[原站点:http://www.cnblogs.com/lavender000/p/6880355.html,来自永远薰薰]

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”SQL Server Cluster功能的更多相关文章

  1. Configure Red Hat Enterprise Linux shared disk cluster for SQL Server

    下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) ...

  2. Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group

    下面简单介绍一下如何在Red Hat Enterprise Linux上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的 ...

  3. ORACLE Install (10g r2) FOR Red Hat Enterprise Linux Server release 5.5 (64 bit) (转)

    OS Info----------# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 5.5 (Tikanga)# cat ...

  4. setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientific Linux

    This is a guide on setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientif ...

  5. [转] KVM storage performance and cache settings on Red Hat Enterprise Linux 6.2

    Almost one year ago, I checked how different cache settings affected KVM storage subsystem performan ...

  6. Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7

    Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7 Solution Verified ...

  7. Common administrative commands in Red Hat Enterprise Linux 5, 6, and 7

    https://access.redhat.com/articles/1189123 Common administrative commands in Red Hat Enterprise Linu ...

  8. Red Hat Enterprise Linux 6.6安装体验

    Red Hat Enterprise Linux 6.6的安装首界面有五个选项,这跟以前的Red Hat Enterprise Linux 5.x的安装界面是有一些区别的.   安装或者升级现有系统( ...

  9. 如何安装win10+Red Hat Enterprise Linux双系统?

    1,如何安装win10+Red Hat Enterprise Linux双系统???? 有很多人(没做过调查,可能就我自己想装吧)想要安装Red Hat Enterprise Linux系统,但是又不 ...

随机推荐

  1. python之数据结构链表实现方式

    #!/usr/bin/env python # --------------------------------------- # author : Geng Jie # email : gengji ...

  2. Spark处理日志文件常见操作

    spark有自己的集群计算技术,扩展了hadoop mr模型用于高效计算,包括交互式查询和 流计算.主要的特性就是内存的集群计算提升计算速度.在实际运用过程中也当然少不了对一些数据集的操作.下面将通过 ...

  3. 老李分享:持续集成学好jenkins之Git和Maven配置 1

    老李分享:持续集成学好jenkins之Git和Maven配置   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  4. 原生js实现tab切换

    //通过原生js实现table切换<html><head><meta http-equiv="Content-Type" content=" ...

  5. 机器学习-scikit learn学习笔记

    scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...

  6. Unity3D C#中使用LINQ查询(与 SQL的区别)

    学过SQL的一看就懂 LINQ代码很直观 但是,LINQ却又跟SQL完全不同 首先来看一下调用LINQ的代码 int[] badgers = {36,5,91,3,41,69,8}; var skun ...

  7. C#7的新语法

    阅读目录 out变量 元组(Tuples) 模式匹配(Pattern matching) 本地引用和返回(Ref locals and returns) 本地函数(Local functions) 表 ...

  8. 网站与域名知识扫盲-DNS

    域名概述 域名的概念 IP地址不易记忆 早期使用Hosts解析域名 主机名称重复 主机维护困难 DNS(Domain Name System 域名系统) 分布式 层次性 域名空间结构 根域 组织域[. ...

  9. 第三章 PL/SQL编程

    3.1 PL/SQL基础知识    3.1.1 什么是PL/SQL?        PL/SQL是结合Oracle过程语言和结构化查询语言的一种扩展语言        3.1.1.1 PL/SQL体系 ...

  10. ubuntu 下安装Angular2-cli脚手架

    一.首先需要安装node,npm. 请到nodejs官网进行下载并跟据提示进行安装 版本号中间偶数为稳定版本建议下载 https://nodejs.org/en/ node相关操作 https://n ...