{"id":9826,"date":"2017-02-28T12:13:23","date_gmt":"2017-02-28T11:13:23","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/"},"modified":"2017-02-28T12:13:23","modified_gmt":"2017-02-28T11:13:23","slug":"introducing-alwayson-availability-groups-on-linux","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/","title":{"rendered":"Introducing AlwaysOn availability groups on Linux"},"content":{"rendered":"<p>A couple of days ago, Microsoft has rolled out the <a href=\"https:\/\/blogs.technet.microsoft.com\/dataplatforminsider\/2017\/02\/17\/sql-server-next-version-ctp-1-3-now-available\/\" target=\"_blank\" rel=\"noopener noreferrer\">SQL Server vNext CTP 1.3<\/a> which includes very nice features and the one that interested me in the supportability of AlwaysOn availability groups on Linux. That is definitely a good news because we may benefit from new ways of architecting high-availability. There are a lot of new cool enhancements, which we&#8217;ll try to study when writing new blog posts. In this first blog, let\u2019s learn new available configuration options.<\/p>\n<p>First of all, let\u2019s say that configuring availability groups on Linux is not different than configuring them on Windows in workgroup mode (domainless configuration) from SQL Server perspective.<\/p>\n<p>Basically, the same steps remain as it is (please refer to the Microsoft installation\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/linux\/sql-server-linux-availability-group-configure\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a>):<\/p>\n<ul>\n<li>Creating login and users on each replica<\/li>\n<li>Creating certificate and grant authorization to the corresponding user on each replica<\/li>\n<li>Creating endpoint for data mirroring and grant permission connected to the corresponding certificate<\/li>\n<\/ul>\n<p>So let\u2019s just set the scene before moving forward on the other installation steps. I used for my demo two virtual machines on Hyper-V which run on Linux CentOS 7 (LINUX02 and LINUX04)\u00a0. I also installed two SQL Server instances (CTP 1.3) on each machine which will run on the top of the cluster infrastructure with Pacemaker and Corosync.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-00-ag-linux-demo-infra.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15030\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-00-ag-linux-demo-infra.jpg\" alt=\"blog 119 - 00 - ag linux - demo infra\" width=\"415\" height=\"303\" \/><\/a><\/p>\n<p>Obviously this time the NFS server is not part of this infrastructure and this time\u00a0I used a symmetric storage on each virtual machine which includes two mount points\u00a0and two ext4 partitions (respectively \/SQL_DATA and \/SQL_LOG to host my AdventureWorks2012 database files).<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[mikedavem@linux02 ~]$ cat \/etc\/fstab\n\n\/dev\/mapper\/cl-root     \/                       xfs     defaults        0 0\nUUID=d6eb8d27-35c7-4f0f-b0c1-42e380ab2eca \/boot                   xfs     defaults        0 0\n\/dev\/mapper\/cl-swap     swap                    swap    defaults        0 0\n\/dev\/sdb1       \/sql_data       ext4    defaults 0 0\n\/dev\/sdc1       \/sql_log        ext4    defaults 0 0<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SELECT \n\tname AS logical_name,\n\tphysical_name\nFROM sys.master_files\nWHERE database_id = DB_ID('AdventureWorks2012')<\/pre>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-01-ag-linux-adventurworks2012-files.jpg\">\u00a0<\/a><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-01-ag-linux-adventurworks2012-files.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15034\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-01-ag-linux-adventurworks2012-files.jpg\" alt=\"blog 119 - 01 - ag linux - adventurworks2012 files\" width=\"424\" height=\"85\" \/><\/a><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">First step to enable the AlwaysOn feature: we have to use the <strong>mssql-conf tool<\/strong> (which replaces the famous SQL Server configuration manager) with the new option set <strong>hadrenabled 1<\/strong><\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">Then if we use the Linux firewall on each machine, we have to open the corresponding TCP endpoint port on the Linux firewall on each Linux machine. <\/span><\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[root@linux02 data]firewall-cmd --zone=public --add-port=5022\/tcp --permanent\nsuccess\n[root@linux02 data]firewall-cmd \u2013reload \nsuccess\n[root@linux02 data]firewall-cmd --permanent --zone=public --list-all\npublic\n  target: default\n  icmp-block-inversion: no\n  interfaces:\n  sources:\n  services: dhcpv6-client high-availability mountd nfs rpc-bind ssh\n  ports: 1433\/tcp 5022\/tcp\n  protocols:\n  masquerade: no\n  forward-ports:\n  sourceports:\n  icmp-blocks:\n  rich rules:\n\n[root@linux04 ~]firewall-cmd --zone=public --add-port=5022\/tcp --permanent\nsuccess\n[root@linux04 ~]firewall-cmd --reload<\/pre>\n<p>&nbsp;<\/p>\n<p>No really new stuff so far \u2026 The most interesting part comes now. After installing SQL Server on Linux and achieving endpoint configurations, it\u2019s time to create the availability group. But wait, at this stage we didn\u2019t install any clustering part right? And in fact, we don\u2019t have to do this. We are now able to create an availability group without any cluster dependencies by using a new T-SQL parameter CLUSTER_TYPE = NONE as follows. Very interesting because we may think about new scenarios where only read-scalability capabilities are considered on DR site. In this case we don\u2019t have to setup additional cluster nodes which may lead to manageability overhead in this case.<\/p>\n<p>We may also use the direct seeding mode feature available since SQL Server 2016 to simplify the process of adding a database in the corresponding availability group (AdventureWorks2012 database in my case).<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">:CONNECT LINUX02 -U sa -P Xxxxx\n\nCREATE AVAILABILITY GROUP [agLinux]\nWITH \n(\n\tDB_FAILOVER = ON, --&gt; Trigger the failover of the entire AG if one DB fails \n\tCLUSTER_TYPE = NONE --&gt; SQL Server is not a member of a Windows Server Failover Cluster \n)\nFOR REPLICA ON\nN'LINUX02' \nWITH \n(\n\tENDPOINT_URL = N'tcp:\/\/192.168.5.18:5022',\n    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,\n    FAILOVER_MODE = AUTOMATIC,\n    SEEDING_MODE = AUTOMATIC, --&gt; Use direct seeding mode\n    SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)\n),\nN'LINUX04' \nWITH \n( \n\tENDPOINT_URL = N'tcp:\/\/192.168.5.20:5022', \n    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,\n\tFAILOVER_MODE = AUTOMATIC,\n\tSEEDING_MODE = AUTOMATIC, --&gt; Use direct seeding mode\n    SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)\n);\nGO\n\nALTER AVAILABILITY GROUP [agLinux] \nGRANT CREATE ANY DATABASE;\nGO\n\n:CONNECT LINUX04 -U sa -P Xxxxx\nALTER AVAILABILITY GROUP [agLinux] JOIN WITH (CLUSTER_TYPE = NONE)\nALTER AVAILABILITY GROUP [agLinux] GRANT CREATE ANY DATABASE;\nGO\n\n\n:CONNECT LINUX02 -U sa -P Xxxxx\nALTER DATABASE [AdventureWorks2012] SET RECOVERY FULL;\nGO\nBACKUP DATABASE [AdventureWorks2012] TO DISK = 'NUL';\nGO\n-- Add the AdventureWorks2012 database to the agLinux AG\nALTER AVAILABILITY GROUP [agLinux] ADD DATABASE [AdventureWorks2012];\nGO<\/pre>\n<p>&nbsp;<\/p>\n<p>After configuring the agLinux availability group let\u2019s have a look at the different DMVs I usually use in this case:<\/p>\n<ul>\n<li>sys.dm_hadr_availability_group_states<\/li>\n<li>sys.dm_hadr_availability_replica_states<\/li>\n<li>sys.dm_hadr_database_replica_states<\/li>\n<\/ul>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">-- groups info\nSELECT \n\tg.name as ag_name,\n\trgs.primary_replica, \n\trgs.primary_recovery_health_desc as recovery_health, \n\trgs.synchronization_health_desc as sync_health\nFROM sys.dm_hadr_availability_group_states as rgs\nJOIN sys.availability_groups AS g\n\t\t\t\t ON rgs.group_id = g.group_id\n\n-- replicas info\nSELECT \n\tg.name as ag_name,\n\tr.replica_server_name,\n\trs.is_local,\n\trs.role_desc as role,\n\trs.operational_state_desc as op_state,\n\trs.connected_state_desc as connect_state,\n\trs.synchronization_health_desc as sync_state,\n\trs.last_connect_error_number,\n\trs.last_connect_error_description\nFROM sys.dm_hadr_availability_replica_states AS rs\nJOIN sys.availability_replicas AS r\n\tON rs.replica_id = r.replica_id\nJOIN sys.availability_groups AS g\n\tON g.group_id = r.group_id\n\n-- DB level          \nSELECT \n\tg.name as ag_name,\n\tr.replica_server_name,\n\tDB_NAME(drs.database_id) as [database_name],\n\tdrs.is_local,\n\tdrs.is_primary_replica,\n\tsynchronization_state_desc as sync_state,\n\tsynchronization_health_desc as sync_health,\n\tdatabase_state_desc as db_state\nFROM sys.dm_hadr_database_replica_states AS drs\n\t\t JOIN sys.availability_replicas AS r\n\t\t  ON r.replica_id = drs.replica_id\n\t\t JOIN sys.availability_groups AS g\n\t\t  ON g.group_id = drs.group_id\nORDER BY g.name, drs.is_primary_replica DESC;\nGO<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">Here the corresponding output:<\/span><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-1-ag-linux-ag-status-e1488282284665.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15027\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-1-ag-linux-ag-status-e1488282284665.jpg\" alt=\"blog 119 - 1 - ag linux - ag status\" width=\"900\" height=\"200\" \/><\/a><\/p>\n<p>Ok everything seems to be ok. We have configured an availability group which includes two replicas and synchronous replication so far. But maybe you have already noticed we didn\u2019t create any listener and the reason is pretty obvious: if we refer to previous versions of SQL Server, creating a listener requires to create a corresponding CAP on the WSFC side and in our context, no cluster exists at this stage. So go ahead and let\u2019s do it. You may refer to the <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/linux\/sql-server-linux-availability-group-cluster-rhel\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft documentation<\/a> to add the pacemaker cluster to the existing infrastructure.<\/p>\n<p>I didn\u2019t expect a big change compared to my last installation for <a href=\"https:\/\/www.dbi-services.com\/blog\/introducing-high-availability-with-sql-server-on-linux\/\" target=\"_blank\" rel=\"noopener noreferrer\">SQL Server FCI on Linux<\/a> for the basics but for the integration of the AG resource it will probably be another story. Indeed, the declaration of the resource (ocf:mssql:ag) is completely different compared to the SQL Server FCI (ocf::sql:fci). In this case, we have to create a multi-state resource. Multi-state resources are specialized clone resources which may be in one of two operating modes \u2013 master and slave. We run exactly on the same concept with availability groups because we consider to use one primary replica (master) and at least one secondary (slave). According to the <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/linux\/sql-server-linux-availability-group-cluster-rhel\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft documentation<\/a> we have to setup meta-properties which limit the number of resource copies (on replicas) as well as the number of master resources (only one primary replica at time in our case).<\/p>\n<p><strong>Update 20.04.2017 &#8211; Removing of pcs command because it keeps changing with new CTPs. Please refer to the Microsoft documentation to get the last update of the command. <\/strong><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">Creating a multi-state resource generates two separate resources regarding their role. In my case, I will get respectively sqllinuxaag-master (for the resource enrolled as Master resource) and sqllinuxaag-slave (for resource(s) enrolled as Slave resource(s)). <\/span><\/p>\n<p><strong>Update 20.04.2017 &#8211; Removing of pcs command because it keeps changing with new CTPs. Please refer to the Microsoft documentation to get the last update of the command<\/strong><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">Finally, we have to create and associate a virtual IP address as follows. The virtual IP must run at the same location than the master resource in our case (INFINITY is mandatory here)<\/span><\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[mikedavem@linux02 ~]$ sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=192.168.5.30\n[mikedavem@linux02 ~]$ sudo pcs constraint colocation add virtualip sqllinuxaag-master INFINITY with-rsc-role=Master<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">Here a recap of the existing constraints which concern my availability group resource:<\/span><\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[mikedavem@linux02 ~]$ sudo pcs constraint\nLocation Constraints:\nOrdering Constraints:\n  promote sqllinuxaag-master then start virtualip (kind:Mandatory)\nColocation Constraints:\n  virtualip with sqllinuxaag-master (score:INFINITY) (with-rsc-role:Master)\nTicket Constraints:<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">We may notice the global state of the resources and their roles (Master\/Slave)<\/span><\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[mikedavem@linux02 ~]$ sudo pcs status\nCluster name: clustlinuxag\nStack: corosync\nCurrent DC: linux04.dbi-services.test (version 1.1.15-11.el7_3.2-e174ec8) - partition with quorum\nLast updated: Mon Feb 27 06:16:03 2017          Last change: Mon Feb 27 06:14:11 2017 by root via cibadmin on linux02.dbi-services.test\n\u2026\n\nFull list of resources:\n\n Master\/Slave Set: sqllinuxaag-master [sqllinuxaag]\n     Masters: [ linux02.dbi-services.test ]\n     Slaves: [ linux04.dbi-services.test ]\n virtualip      (ocf::heartbeat:IPaddr2):       Started linux02.dbi-services.test<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">So, now let\u2019s perform some failover tests. I used a basic PowerShell script to connect to my availability group by using the sqllinuxaag resource and return a response (OK and the server name of the concerned replica or KO). But let\u2019s say the resource is not considered as a listener from the availability group. No listener exists at this stage. <\/span><\/p>\n<ul>\n<li>First test:<\/li>\n<\/ul>\n<p>The first test consisted in switching manually over the sqllinuxaag (master) to the next available node (LINUX02). At this stage, we can\u2019t use neither the wizard nor T-SQL statement to trigger a failover event. This is a limitation (explained by Microsoft) and I expect to see it to disappear in the future. Keeping the control of such action from SQL Server side will make more sense for DBAs.<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[mikedavem@linux04 ~]$ sudo pcs resource move sqllinuxaag-master linux02.dbi-services.test --master<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">During the failover event, no way to reach out the resource but the situation went back into normal as expected.<\/span><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-2-ag-linux-ag-failover-manual-test-e1488282338909.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15028\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-2-ag-linux-ag-failover-manual-test-e1488282338909.jpg\" alt=\"blog 119 - 2 - ag linux - ag failover manual test\" width=\"900\" height=\"149\" \/><\/a><\/p>\n<ul>\n<li>Second test<\/li>\n<\/ul>\n<p>The second test consisted in simulating \u201csoft\u201d failure by changing the state of the new active node (LINUX02) to standby in order to trigger a switch over the next available cluster node (LINUX04). But before going on this way, let\u2019s configure stickiness to avoid unexpected failback of the sqllinuxaag-master resource when the situation will go back to normal.<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[mikedavem@linux04 ~]$ sudo pcs resource defaults resource-stickiness=INFINITY\n[mikedavem@linux04 ~]$ sudo pcs cluster standby linux02.dbi-services.test\n\n[mikedavem@linux04 ~]$ sudo pcs status\nCluster name: clustlinuxag\nStack: corosync\nCurrent DC: linux02.dbi-services.test (version 1.1.15-11.el7_3.2-e174ec8) - partition with quorum\nLast updated: Sun Feb 26 18:55:01 2017          Last change: Sun Feb 26 18:54:42 2017 by root via crm_attribute on linux04.dbi-services.test\n\n2 nodes and 3 resources configured\n\nNode linux02.dbi-services.test: standby\nOnline: [ linux04.dbi-services.test ]\n\nFull list of resources:\n\n Master\/Slave Set: sqllinuxaag-master [sqllinuxaag]\n     Masters: [ linux04.dbi-services.test ]\n     Stopped: [ linux02.dbi-services.test ]\n virtualip      (ocf::heartbeat:IPaddr2):       Started linux04.dbi-services.test<\/pre>\n<p>&nbsp;<\/p>\n<p>Same result than previously. During the failover event, the resource was unreachable but after the situation went back to normal, the application was able to connect again.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15021\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg\" alt=\"blog 119 - 3 - ag linux - ag failover with standby test\" width=\"900\" height=\"149\" \/><\/a><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">We may also confirm the state of the availability group by using usual DMVs. The replica role has switched between replicas as expected and the synchronization state remained in healthy state.<\/span><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-4-ag-linux-ag-failover-with-standby-test.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15022\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-4-ag-linux-ag-failover-with-standby-test.jpg\" alt=\"blog 119 - 4- ag linux - ag failover with standby test\" width=\"859\" height=\"213\" \/><\/a><\/p>\n<ul>\n<li>Third test<\/li>\n<\/ul>\n<p>My third test consisted in simulating a network outage between my two cluster nodes and the infrastructure responded well and performed the necessary tasks to recover the situation.<\/p>\n<p>It was a quick introduction to the new capabilities offered by the SQL Server vNext in terms of HA and availability groups. Other scenarios and tests as well will come soon. In any event, availability groups feature is very popular as well as Linux in my area and getting the way to mix the both will probably be a good argument for customer adoption.\u00a0\u00a0 We will see in a near future!<\/p>\n<p>See you<\/p>\n<p><span style=\"float: none;background-color: #ffffff;color: #333333;cursor: text;font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size: 16px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;text-align: left;text-decoration: none;text-indent: 0px;text-transform: none\">By David Barbarin<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A couple of days ago, Microsoft has rolled out the SQL Server vNext CTP 1.3 which includes very nice features and the one that interested me in the supportability of AlwaysOn availability groups on Linux. That is definitely a good news because we may benefit from new ways of architecting high-availability. There are a lot [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":9831,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[297,1017,84,73,1018,51,1019],"type_dbi":[],"class_list":["post-9826","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","tag-availability-groups","tag-corosync","tag-high-availability","tag-linux","tag-pacemaker","tag-sql-server","tag-sql-server-vnext"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Introducing AlwaysOn availability groups on Linux<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing AlwaysOn availability groups on Linux\" \/>\n<meta property=\"og:description\" content=\"A couple of days ago, Microsoft has rolled out the SQL Server vNext CTP 1.3 which includes very nice features and the one that interested me in the supportability of AlwaysOn availability groups on Linux. That is definitely a good news because we may benefit from new ways of architecting high-availability. There are a lot [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-28T11:13:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"149\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"Introducing AlwaysOn availability groups on Linux\",\"datePublished\":\"2017-02-28T11:13:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/\"},\"wordCount\":1287,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg\",\"keywords\":[\"Availability groups\",\"CoroSync\",\"High availability\",\"Linux\",\"PaceMaker\",\"SQL Server\",\"SQL Server vNext\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/\",\"name\":\"Introducing AlwaysOn availability groups on Linux\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg\",\"datePublished\":\"2017-02-28T11:13:23+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bfab48333280d616e1170e7369df90a4\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg\",\"width\":900,\"height\":149},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/introducing-alwayson-availability-groups-on-linux\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing AlwaysOn availability groups on Linux\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/microsoft-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introducing AlwaysOn availability groups on Linux","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/","og_locale":"en_US","og_type":"article","og_title":"Introducing AlwaysOn availability groups on Linux","og_description":"A couple of days ago, Microsoft has rolled out the SQL Server vNext CTP 1.3 which includes very nice features and the one that interested me in the supportability of AlwaysOn availability groups on Linux. That is definitely a good news because we may benefit from new ways of architecting high-availability. There are a lot [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/","og_site_name":"dbi Blog","article_published_time":"2017-02-28T11:13:23+00:00","og_image":[{"width":900,"height":149,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"Introducing AlwaysOn availability groups on Linux","datePublished":"2017-02-28T11:13:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/"},"wordCount":1287,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg","keywords":["Availability groups","CoroSync","High availability","Linux","PaceMaker","SQL Server","SQL Server vNext"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/","url":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/","name":"Introducing AlwaysOn availability groups on Linux","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg","datePublished":"2017-02-28T11:13:23+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-119-3-ag-linux-ag-failover-with-standby-test-e1488281823656.jpg","width":900,"height":149},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/introducing-alwayson-availability-groups-on-linux\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing AlwaysOn availability groups on Linux"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9826","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=9826"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9826\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/9831"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=9826"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=9826"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=9826"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=9826"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}