Ubuntu 22.04
Sponsored Link

SQL Server 2022 : Always On Availability Group2023/12/07

 
Linux पर SQL सर्वर के लिए Always On Availability Group कॉन्फ़िगर करें।
यह उदाहरण निम्न प्रकार से पर्यावरण पर आधारित है।
इस सेटिंग पर सेकेंडरी केवल-पढ़ने योग्य प्रतिकृति होस्ट हैं।
-----------+-----------------------------+-----------------------------+------------
           |10.0.0.51                    |10.0.0.52                    |10.0.0.53
+----------+-----------+      +----------+-----------+      +----------+-----------+
| [ node01.srv.world ] |      | [ node02.srv.world ] |      | [ node03.srv.world ] |
|      (Primary)       |      |      (Secondary)     |      |      (Secondary)     |
|      SQL Server      |      |       SQL Server     |      |       SQL Server     |
+----------------------+      +----------------------+      +----------------------+

[1]
[2] सभी नोड्स पर, Always On Availability Group सुविधा सक्षम करें और डेटाबेस प्रतिकृति के लिए एक उपयोगकर्ता भी बनाएं।
[password] अनुभाग को अपनी पसंद के किसी भी पासवर्ड से बदलें।
root@node01:~#
/opt/mssql/bin/mssql-conf set hadr.hadrenabled 1

SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
root@node01:~#
systemctl restart mssql-server

root@node01:~#
sqlcmd -S localhost -U SA

Password:
1> alter event session AlwaysOn_health on server with (startup_state=on);
2> go
1> create login dbm_login with password = 'P@ssw0rd01';
2> create user dbm_user for login dbm_login;
3> go
1> exit
[3] सभी नोड्स पर, प्रमाणपत्र बनाएं और इसे अन्य सभी नोड्स पर कॉपी करें और एक एंडपॉइंट भी बनाएं।
[password] अनुभाग को अपनी पसंद के किसी भी पासवर्ड से बदलें।
root@node01:~#
NODENAME=$(hostname -s)

root@node01:~# cat > create-cert.sql <<EOF
create master key encryption by password = 'P@ssw0rd01';
create certificate ${NODENAME}_cert with subject = 'AG ${NODENAME} Certificate';
backup certificate ${NODENAME}_cert
to file = '/var/opt/mssql/data/${NODENAME}_cert.cer'
create endpoint AGEndpoint state = started
as tcp (listener_ip = all, listener_port = 5022)
for data_mirroring ( role = all, authentication = certificate ${NODENAME}_cert);
EOF 

root@node01:~#
sqlcmd -S localhost -U SA -i create-cert.sql
root@node01:~#
cd /var/opt/mssql/data

root@node01:/var/opt/mssql/data#
scp ${NODENAME}_cert.cer node02.srv.world:/var/opt/mssql/data/

dbm_certificate.cer                           100%  667   614.7KB/s   00:00
dbm_certificate.pvk                           100% 1212     1.0MB/s   00:00
root@node01:/var/opt/mssql/data#
scp ${NODENAME}_cert.cer node03.srv.world:/var/opt/mssql/data/

dbm_certificate.cer                           100%  667   581.6KB/s   00:00
dbm_certificate.pvk                           100% 1212   935.1KB/s   00:00
root@node01:/var/opt/mssql/data#
ssh node02.srv.world "chown mssql:mssql /var/opt/mssql/data/${NODENAME}_cert.cer"

root@node01:/var/opt/mssql/data#
ssh node03.srv.world "chown mssql:mssql /var/opt/mssql/data/${NODENAME}_cert.cer"
[4] सभी नोड्स पर, अन्य नोड्स से कॉपी किए गए प्रमाणपत्र पुनर्स्थापित करें।
root@node01:~# cat > restore-cert.sql <<EOF
create certificate node02_cert authorization dbm_user
from file = '/var/opt/mssql/data/node02_cert.cer'
create certificate node03_cert authorization dbm_user
from file = '/var/opt/mssql/data/node03_cert.cer'
grant connect on endpoint::AGEndpoint to dbm_login;
EOF 

root@node01:~#
sqlcmd -S localhost -U SA -i restore-cert.sql

[5] प्राथमिक नोड पर, Availability Group कॉन्फ़िगर करें।
root@node01:~# cat > create-ag.sql <<'EOF'
create availability group [AG01]
with (cluster_type = none)
for replica on
N'node01' with (
endpoint_url = N'tcp://10.0.0.51:5022',
availability_mode = asynchronous_commit,
failover_mode = manual,
seeding_mode = automatic,
primary_role (read_only_routing_list=(('node02','node03'), 'node01')),
secondary_role (
allow_connections = read_only,
read_only_routing_url = N'tcp://10.0.0.51:1433')),
N'node02' with (
endpoint_url = N'tcp://10.0.0.52:5022',
availability_mode = asynchronous_commit,
failover_mode = manual,
seeding_mode = automatic,
primary_role (read_only_routing_list=(('node01','node03'), 'node02')),
secondary_role (
allow_connections = read_only,
read_only_routing_url = N'tcp://10.0.0.52:1433')),
N'node03' with (
endpoint_url = N'tcp://10.0.0.53:5022',
availability_mode = asynchronous_commit,
failover_mode = manual,
seeding_mode = automatic,
primary_role (read_only_routing_list=(('node01','node02'), 'node03')),
secondary_role (
allow_connections = read_only,
read_only_routing_url = N'tcp://10.0.0.53:1433'));
alter availability group [AG01] grant create any database;
EOF 

root@node01:~#
sqlcmd -S localhost -U SA -i create-ag.sql
[6] सभी द्वितीयक नोड्स पर, Availability Group में शामिल हों।
root@node02:~#
sqlcmd -S localhost -U SA

Password:
1> alter availability group [AG01] join with (cluster_type = none);
2> alter availability group [AG01] grant create any database;
3> go
1> exit
[7] प्राथमिक नोड पर, श्रोता और डेटाबेस को Availability Group में जोड़ें।
root@node01:~# cat > create-db.sql <<'EOF'
alter availability group [AG01] add listener 'AG01_listener'
( with ip (
('10.0.0.51', '255.255.255.0') ), port = 1433);
create database [AG01_DB];
alter database [AG01_DB] set recovery full;
backup database [AG01_DB] to disk = N'/var/opt/mssql/data/AG01_DB.bak';
alter availability group [AG01] add database [AG01_DB];
EOF 

root@node01:~#
sqlcmd -S localhost -U SA -i create-db.sql

Password:
Processed 344 pages for database 'AG01_DB', file 'AG01_DB' on file 1.
Processed 1 pages for database 'AG01_DB', file 'AG01_DB_log' on file 1.
BACKUP DATABASE successfully processed 345 pages in 0.105 seconds (25.609 MB/sec).
# द्वितीयक नोड पर डेटाबेस के लिए पहुंच की पुष्टि करें

root@node01:~#
sqlcmd -S node02 -U SA -Q 'select name, create_date from sys.databases where name = "AG01_DB"'

Password:
name                            create_date
------------------------------- -----------------------
AG01_DB                         2023-11-24 13:27:47.830

(1 rows affected)
[8] ठीक है। सत्यापित करें कि यह श्रोता और डेटाबेस तक पहुँचने के लिए सामान्य रूप से काम करता है।
root@node01:~#
sqlcmd -S localhost -U SA

Password:

# वर्तमान स्थिति
1> select L.replica_id,L.replica_server_name,R.role_desc from sys.availability_replicas as L
2> left join sys.dm_hadr_availability_replica_states as R on L.replica_id = R.replica_id
3> go
replica_id                           replica_server_name         role_desc
------------------------------------ --------------------------- ------------------------------------------------------------
2A12BC5A-64EE-474C-8748-E0A9F48BAE1D node01                      PRIMARY
BB59A594-7C5D-4D35-81B0-25B0EB6A6D73 node02                      SECONDARY
474D1BC7-08D0-47B0-BF3A-59D8BE6C69A6 node03                      SECONDARY

(3 rows affected)

1> exit

# प्रश्नों को केवल पढ़ने की पहुंच के साथ द्वितीयक नोड पर भेजा गया

root@node01:~#
sqlcmd -S 10.0.0.51 -U SA -K readonly -d AG01_DB -Q 'select @@servername'

Password:
-------------
node03

(1 rows affected)
# क्वेरीज़ को केवल पढ़ने के लिए पहुंच (राउंड रॉबिन रूटिंग) के साथ द्वितीयक नोड पर रूट किया गया

root@node01:~#
sqlcmd -S 10.0.0.51 -U SA -K readonly -d AG01_DB -Q 'select @@servername'

Password:
-------------
node02

(1 rows affected)
# क्वेरीज़ को बिना केवल पढ़ने की पहुंच के प्राथमिक नोड पर रूट किया गया

root@node01:~#
sqlcmd -S 10.0.0.51 -U SA -d AG01_DB -Q 'select @@servername'

Password:
--------------
node01

(1 rows affected)
[9] Windows क्लाइंट पर SSMS के साथ [Always On AG] की स्थिति को सत्यापित करना या बदलना संभव है।
मिलान सामग्री