Files
doc-exports/docs/dws/umn/dws_01_7252.html
Lu, Huayi 95132e24fc DWS UMN 830.201_new version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Reviewed-by: Rechenburg, Matthias <matthias.rechenburg@t-systems.com>
Co-authored-by: Lu, Huayi <luhuayi@huawei.com>
Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
2024-05-27 11:54:34 +00:00

86 lines
20 KiB
HTML

<a name="EN-US_TOPIC_0000001659054686"></a><a name="EN-US_TOPIC_0000001659054686"></a>
<h1 class="topictitle1">Tutorial: Dividing a New Physical Cluster into Logical Clusters</h1>
<div id="body8662426"><div class="section" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_section913311128432"><h4 class="sectiontitle">Scenario</h4><p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p198861833145014">This section describes how to divide a new six-node physical cluster (having no service data) into two logical clusters. If your physical cluster already has service data, perform operations by referring to <a href="dws_01_7251.html">Tutorial: Converting a Physical Cluster That Contains Data into a Logical Cluster</a>.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_section13544134213317"><h4 class="sectiontitle">Prerequisites</h4><p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p146318508248">Create a six-node cluster. For details, see <a href="dws_01_0019.html">Creating a Cluster</a>.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_section3854162823518"><h4 class="sectiontitle">Dividing a Cluster into Logical Clusters</h4><ol id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_ol8948540193920"><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li5948640203910"><span>On the <strong id="EN-US_TOPIC_0000001659054686__b11842742205816">Cluster Management</strong> page, click the name of a cluster to go to the cluster details page. In the navigation pane, choose <strong id="EN-US_TOPIC_0000001659054686__b484214218583">Logical Clusters</strong>.</span></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li18395185614450"><span>Click <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b4435446113011">Add Logical Cluster</strong> in the upper right corner, select a host ring (three nodes) on the right, add it to the list on the left, enter the logical cluster name <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b4766168153115">lc1</strong>, and click <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b534910143115">OK</strong>.</span><p><p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p496772815112">After about 2 minutes, the logical cluster is added.</p>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li1429135414369"><span>Repeat the preceding steps to create the second logical cluster <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b18341420193116">lc2</strong>.</span></li></ol>
</div>
<div class="section" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_section1895712445373"><h4 class="sectiontitle">Creating Logical Clusters, Associating Them with Users, and Querying Data Across Logical Clusters</h4><ol id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_ol420665903719"><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li81141771638"><span>Connect to the database as system administrator <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b9281135017320">dbadmin</strong> and run the following SQL statement to check whether the logical cluster is created:</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen620812454320"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">group_name</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">PGXC_GROUP</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p14731825124314"><span><img id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_image473025164318" src="figure/en-us_image_0000001711821160.png"></span></p>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li4280728174313"><span>Create users <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b1716112053310">u1</strong> and <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b823711203316">u2</strong> and associate them with logical clusters <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b1772112278339">lc1</strong> and <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b182574264337">lc2</strong>, respectively.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen14338102119448"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">USER</span><span class="w"> </span><span class="n">u1</span><span class="w"> </span><span class="n">NODE</span><span class="w"> </span><span class="k">GROUP</span><span class="w"> </span><span class="ss">&quot;lc1&quot;</span><span class="w"> </span><span class="n">password</span><span class="w"> </span><span class="s1">'{password}'</span><span class="p">;</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">USER</span><span class="w"> </span><span class="n">u2</span><span class="w"> </span><span class="n">NODE</span><span class="w"> </span><span class="k">GROUP</span><span class="w"> </span><span class="ss">&quot;lc2&quot;</span><span class="w"> </span><span class="n">password</span><span class="w"> </span><span class="s1">'{password}'</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li172587184414"><span>Switch to user <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b490113114337">u1</strong>, create table <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b17911933193314">t1</strong>, and insert data into the table.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen19740107164516"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SET</span><span class="w"> </span><span class="k">ROLE</span><span class="w"> </span><span class="n">u1</span><span class="w"> </span><span class="n">PASSWORD</span><span class="w"> </span><span class="s1">'{password}'</span><span class="p">;</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">u1</span><span class="p">.</span><span class="n">t1</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">int</span><span class="p">);</span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">u1</span><span class="p">.</span><span class="n">t1</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">),(</span><span class="mi">2</span><span class="p">);</span>
</pre></div></td></tr></table></div>
</div>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li1168315575440"><span>Switch to user <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b549043714333">u2</strong>, create table <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b127054388337">t2</strong>, and insert data into the table.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen1252820206512"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SET</span><span class="w"> </span><span class="k">ROLE</span><span class="w"> </span><span class="n">u2</span><span class="w"> </span><span class="n">PASSWORD</span><span class="w"> </span><span class="s1">'{password}'</span><span class="p">;</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">u2</span><span class="p">.</span><span class="n">t2</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">int</span><span class="p">);</span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">u2</span><span class="p">.</span><span class="n">t2</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">),(</span><span class="mi">2</span><span class="p">);</span>
</pre></div></td></tr></table></div>
</div>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li11264113881"><span>Query the <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b1458110143420">u1.t1</strong> table as user <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b1986125711337">u2</strong>. The command output indicates that the user does not have the permission.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen204771116191118"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">u1</span><span class="p">.</span><span class="n">t1</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p136095512114"><span><img id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_image1960145531116" src="figure/en-us_image_0000001759420745.png" title="Click to enlarge" class="imgResize"></span></p>
<p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p166012556114"></p>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li0287191645113"><span>Switch back to the system administrator <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b1910655663417">dbadmin</strong> and query the <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b1933915585345">u1.t1</strong> and <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b8410027356">u2.t2</strong> tables, which are created in clusters <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b45881726133513">lc1</strong> and <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b1754613273357">lc2</strong>, respectively, corresponding to two services. In this way, data is isolated based on logical clusters.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen16129125214710"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SET</span><span class="w"> </span><span class="k">ROLE</span><span class="w"> </span><span class="n">dbadmin</span><span class="w"> </span><span class="n">PASSWORD</span><span class="w"> </span><span class="s1">'{password}'</span><span class="p">;</span>
<span class="k">SELECT</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">oid</span><span class="p">,</span><span class="n">relname</span><span class="p">,</span><span class="n">pgroup</span><span class="p">,</span><span class="n">nodeoids</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_class</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="k">LEFT</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">pgxc_class</span><span class="w"> </span><span class="n">pg</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">oid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pg</span><span class="p">.</span><span class="n">pcrelid</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">relname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'t1'</span><span class="p">;</span>
<span class="k">SELECT</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">oid</span><span class="p">,</span><span class="n">relname</span><span class="p">,</span><span class="n">pgroup</span><span class="p">,</span><span class="n">nodeoids</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_class</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="k">LEFT</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">pgxc_class</span><span class="w"> </span><span class="n">pg</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">oid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pg</span><span class="p">.</span><span class="n">pcrelid</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">relname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'t2'</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p91298522718"><span><img id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_image9129952571" src="figure/en-us_image_0000001759580597.png" title="Click to enlarge" class="imgResize"></span></p>
<p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p21295521271"><span><img id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_image512914523720" src="figure/en-us_image_0000001711821172.png" title="Click to enlarge" class="imgResize"></span></p>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li770410541111"><span>Grant user <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b783726112818">u2</strong> the permissions to access logical cluster <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b72551731182814">lc1</strong>, schema <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b519913412281">u1</strong>, and table <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b174441737132819">u1.t1</strong>.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen175011710171415"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">GRANT</span><span class="w"> </span><span class="k">usage</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">NODE</span><span class="w"> </span><span class="k">GROUP</span><span class="w"> </span><span class="n">lc1</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">u2</span><span class="p">;</span>
<span class="k">GRANT</span><span class="w"> </span><span class="k">usage</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="k">SCHEMA</span><span class="w"> </span><span class="n">u1</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">u2</span><span class="p">;</span>
<span class="k">GRANT</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">u1</span><span class="p">.</span><span class="n">t1</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">u2</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<div class="note" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_note0818181844513"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p4818111874511">Logical clusters implement permission isolation (by node groups) based on physical clusters. To let a user access data across logical clusters, you need to grant the logical cluster (node-group layer) permissions, schema permissions, and table permissions to the user in sequence. If no logical cluster permissions are granted, the error message "permission denied for node group xx" will be displayed.</p>
</div></div>
</p></li><li id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_li83181016101314"><span>Switch to user <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b75101715193114">u2</strong> and query the <strong id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_b7939418133110">u1.t1</strong> table. The query is successful. The logical cluster implements data isolation and allows cross-logical cluster access after user authorization.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_screen919994123811"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SET</span><span class="w"> </span><span class="k">ROLE</span><span class="w"> </span><span class="n">u2</span><span class="w"> </span><span class="n">PASSWORD</span><span class="w"> </span><span class="s1">'{password}'</span><span class="p">;</span>
<span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">u1</span><span class="p">.</span><span class="n">t1</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_p13676125382"><span><img id="EN-US_TOPIC_0000001659054686__en-us_topic_0000001568736674_image186681219385" src="figure/en-us_image_0000001759420753.png"></span></p>
</p></li></ol>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_01_0724.html">Managing Logical Clusters</a></div>
</div>
</div>
<script language="JavaScript">
<!--
image_size('.imgResize');
var msg_imageMax = "view original image";
var msg_imageClose = "close";
//--></script>