丐版sqlserver AlwaysOn集群

news/发布时间2024/5/10 7:18:42
点击查看代码
丐版sqlserver集群之前试过docker的,k8s的,然后发现,还是最朴素的是最简单的,希望有大佬能够汉化,他妈的,那些英文看得人要发癫啊。前置准备,参照丐版pxc集群:
https://www.cnblogs.com/zwnfdswww/p/18112077
如果不关防火墙:
打开对应的端口即可:
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanentsudo firewall-cmd --reloadsudo hostnamectl set-hostname m191
sudo hostnamectl set-hostname m192
sudo hostnamectl set-hostname m193bash
vim /etc/hosts10.1.161.29 m191
10.1.161.31 m192
10.1.161.32 m193sudo 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
sudo /opt/mssql/bin/mssql-conf setup设置密码:
Citygis@1613systemctl status mssql-serveryum install mssql-server-agent/opt/mssql/bin/mssql-conf set sqlagent.enabled true
systemctl restart mssql-server.servicesudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.reposudo yum remove unixODBC-utf16 unixODBC-utf16-develsudo yum install -y mssql-tools unixODBC-develecho 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profileecho 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrcsource ~/.bashrcsqlcmd -S 10.1.161.32 -U SA -P 'Citygis@1613'CREATE DATABASE TestDBSELECT Name from sys.DatabasesGO
USE TestDB
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);GO
SELECT * FROM Inventory WHERE quantity > 152;GO
QUIT
需要几台服务器,重复安装即可
测试:
navicat连一下
10.1.161.29,1433
SA Citygis@1613如果没有驱动,去navicat目录下安装sqlncli_x64即可
sql(all)
将 SA 帐户禁用:
ALTER LOGIN SA DISABLE;CREATE LOGIN Citygis@1613 WITH PASSWORD = 'Citygis@1613';
ALTER SERVER ROLE sysadmin ADD MEMBER Citygis@1613;重要:新用户登录
ALTER LOGIN SA DISABLE;Bash(all):sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1sudo systemctl restart mssql-serverBash(all)
yum install -y mssql-server-ha 
yum info mssql-server-haSql(all):ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);GOSql(all):CREATE LOGIN dbm_login WITH PASSWORD = '1111.aaa';CREATE USER dbm_user FOR LOGIN dbm_login;第一个是登录用户,第二个是执行用户Sql(主):CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1111.aaa';CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';BACKUP CERTIFICATE dbm_certificateTO FILE = '/var/opt/mssql/data/dbm_certificate.cer'WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk',ENCRYPTION BY PASSWORD = '1111.aaa');ls /var/opt/mssql/data
看下文件有没有生成
Bash(主):cd /var/opt/mssql/data/scp dbm_certificate.* 10.1.161.31:/var/opt/mssql/data/scp dbm_certificate.* 10.1.161.32:/var/opt/mssql/data/Bash(从);cd /var/opt/mssql/data/chown mssql.mssql dbm_certificate.*Sql(从):CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1111.aaa';CREATE CERTIFICATE dbm_certificateAUTHORIZATION dbm_userFROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk',DECRYPTION BY PASSWORD = '1111.aaa');Sql(all);CREATE ENDPOINT [Hadr_endpoint]AS TCP (LISTENER_PORT = 5022)FOR DATABASE_MIRRORING (ROLE = ALL,AUTHENTICATION = CERTIFICATE dbm_certificate,ENCRYPTION = REQUIRED ALGORITHM AES);ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login];sudo firewall-cmd --zone=public --add-port=5022/tcp --permanentsudo firewall-cmd --reloadSql(all);select @@SERVERNAME;Sql(主):CREATE AVAILABILITY GROUP [ag1]
WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ONN'm191'WITH (ENDPOINT_URL = N'tcp://m191:5022',AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,FAILOVER_MODE = EXTERNAL,SEEDING_MODE = AUTOMATIC,SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)),N'm192'WITH (ENDPOINT_URL = N'tcp://m192:5022',AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,FAILOVER_MODE = EXTERNAL,SEEDING_MODE = AUTOMATIC,SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)),N'm193'WITH (ENDPOINT_URL = N'tcp://m193:5022',AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,FAILOVER_MODE = EXTERNAL,SEEDING_MODE = AUTOMATIC,SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL));ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;Sql(从):ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);        ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE(如果报错,可能是hosts文件里面主机名对应ip错了)测试一下:Sql(主):CREATE DATABASE [db1];ALTER DATABASE [db1] SET RECOVERY FULL;BACKUP DATABASE [db1]TO DISK = N'/var/opt/mssql/data/db1.bak';ALTER AVAILABILITY GROUP [AG1] ADD DATABASE [db1];从节点查一下。集群完成。DROP AVAILABILITY GROUP group_name可选:Bash(all)
sudo yum install subscription-manager用户名和密码去redhat官网申请
vi /etc/rhsm/rhsm.confSet to 1 to disable certificate validation:
insecure = 1sudo subscription-manager registersudo subscription-manager list --availablesudo subscription-manager attach --pool=<PoolID>其中,“PoolId”是上一步中高可用性订阅的池 ID 。
subscription-manager repos --list选一个高可用相关的软件仓库
sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
(备用:sudo subscription-manager repos --enable=rhel-atomic-7-cdk-3.3-rpms)
如果系统自带了有,可以不执行上面的命令Bash(all):yum install pacemaker pcs resource-agents corosync fence-agents-all -yBash(all):passwd hacluster  (这里密码一定要设置成一样的,我这设置的是123456.com)Bash(all):sudo systemctl enable pcsdsudo systemctl start pcsdsudo systemctl enable pacemakerfirewall-cmd --add-service=high-availability --zone=public --permanentfirewall-cmd --zone=public --add-port=2224/tcp --permanentfirewall-cmd --zone=public --add-port=3121/tcp –permanentfirewall-cmd --zone=public --add-port=5405/udp --permanent firewall-cmd --reloadBash(all):sudo pcs cluster destroysudo systemctl enable pacemakerBash(主):sudo pcs cluster auth m191 m192 m193 -u hacluster -p 123456.comsudo pcs cluster setup --name AG1 m191 m192 m193 chown -R hacluster.haclient /var/log/clusterpcs cluster start --all
pcs cluster enable –allpcs cluster statusps aux | grep pacemakercorosync-cfgtool -scorosync-cmapctl | grep memberspcs status corosynccrm_verify -L -V(all):
pcs property set stonith-enabled=falsepcs property set no-quorum-policy=ignoreBash(all):sudo pcs property set stonith-enabled=falseBash(all):yum install mssql-server-ha –ysudo systemctl restart mssql-serverSql(all):USE [master]GOCREATE LOGIN [pacemakerLogin] with PASSWORD= N'1111.aaa';ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin]Bash(all):sudo echo 'pacemakerLogin' >> ~/pacemaker-passwdsudo echo '1111.aaa' >> ~/pacemaker-passwdsudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwdsudo chown root:root /var/opt/mssql/secrets/passwdsudo chmod 400 /var/opt/mssql/secrets/passwdBash(主)重要,ip记得改sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=AG1 meta failure-timeout=60s master notify=truesudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=10.1.161.70执行完之后查看是否绑定成功
sudo pcs resource show
看下虚拟ip在哪里,去相应的主机
ip  addr showBash(主)sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Mastersudo pcs constraint order promote ag_cluster-master then start virtualipsudo pcs status测试:
navicat连一下10.1.161.70,1433
Citygis@1613 Citygis@1613
Sql(VIP):Sql(VIP):-- group infoSELECTg.name as ag_name,rgs.primary_replica,rgs.primary_recovery_health_desc as recovery_health,rgs.synchronization_health_desc as sync_healthFrom sys.dm_hadr_availability_group_states as rgsJOIN sys.availability_groups AS gON rgs.group_id = g.group_id--replicas infoSELECTg.name as ag_name,r.replica_server_name,rs.is_local,rs.role_desc as role,rs.operational_state_desc as op_state,rs.connected_state_desc as connect_state,rs.synchronization_health_desc as sync_state,rs.last_connect_error_number,rs.last_connect_error_descriptionFrom sys.dm_hadr_availability_replica_states AS  rsJOIN sys.availability_replicas AS rON rs.replica_id = r.replica_idJOIN sys.availability_groups AS gON g.group_id = r.group_id--DB levelSElECTg.name as ag_name,r.replica_server_name,DB_NAME(drs.database_id) as [database_name],drs.is_local,drs.is_primary_replica,synchronization_state_desc as sync_state,synchronization_health_desc as sync_health,database_state_desc as db_stateFROM sys.dm_hadr_database_replica_states AS drsJOIN sys.availability_replicas AS rON r.replica_id = drs.replica_idJOIN sys.availability_groups AS gON g.group_id = drs.group_idORDER BY g.name, drs.is_primary_replica DESC;GOSQL Server Always On的同步原理:所有的事务会被提交到主副本,辅助副本去读取物理日志来同步,新建的数据库需要加入到ag里面Pacemaker的监控原理:会用被动心跳来检查,如果发现节点有问题,会通过三角轮转进行迁移,然后还能对节点进行监控引用:
[1] https://www.cnblogs.com/guarderming/p/12082936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/74883373.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

狂神说Java Web学习笔记_Session

原理图服务器会给每一个用户(浏览器)创建一个session对象 一个session独占一个浏览器,主要浏览器没有关,这个session就存在 登录之后,整个网站都可以访问 常用场景 保存一个用户的登录信息 在整个网站中经常会使用到的数据 常用的session方法 //得到Session HttpSession s…

CAS 操作原理

CAS(Compare and Swap)是一种原子操作,用于实现乐观锁的一种方式。CAS 操作包括三个参数:内存地址(或变量),期望值和新值。CAS 操作会先比较内存地址处的值和期望值是否相等,如果相等,则将该内存地址的值更新为新值;如果不相等,则不做任何操作。CAS 操作是一种无锁算…

二手交易平台原型图

二手交易平台原型图绘制 墨刀、Axure、Mockplus等原型设计工具优缺点分析Axure优点:强大的编辑功能,便于制作素材库。 快速的复制粘贴,素材库和原型库丰富。 项目共享功能,方便同事间同步工作,保留所有工作历史。 可以生成历史版本的项目文档。缺点:正版的Axure售价高,对…

pycharm2020.1在ubuntu20.04上的安装操作

1. 下载pycharm linux版本(本文在linux 2020.1版本测试)https://download-cdn.jetbrains.com/python/pycharm-professional-2020.1.tar.gz 2.移动tar.gz安装包到ubuntu18.04目录(例如/root/),解压tar -zxvf pycharm-professional-2020.1.tar.gz # 解压3.运行进到pycharm安…

[转帖]windows batch cmd命令行之 for命令

https://www.cnblogs.com/hjbf/p/13572157.html for循环命令 基本用法:格式:FOR [参数] %%变量名 IN (相关 字符串集 或文件集 或命令返回结果集) DO 执行的命令help for 对一组文件中的每一个文件执行某个特定命令。FOR %variable IN (set) DO command [command-parameters]%v…

两表关联查询:sql、mybatis

MySQL 8.0.33 mybatis 3.5.15 mybatis-plus 3.5.5 ---序章 功能:给文本内容打标签。 文本表:text,主键 uuid,还有 content 字段。 文本标签表:text_tag,主键uuid,字段text_uuid 为 text表的主键,还有 tag_name 字段——标签名。 ben发布于博客园 需求: 查找包含所有 标…