未验证 提交 709c0d9f 编写于 作者: M Mel Kiyama 提交者: GitHub

docs - add Note about host requirements to segment mirror overview (#9971)

* docs - add Note about host requirements to segment mirror overview

-also edited some related topics and changed some links
-fixed a bad link to the gpcheck utiltiy (removed in GPDB 6)

* docs - minor edit
Co-authored-by: NDavid Yozie <dyozie@pivotal.io>
上级 05d83b31
...@@ -13,15 +13,17 @@ ...@@ -13,15 +13,17 @@
<p>Generally, you should run performance tests when an administrator modifies host networking or <p>Generally, you should run performance tests when an administrator modifies host networking or
other special conditions in the system. For example, if you will run the expanded system on other special conditions in the system. For example, if you will run the expanded system on
two network clusters, run tests on each cluster.</p> two network clusters, run tests on each cluster.</p>
<note>Preparing host systems for use by a Greenplum Database system assumes that the new hosts'
operating system has been properly configured to match the existing hosts, described in <xref
href="../../install_guide/prep_os.xml"/>.</note>
</body> </body>
<topic id="topic18" xml:lang="en"> <topic id="topic18" xml:lang="en">
<title id="no159311">Adding New Hosts to the Trusted Host Environment</title> <title id="no159311">Adding New Hosts to the Trusted Host Environment</title>
<body> <body>
<p>New hosts must exchange SSH keys with the existing hosts to enable Greenplum administrative <p>New hosts must exchange SSH keys with the existing hosts to enable Greenplum administrative
utilities to connect to all segments without a password prompt. Perform the key exchange utilities to connect to all segments without a password prompt. Perform the key exchange
process twice with the <codeph><xref process twice with the <codeph><xref href="../../utility_guide/ref/gpssh-exkeys.xml"
href="../../utility_guide/ref/gpssh-exkeys.xml">gpssh-exkeys</xref></codeph> >gpssh-exkeys</xref></codeph> utility.</p>
utility.</p>
<p>First perform the process as <codeph>root</codeph>, for administration convenience, and <p>First perform the process as <codeph>root</codeph>, for administration convenience, and
then as the user <codeph>gpadmin</codeph>, for management utilities. Perform the following then as the user <codeph>gpadmin</codeph>, for management utilities. Perform the following
tasks in order:</p> tasks in order:</p>
...@@ -84,7 +86,7 @@ sdw3-4</codeblock></li> ...@@ -84,7 +86,7 @@ sdw3-4</codeblock></li>
<title>To create the <codeph>gpadmin</codeph> user</title> <title>To create the <codeph>gpadmin</codeph> user</title>
<ol id="ol_amb_xjr_g4"> <ol id="ol_amb_xjr_g4">
<li id="no160603">Use <codeph><xref href="../../utility_guide/ref/gpssh.xml" <li id="no160603">Use <codeph><xref href="../../utility_guide/ref/gpssh.xml"
>gpssh</xref></codeph> to create the <codeph>gpadmin</codeph> user on all the new >gpssh</xref></codeph> to create the <codeph>gpadmin</codeph> user on all the new
segment hosts (if it does not exist already). Use the list of new hosts you created for segment hosts (if it does not exist already). Use the list of new hosts you created for
the key exchange. For the key exchange. For
example:<codeblock># gpssh -f <i>new_hosts_file</i> '/usr/sbin/useradd <i>gpadmin</i> -d example:<codeblock># gpssh -f <i>new_hosts_file</i> '/usr/sbin/useradd <i>gpadmin</i> -d
...@@ -117,7 +119,7 @@ gpadmin --stdin'</codeblock></li> ...@@ -117,7 +119,7 @@ gpadmin --stdin'</codeblock></li>
<title id="no159219">Validating Disk I/O and Memory Bandwidth</title> <title id="no159219">Validating Disk I/O and Memory Bandwidth</title>
<body> <body>
<p>Use the <codeph><xref href="../../utility_guide/ref/gpcheckperf.xml" <p>Use the <codeph><xref href="../../utility_guide/ref/gpcheckperf.xml"
>gpcheckperf</xref></codeph> utility to test disk I/O and memory bandwidth. </p> >gpcheckperf</xref></codeph> utility to test disk I/O and memory bandwidth. </p>
<section id="no159247"> <section id="no159247">
<title>To run gpcheckperf</title> <title>To run gpcheckperf</title>
<ol> <ol>
......
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
<image href="../graphics/green-checkbox.jpg" width="29px" height="28px" <image href="../graphics/green-checkbox.jpg" width="29px" height="28px"
id="image_rcs_t1m_2r"/> id="image_rcs_t1m_2r"/>
</entry> </entry>
<entry>Initialize new segments into the array and create an expansion schema <entry>Initialize new segments into the system and create an expansion schema
(<codeph>gpexpand -i <varname>input_file</varname></codeph>).</entry> (<codeph>gpexpand -i <varname>input_file</varname></codeph>).</entry>
</row> </row>
<row> <row>
...@@ -208,29 +208,26 @@ ...@@ -208,29 +208,26 @@
configuration in the particular site and environment. </li> configuration in the particular site and environment. </li>
</ul> </ul>
<p>After selecting and adding new hardware to your network environment, ensure you perform the <p>After selecting and adding new hardware to your network environment, ensure you perform the
burn-in tasks described in <xref href="expand-nodes.xml#topic18" type="topic" format="dita" tasks described in <xref href="expand-nodes.xml" type="topic"/>.</p>
/>.</p>
</body> </body>
</topic> </topic>
<topic id="topic6" xml:lang="en"> <topic id="topic6" xml:lang="en">
<title>Planning New Segment Initialization</title> <title>Planning New Segment Initialization</title>
<body> <body>
<p>Expanding Greenplum Database can be performed when the system is up and available. Run <p>Expanding Greenplum Database can be performed when the system is up and available. Run
<codeph>gpexpand</codeph> to initialize new segment instances into the array and create an <codeph>gpexpand</codeph> to initialize new segment instances into the system and create
expansion schema.</p> an expansion schema.</p>
<p>The time required depends on the number of schema objects in the Greenplum system and other <p>The time required depends on the number of schema objects in the Greenplum system and other
factors related to hardware performance. In most environments, the initialization of new factors related to hardware performance. In most environments, the initialization of new
segments requires less than thirty minutes offline.</p> segments requires less than thirty minutes offline.</p>
<p>These utilities cannot be run while <codeph>gpexpand</codeph> is performing segment <p>These utilities cannot be run while <codeph>gpexpand</codeph> is performing segment
initialization. initialization. <ul id="ul_c3w_wdp_lgb">
<ul id="ul_c3w_wdp_lgb">
<li><codeph>gpbackup</codeph></li> <li><codeph>gpbackup</codeph></li>
<li><codeph>gpcheckcat</codeph></li> <li><codeph>gpcheckcat</codeph></li>
<li><codeph>gpconfig</codeph></li> <li><codeph>gpconfig</codeph></li>
<li><codeph>gppkg</codeph></li> <li><codeph>gppkg</codeph></li>
<li><codeph>gprestore</codeph></li> <li><codeph>gprestore</codeph></li>
</ul></p> </ul></p>
<note type="important">After you begin initializing new segments, you can no longer restore <note type="important">After you begin initializing new segments, you can no longer restore
the system using backup files created for the pre-expansion system. When initialization the system using backup files created for the pre-expansion system. When initialization
successfully completes, the expansion is committed and cannot be rolled back. </note> successfully completes, the expansion is committed and cannot be rolled back. </note>
...@@ -241,25 +238,27 @@ ...@@ -241,25 +238,27 @@
<p>If your existing system has mirror segments, the new segments must have mirroring <p>If your existing system has mirror segments, the new segments must have mirroring
configured. If there are no mirrors configured for existing segments, you cannot add configured. If there are no mirrors configured for existing segments, you cannot add
mirrors to new hosts with the <codeph>gpexpand</codeph> utility. For more information mirrors to new hosts with the <codeph>gpexpand</codeph> utility. For more information
about segment mirroring, see <xref href="../intro/about_ha.xml#about_ha/segment_mirroring" about segment mirroring configurations that are available during system initialization,
see <xref
href="../highavail/topics/g-overview-of-segment-mirroring.xml#topic3/mirror_configs"
/>.</p> />.</p>
<p>For Greenplum Database arrays with mirror segments, ensure you add enough new host <p>For Greenplum Database systems with mirror segments, ensure you add enough new host
machines to accommodate new mirror segments. The number of new hosts required depends on machines to accommodate new mirror segments. The number of new hosts required depends on
your mirroring strategy:</p> your mirroring strategy:</p>
<ul id="ul_dnt_tl5_mr"> <ul id="ul_dnt_tl5_mr">
<li id="no165384"><b>Spread Mirroring</b> — Add at least one more host to the array than <li id="no165386"><b>Group Mirroring</b> — Add at least two new hosts so the mirrors for
the first host can reside on the second host, and the mirrors for the second host can
reside on the first. This is the default type of mirroring if you enable segment
mirroring during system initialization.</li>
<li id="no165384"><b>Spread Mirroring</b> — Add at least one more host to the system than
the number of segments per host. The number of separate hosts must be greater than the the number of segments per host. The number of separate hosts must be greater than the
number of segment instances per host to ensure even spreading. You can specify this type number of segment instances per host to ensure even spreading. You can specify this type
of mirroring during system initialization or when you enable segment mirroring for an of mirroring during system initialization or when you enable segment mirroring for an
existing system.</li> existing system.</li>
<li id="no165386"><b>Grouped Mirroring</b> — Add at least two new hosts so the mirrors for
the first host can reside on the second host, and the mirrors for the second host can
reside on the first. This is the default type of mirroring if you enable segment
mirroring during system initialization.</li>
<li><b>Block Mirroring</b> — Adding one or more blocks of host systems. For example add a <li><b>Block Mirroring</b> — Adding one or more blocks of host systems. For example add a
block of four or eight hosts. Block mirroring is a custom mirroring configuration. For block of four or eight hosts. Block mirroring is a custom mirroring configuration. For
more information about block mirroring, see <xref more information about block mirroring, see <xref
href="../../best_practices/ha.xml#topic_cnm_vxc_54"/><ph otherprops="op-print"> in the href="../../best_practices/ha.xml#topic_ngz_qf4_tt"/><ph otherprops="op-print"> in the
<cite>Greenplum Database Best Practices Guide</cite></ph>.</li> <cite>Greenplum Database Best Practices Guide</cite></ph>.</li>
</ul> </ul>
</body> </body>
...@@ -367,7 +366,7 @@ ...@@ -367,7 +366,7 @@
<p>If your existing hosts have limited disk space, you may prefer to first redistribute <p>If your existing hosts have limited disk space, you may prefer to first redistribute
smaller tables (such as dimension tables) to clear space to store a copy of the largest smaller tables (such as dimension tables) to clear space to store a copy of the largest
table. Available disk space on the original segments increases as each table is table. Available disk space on the original segments increases as each table is
redistributed across the expanded array. When enough free space exists on all segments redistributed across the expanded system. When enough free space exists on all segments
to store a copy of the largest table, you can redistribute large or critical tables. to store a copy of the largest table, you can redistribute large or critical tables.
Redistribution of large tables requires exclusive locks; schedule this procedure for Redistribution of large tables requires exclusive locks; schedule this procedure for
off-peak hours.</p> off-peak hours.</p>
......
...@@ -12,8 +12,9 @@ ...@@ -12,8 +12,9 @@
unavailable, it changes the role of its mirror segment to primary segment and the role unavailable, it changes the role of its mirror segment to primary segment and the role
of the unavailable primary segment to mirror segment. Transactions in progress when the of the unavailable primary segment to mirror segment. Transactions in progress when the
failure occurred roll back and must be restarted. The administrator must then recover failure occurred roll back and must be restarted. The administrator must then recover
the mirror segment, allow the mirror to synchronize with the current primary segment, and the mirror segment, allow the mirror to synchronize with the current primary segment,
then exchange the primary and mirror segments so they are in their preferred roles.</p> and then exchange the primary and mirror segments so they are in their preferred
roles.</p>
<p>If segment mirroring is not enabled, the Greenplum Database system shuts down if a <p>If segment mirroring is not enabled, the Greenplum Database system shuts down if a
segment instance fails. Administrators must manually recover all failed segments before segment instance fails. Administrators must manually recover all failed segments before
Greenplum Database operations can resume.</p> Greenplum Database operations can resume.</p>
...@@ -48,39 +49,47 @@ ...@@ -48,39 +49,47 @@
<codeph>walsender</codeph> processes that are used for Greenplum Database <codeph>walsender</codeph> processes that are used for Greenplum Database
master and segment mirroring.</li> master and segment mirroring.</li>
</ul></p> </ul></p>
<section> <section id="mirror_configs">
<title>About Segment Mirroring Configurations</title> <title>About Segment Mirroring Configurations</title>
<p>Mirror segment instances can be placed on hosts in the cluster in different <p>Mirror segment instances can be placed on hosts in the cluster in different
configurations. As a best practice, a primary segment and the corresponding mirror configurations. As a best practice, a primary segment and the corresponding mirror
are placed on different hosts. Each host must have the same number of primary and are placed on different hosts. Each host must have the same number of primary and
mirror segments. When you create segment mirrors with the Greenplum Database mirror segments. When you create segment mirrors with the Greenplum Database
utilities <codeph><xref utilities <codeph><xref href="../../../utility_guide/ref/gpinitsystem.xml"
href="../../../utility_guide/ref/gpinitsystem.xml"/></codeph> or /></codeph> or <codeph><xref href="../../../utility_guide/ref/gpaddmirrors.xml"
<codeph><xref href="../../../utility_guide/ref/gpaddmirrors.xml"
/></codeph> you can specify the segment mirror configuration, group mirroring /></codeph> you can specify the segment mirror configuration, group mirroring
(the default) or spread mirroring. With <codeph>gpaddmirrors</codeph>, you can (the default) or spread mirroring. With <codeph>gpaddmirrors</codeph>, you can
create custom mirroring configurations with a <codeph>gpaddmirrors</codeph> create custom mirroring configurations with a <codeph>gpaddmirrors</codeph>
configuration file and specify the file on the command line.</p> configuration file and specify the file on the command line.</p>
<p><i>Group mirroring</i> is the default mirroring configuration. The mirror segments <p><i>Group mirroring</i> is the default mirroring configuration when you enable
for each host's primary segments are placed on one other host. If a single host mirroring during system initialization. The mirror segments for each host's primary
fails, the number of active primary segments doubles on the host that backs the segments are placed on one other host. If a single host fails, the number of active
failed host. The diagram <xref href="#topic3/fig_rrr_nt2_xt" format="dita"/> primary segments doubles on the host that backs the failed host. <xref
illustrates a group mirroring configuration. </p> href="#topic3/fig_rrr_nt2_xt" format="dita"/> illustrates a group mirroring
<!--<fig id="ki169754"><image href="../../graphics/mirrorsegs.png" placement="break" width="485px" height="135px"/></fig>--> configuration. </p>
<fig id="fig_rrr_nt2_xt"> <fig id="fig_rrr_nt2_xt">
<title>Group Segment Mirroring in Greenplum Database</title> <title>Group Segment Mirroring in Greenplum Database</title>
<image href="../../graphics/group-mirroring.png" id="image_crm_pt2_xt"/> <image href="../../graphics/group-mirroring.png" id="image_crm_pt2_xt"/>
</fig> </fig>
<p><i>Spread mirroring</i> spreads each host's mirrors over multiple hosts so that if <p><i>Spread mirroring</i> can be specified during system initialization. This
any single host fails, no other host will have more than one mirror promoted to an configuration spreads each host's mirrors over multiple hosts so that if any single
active primary segment. Spread mirroring is possible only if there are more hosts host fails, no other host will have more than one mirror promoted to an active
than segments per host. The diagram <xref href="#topic3/fig_ew1_qgg_xt" primary segment. Spread mirroring is possible only if there are more hosts than
format="dita"/> illustrates the placement of mirrors in a spread segment segments per host. <xref href="#topic3/fig_ew1_qgg_xt" format="dita"/> illustrates
mirroring configuration.</p> the placement of mirrors in a spread segment mirroring configuration.</p>
<fig id="fig_ew1_qgg_xt"> <fig id="fig_ew1_qgg_xt">
<title>Spread Segment Mirroring in Greenplum Database</title> <title>Spread Segment Mirroring in Greenplum Database</title>
<image href="../../graphics/spread-mirroring.png" id="image_zjm_wgg_xt"/> <image href="../../graphics/spread-mirroring.png" id="image_zjm_wgg_xt"/>
</fig> </fig>
<note>You must ensure you have the appropriate number of host systems for your mirroring
configuration when you create a system or when you expand a system. For example, to
create a system that is configured with spread mirroring requires more hosts than
segment instances per host, and a system that is configured with group mirroring
requires at least two new hosts when expanding the system. For information about
segment mirroring configurations, see <xref
href="../../../best_practices/ha.xml#topic_ngz_qf4_tt"/>. For information about
expanding systems with segment mirroring enabled, see <xref
href="../../expand/expand-planning.xml#topic7"/>. </note>
</section> </section>
<p> </p> <p> </p>
</body> </body>
......
...@@ -130,11 +130,11 @@ ...@@ -130,11 +130,11 @@
work, so performance can be degraded until the balance is restored by recovering the work, so performance can be degraded until the balance is restored by recovering the
original primary. </p> original primary. </p>
<p>Administrators perform the recovery while Greenplum Database is up and running by running <p>Administrators perform the recovery while Greenplum Database is up and running by running
the <codeph>gprecoverseg</codeph> utility. This utility locates the failed segments, verifies the <codeph>gprecoverseg</codeph> utility. This utility locates the failed segments,
they are valid, and compares the transactional state with the currently active segment to verifies they are valid, and compares the transactional state with the currently active
determine changes made while the segment was offline. <codeph>gprecoverseg</codeph> segment to determine changes made while the segment was offline.
synchronizes the changed database files with the active segment and brings the segment back <codeph>gprecoverseg</codeph> synchronizes the changed database files with the active
online.</p> segment and brings the segment back online.</p>
<p>It is important to reserve enough memory and CPU resources on segment hosts to allow for <p>It is important to reserve enough memory and CPU resources on segment hosts to allow for
increased activity from mirrors that assume the primary role during a failure. The formulas increased activity from mirrors that assume the primary role during a failure. The formulas
provided in <xref href="workloads.xml#topic_hhc_z5w_r4/section_r52_rbl_zt"/> for configuring provided in <xref href="workloads.xml#topic_hhc_z5w_r4/section_r52_rbl_zt"/> for configuring
...@@ -217,16 +217,16 @@ ...@@ -217,16 +217,16 @@
</li> </li>
<li dir="ltr"> <li dir="ltr">
<p dir="ltr">Use the <codeph>gpbackup</codeph> command to specify only the schema and <p dir="ltr">Use the <codeph>gpbackup</codeph> command to specify only the schema and
tables that you want backed up. See the <xref tables that you want backed up. See the <codeph><xref
href="https://gpdb.docs.pivotal.io/latest/utility_guide/ref/gpbackup.html" href="https://gpdb.docs.pivotal.io/latest/utility_guide/ref/gpbackup.html"
format="html" scope="external">gpbackup</xref> reference in the <cite>Greenplum format="html" scope="external">gpbackup</xref></codeph> reference for more
Database Utility Reference Guide</cite> for more information.</p> information.</p>
</li> </li>
<li dir="ltr"> <li dir="ltr">
<p dir="ltr"><codeph>gpbackup</codeph> places SHARED ACCESS locks on the set of tables <p dir="ltr"><codeph>gpbackup</codeph> places <codeph>SHARED ACCESS</codeph> locks on
to back up. Backups with fewer tables are more efficient for selectively restoring the set of tables to back up. Backups with fewer tables are more efficient for
schemas and tables, since <codeph>gprestore</codeph> does not have to search through selectively restoring schemas and tables, since <codeph>gprestore</codeph> does not
the entire database.</p> have to search through the entire database.</p>
</li> </li>
<li dir="ltr">If backups are saved to local cluster storage, move the files to a safe, <li dir="ltr">If backups are saved to local cluster storage, move the files to a safe,
off-cluster location when the backup is complete. Backup files and database files that off-cluster location when the backup is complete. Backup files and database files that
...@@ -267,19 +267,22 @@ ...@@ -267,19 +267,22 @@
</section> </section>
<section><title>Additional Information</title><i>Greenplum Database Administrator Guide</i>: <section><title>Additional Information</title><i>Greenplum Database Administrator Guide</i>:
<ul id="ul_wff_k1m_v4"> <ul id="ul_wff_k1m_v4">
<li>Monitoring a Greenplum System</li> <li><xref href="../admin_guide/managing/monitor.xml"/></li>
<li>Recovering a Failed Segment</li> <li><xref href="../admin_guide/highavail/topics/g-recovering-a-failed-segment.xml"/></li>
</ul><p><i>Greenplum Database Utility Guide</i>:<ul id="ul_fk2_hyl_v4"> </ul><p><i>Greenplum Database Utility Guide</i>:<ul id="ul_fk2_hyl_v4">
<li><codeph>gpstate</codeph>&#8212;view state of the Greenplum system</li> <li><codeph><xref href="../utility_guide/ref/gpstate.xml">gpstate</xref></codeph> - view
<li><codeph>gprecoverseg</codeph>&#8212;recover a failed segment</li> state of the Greenplum system</li>
<li><codeph>gpactivatestandby</codeph>&#8212;make the standby master the active <li><codeph><xref href="../utility_guide/ref/gprecoverseg.xml"
>gprecoverseg</xref></codeph> - recover a failed segment</li>
<li><codeph><xref href="../utility_guide/ref/gpactivatestandby.xml"
>gpactivatestandby</xref></codeph> - make the standby master the active
master</li> master</li>
</ul></p><p><xref href="http://tools.ietf.org/html/rfc1697" format="html" scope="external" </ul></p><p><xref href="http://tools.ietf.org/html/rfc1697" format="html" scope="external"
>RDBMS MIB Specification</xref></p></section> >RDBMS MIB Specification</xref></p></section>
</body> </body>
</topic> </topic>
<topic id="topic_ngz_qf4_tt"> <topic id="topic_ngz_qf4_tt">
<title>Segment Mirroring Configuration</title> <title>Segment Mirroring Configurations</title>
<body> <body>
<p>Segment mirroring allows database queries to fail over to a backup segment if the primary <p>Segment mirroring allows database queries to fail over to a backup segment if the primary
segment fails or becomes unavailable. Pivotal requires mirroring for supported production segment fails or becomes unavailable. Pivotal requires mirroring for supported production
...@@ -309,15 +312,16 @@ ...@@ -309,15 +312,16 @@
mirroring</i>:<ul id="ul_uwr_gkv_tt"> mirroring</i>:<ul id="ul_uwr_gkv_tt">
<li><b>Group mirroring</b> — Each host mirrors another host's primary segments. This is <li><b>Group mirroring</b> — Each host mirrors another host's primary segments. This is
the default for <codeph><xref href="../utility_guide/ref/gpinitsystem.xml" the default for <codeph><xref href="../utility_guide/ref/gpinitsystem.xml"
>gpinitsystem</xref></codeph> and <codeph>gpaddmirrors</codeph>.</li> >gpinitsystem</xref></codeph> and <codeph><xref
href="../utility_guide/ref/gpaddmirrors.xml">gpaddmirrors</xref></codeph>.</li>
<li><b>Spread mirroring</b> — Mirrors are spread across the available hosts. This requires <li><b>Spread mirroring</b> — Mirrors are spread across the available hosts. This requires
that the number of hosts in the cluster is greater than the number of segments per that the number of hosts in the cluster is greater than the number of segments per
host.</li> host.</li>
</ul></p> </ul></p>
<p>You can design a custom mirroring configuration and use the Greenplum <codeph><xref <p>You can design a custom mirroring configuration and use the Greenplum
href="../utility_guide/ref/gpaddmirrors.xml">gpaddmirrors</xref></codeph> or <codeph>gpaddmirrors</codeph> or <codeph><xref
<xref href="../utility_guide/ref/gpmovemirrors.xml">gpaddmirrors</xref> href="../utility_guide/ref/gpmovemirrors.xml">gpmovemirrors</xref></codeph> utilities to
utilities to set up the configuration.</p> set up the configuration.</p>
<p><i>Block mirroring</i> is a custom mirror configuration that divides hosts in the cluster <p><i>Block mirroring</i> is a custom mirror configuration that divides hosts in the cluster
into equally sized blocks and distributes mirrors evenly to hosts within the block. If a into equally sized blocks and distributes mirrors evenly to hosts within the block. If a
primary segment fails, its mirror on another host within the same block becomes the active primary segment fails, its mirror on another host within the same block becomes the active
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册