www.icesr.com
IT运维工程师的摇篮

2.docker配置mysql主从实现读写分离

2.docker配置mysql主从实现读写分离

2.1 获取mysql镜像

  • 获取镜像
<code>$ <span class="hljs-built_in">sudo</span> docker pull mysql</code>
  • 查看镜像
<code>$ <span class="hljs-built_in">sudo</span> docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              <span class="hljs-number">7</span>d83a47ab2d2        <span class="hljs-number">4</span> weeks ago         <span class="hljs-number">408</span>MB</code>

2.2 安装mysql-client,用于访问mysql容器数据库

<code>$ sudo apt<span class="hljs-attribute">-get</span> install mysql<span class="hljs-attribute">-client</span><span class="hljs-attribute">-core</span><span class="hljs-subst">-</span><span class="hljs-number">5.7</span></code>

2.3创建工作目录,保存mysql数据

<code><span class="hljs-variable">$ </span>cd ~
<span class="hljs-variable">$ </span>mkdir docker-mysql-data
<span class="hljs-variable">$ </span>mkdir mysql-master
<span class="hljs-variable">$ </span>mkdir mysql-slave1</code>

2.4创建主从mysql配置文件

  • 创建主mysql配置文件
<code>cd ~/docker<span class="hljs-attribute">-mysql</span><span class="hljs-attribute">-data</span>
$ vim my<span class="hljs-attribute">-master</span><span class="hljs-built_in">.</span>cnf</code>

复制如下配置:

<code><span class="hljs-preprocessor"># Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.</span>
<span class="hljs-preprocessor">#</span>
<span class="hljs-preprocessor"># This program is free software; you can redistribute it and/or modify</span>
<span class="hljs-preprocessor"># it under the terms of the GNU General Public License as published by</span>
<span class="hljs-preprocessor"># the Free Software Foundation; version 2 of the License.</span>
<span class="hljs-preprocessor">#</span>
<span class="hljs-preprocessor"># This program is distributed in the hope that it will be useful,</span>
<span class="hljs-preprocessor"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hljs-preprocessor"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hljs-preprocessor"># GNU General Public License for more details.</span>
<span class="hljs-preprocessor">#</span>
<span class="hljs-preprocessor"># You should have received a copy of the GNU General Public License</span>
<span class="hljs-preprocessor"># along with this program; if not, write to the Free Software</span>
<span class="hljs-preprocessor"># Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA</span>

<span class="hljs-preprocessor">#</span>
<span class="hljs-preprocessor"># The MySQL Community Server configuration file.</span>
<span class="hljs-preprocessor">#</span>
<span class="hljs-preprocessor"># For explanations see</span>
<span class="hljs-preprocessor"># http://dev.mysql.com/doc/mysql/en/server-system-variables.html</span>

[client]
port        = <span class="hljs-number">3306</span>
socket      = /<span class="hljs-keyword">var</span>/run/mysqld/mysqld.sock

[mysqld_safe]
pid-file    = /<span class="hljs-keyword">var</span>/run/mysqld/mysqld.pid
socket      = /<span class="hljs-keyword">var</span>/run/mysqld/mysqld.sock
nice        = <span class="hljs-number">0</span>

[mysqld]
user        = mysql
pid-file    = /<span class="hljs-keyword">var</span>/run/mysqld/mysqld.pid
socket      = /<span class="hljs-keyword">var</span>/run/mysqld/mysqld.sock
port        = <span class="hljs-number">3306</span>
basedir     = /usr
datadir     = /<span class="hljs-keyword">var</span>/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp

log-bin = mysql-bin 
server-id = <span class="hljs-number">1</span> 

<span class="hljs-preprocessor"># Instead of skip-networking the default is now to listen only on</span>
<span class="hljs-preprocessor"># localhost which is more compatible and is not less secure.</span>
<span class="hljs-preprocessor">#bind-address   = 127.0.0.1</span>

<span class="hljs-preprocessor">#log-error  = /var/log/mysql/error.log</span>

<span class="hljs-preprocessor"># Recommended in standard MySQL setup</span>
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

<span class="hljs-preprocessor"># Disabling symbolic-links is recommended to prevent assorted security risks</span>
symbolic-links=<span class="hljs-number">0</span>

<span class="hljs-preprocessor"># * IMPORTANT: Additional settings that can override those from this file!</span>
<span class="hljs-preprocessor">#   The files must end with '.cnf', otherwise they'll be ignored.</span>
<span class="hljs-preprocessor">#</span>
!includedir /etc/mysql/conf.d/</code>
  • 创建从mysql配置文件
<code>cd ~/docker<span class="hljs-attribute">-mysql</span><span class="hljs-attribute">-data</span>
$ vim my<span class="hljs-attribute">-slave1</span><span class="hljs-built_in">.</span>cnf</code>

复制主mysql配置文件,注意:
将server-id = 1 修改为server-id = 2

2.5运行主myqsl容器

<code>$ sudo docker run <span class="hljs-attribute">-d</span> <span class="hljs-attribute">-e</span> MYSQL_ROOT_PASSWORD<span class="hljs-subst">=</span><span class="hljs-number">123456</span> <span class="hljs-subst">--</span>name mysql<span class="hljs-attribute">-master</span>  <span class="hljs-attribute">-v</span> /home/yangqian/docker<span class="hljs-attribute">-mysql</span><span class="hljs-attribute">-data</span>/mysql<span class="hljs-attribute">-master</span>:/<span class="hljs-built_in">var</span>/lib/mysql <span class="hljs-attribute">-v</span> /home/yangqian/docker<span class="hljs-attribute">-mysql</span><span class="hljs-attribute">-data</span>/my<span class="hljs-attribute">-master</span><span class="hljs-built_in">.</span>cnf:/etc/mysql/my<span class="hljs-built_in">.</span>cnf <span class="hljs-attribute">-p</span> <span class="hljs-number">3306</span>:<span class="hljs-number">3306</span> mysql</code>

参数详解:

<code>run     运行一个容器
-<span class="ruby">-name      后面是这个镜像的名称
</span>-<span class="ruby">p <span class="hljs-number">3306</span><span class="hljs-symbol">:</span><span class="hljs-number">3306</span>        表示在这个容器中使用<span class="hljs-number">3306</span>端口(第二个)映射到本机的端口号也为<span class="hljs-number">3306</span>(第一个)
</span>-<span class="ruby">d      表示使用守护进程运行,即服务挂在后台</span></code>
  • 查看主mysql容器状态:
<code>$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e37e29f090b7        mysql               <span class="hljs-string">"docker-entrypoint.s…"</span>   <span class="hljs-number">27</span> minutes ago      Up <span class="hljs-number">27</span> minutes       <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">3306</span><span class="hljs-subst">-&gt;</span><span class="hljs-number">3306</span>/tcp   mysql<span class="hljs-attribute">-master</span>
</code>
  • 连接数据库查看
<code>$ mysql <span class="hljs-attribute">-uroot</span> <span class="hljs-attribute">-p123456</span> <span class="hljs-attribute">-h127</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span></code>

2.6运行从mysql容器

<code>$ sudo docker run <span class="hljs-attribute">-d</span> <span class="hljs-attribute">-e</span> MYSQL_ROOT_PASSWORD<span class="hljs-subst">=</span><span class="hljs-number">123456</span> <span class="hljs-subst">--</span>name mysql<span class="hljs-attribute">-slave1</span> <span class="hljs-attribute">-v</span> /home/yangqian/docker<span class="hljs-attribute">-mysql</span><span class="hljs-attribute">-data</span>/mysql<span class="hljs-attribute">-slave1</span>:/<span class="hljs-built_in">var</span>/lib/mysql <span class="hljs-attribute">-v</span> /home/yangqian/docker<span class="hljs-attribute">-mysql</span><span class="hljs-attribute">-data</span>/my<span class="hljs-attribute">-slave1</span><span class="hljs-built_in">.</span>cnf:/etc/mysql/my<span class="hljs-built_in">.</span>cnf <span class="hljs-attribute">-p</span> <span class="hljs-number">3307</span>:<span class="hljs-number">3306</span> mysql</code>
  • 查看mysql容器状态:
<code>$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
<span class="hljs-number">3</span>dc37943fb7a        mysql               <span class="hljs-string">"docker-entrypoint.s…"</span>   <span class="hljs-number">12</span> seconds ago      Up <span class="hljs-number">11</span> seconds       <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">3307</span><span class="hljs-subst">-&gt;</span><span class="hljs-number">3306</span>/tcp   mysql<span class="hljs-attribute">-slave1</span>
e37e29f090b7        mysql               <span class="hljs-string">"docker-entrypoint.s…"</span>   <span class="hljs-number">31</span> minutes ago      Up <span class="hljs-number">31</span> minutes       <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">3306</span><span class="hljs-subst">-&gt;</span><span class="hljs-number">3306</span>/tcp   mysql<span class="hljs-attribute">-master</span>

</code>
  • 连接数据库查看
<code>$ mysql <span class="hljs-attribute">-uroot</span> <span class="hljs-attribute">-p123456</span> <span class="hljs-attribute">-h127</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span> <span class="hljs-subst">--</span>port <span class="hljs-number">3307</span></code>

2.7 主从服务配置

  • 查看容器ip,后面主从服务配置需要用到两个容器的ip
<code><span class="hljs-preprocessor"># 查看mysql容器id</span>
$ sudo docker ps
<span class="hljs-type">CONTAINER</span> <span class="hljs-type">ID</span>        <span class="hljs-type">IMAGE</span>               <span class="hljs-type">COMMAND</span>                  <span class="hljs-type">CREATED</span>             <span class="hljs-type">STATUS</span>              <span class="hljs-type">PORTS</span>                    <span class="hljs-type">NAMES</span>
<span class="hljs-number">3</span>dc37943fb7a        mysql               <span class="hljs-string">"docker-entrypoint.s…"</span>   <span class="hljs-number">8</span> minutes ago       <span class="hljs-type">Up</span> <span class="hljs-number">8</span> minutes        <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">3307</span>-&gt;<span class="hljs-number">3306</span>/tcp   mysql-slave1
<span class="hljs-title">e37e29f090b7</span>        mysql               <span class="hljs-string">"docker-entrypoint.s…"</span>   <span class="hljs-number">39</span> minutes ago      <span class="hljs-type">Up</span> <span class="hljs-number">39</span> minutes       <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">3306</span>-&gt;<span class="hljs-number">3306</span>/tcp   mysql-master</code>
<code><span class="hljs-comment"># 进入主mysql容器终端</span>
<span class="hljs-variable">$ </span>sudo docker exec -it e3 /bin/bash
root<span class="hljs-variable">@e37e29f090b7</span><span class="hljs-symbol">:/</span><span class="hljs-comment"># ip a</span>
<span class="hljs-number">1</span><span class="hljs-symbol">:</span> <span class="hljs-symbol">lo:</span> &lt;<span class="hljs-constant">LOOPBACK</span>,<span class="hljs-constant">UP</span>,<span class="hljs-constant">LOWER_UP</span>&gt; mtu <span class="hljs-number">65536</span> qdisc noqueue state <span class="hljs-constant">UNKNOWN</span> group default qlen <span class="hljs-number">1000</span>
    link/loopback <span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span> brd <span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span>
    inet <span class="hljs-number">127.0</span>.<span class="hljs-number">0</span>.<span class="hljs-number">1</span>/<span class="hljs-number">8</span> scope host lo
       valid_lft forever preferred_lft forever
<span class="hljs-number">27</span><span class="hljs-symbol">:</span> eth<span class="hljs-number">0</span><span class="hljs-variable">@if28</span><span class="hljs-symbol">:</span> &lt;<span class="hljs-constant">BROADCAST</span>,<span class="hljs-constant">MULTICAST</span>,<span class="hljs-constant">UP</span>,<span class="hljs-constant">LOWER_UP</span>&gt; mtu <span class="hljs-number">1500</span> qdisc noqueue state <span class="hljs-constant">UP</span> group default 
    link/ether <span class="hljs-number">02</span><span class="hljs-symbol">:</span><span class="hljs-number">42</span><span class="hljs-symbol">:ac</span><span class="hljs-symbol">:</span><span class="hljs-number">11</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">02</span> brd <span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span>ff
    inet <span class="hljs-number">172.17</span>.<span class="hljs-number">0</span>.<span class="hljs-number">2</span>/<span class="hljs-number">16</span> brd <span class="hljs-number">172.17</span>.<span class="hljs-number">255.255</span> scope global eth<span class="hljs-number">0</span>
       valid_lft forever preferred_lft forever
root<span class="hljs-variable">@e37e29f090b7</span><span class="hljs-symbol">:/</span><span class="hljs-comment"># exit</span>
exit</code>
<code><span class="hljs-comment"># 进入从mysql容器终端</span>
<span class="hljs-variable">$ </span>sudo docker exec -it <span class="hljs-number">3</span>d /bin/bash
root<span class="hljs-variable">@3dc37943fb7a</span><span class="hljs-symbol">:/</span><span class="hljs-comment"># ip a</span>
<span class="hljs-number">1</span><span class="hljs-symbol">:</span> <span class="hljs-symbol">lo:</span> &lt;<span class="hljs-constant">LOOPBACK</span>,<span class="hljs-constant">UP</span>,<span class="hljs-constant">LOWER_UP</span>&gt; mtu <span class="hljs-number">65536</span> qdisc noqueue state <span class="hljs-constant">UNKNOWN</span> group default qlen <span class="hljs-number">1000</span>
    link/loopback <span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span> brd <span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span>
    inet <span class="hljs-number">127.0</span>.<span class="hljs-number">0</span>.<span class="hljs-number">1</span>/<span class="hljs-number">8</span> scope host lo
       valid_lft forever preferred_lft forever
<span class="hljs-number">29</span><span class="hljs-symbol">:</span> eth<span class="hljs-number">0</span><span class="hljs-variable">@if30</span><span class="hljs-symbol">:</span> &lt;<span class="hljs-constant">BROADCAST</span>,<span class="hljs-constant">MULTICAST</span>,<span class="hljs-constant">UP</span>,<span class="hljs-constant">LOWER_UP</span>&gt; mtu <span class="hljs-number">1500</span> qdisc noqueue state <span class="hljs-constant">UP</span> group default 
    link/ether <span class="hljs-number">02</span><span class="hljs-symbol">:</span><span class="hljs-number">42</span><span class="hljs-symbol">:ac</span><span class="hljs-symbol">:</span><span class="hljs-number">11</span><span class="hljs-symbol">:</span><span class="hljs-number">00</span><span class="hljs-symbol">:</span><span class="hljs-number">03</span> brd <span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span><span class="hljs-symbol">ff:</span>ff
    inet <span class="hljs-number">172.17</span>.<span class="hljs-number">0</span>.<span class="hljs-number">3</span>/<span class="hljs-number">16</span> brd <span class="hljs-number">172.17</span>.<span class="hljs-number">255.255</span> scope global eth<span class="hljs-number">0</span>
       valid_lft forever preferred_lft forever
root<span class="hljs-variable">@3dc37943fb7a</span><span class="hljs-symbol">:/</span><span class="hljs-comment"># exit</span>
exit</code>
  • 开启两个终端分别用来连接主从mysql容器
<code><span class="hljs-comment"># 终端1:主mysql容器</span>
<span class="hljs-variable">$ </span>mysql -uroot -p123456 -h127.<span class="hljs-number">0</span>.<span class="hljs-number">0</span>.<span class="hljs-number">1</span> --port <span class="hljs-number">3306</span>
<span class="hljs-comment"># 终端2:从mysql容器</span>
<span class="hljs-variable">$ </span>mysql -uroot -p123456 -h127.<span class="hljs-number">0</span>.<span class="hljs-number">0</span>.<span class="hljs-number">1</span> --port <span class="hljs-number">3307</span></code>
  • 主mysql容器配置
<code>mysql&gt; grant replication slave on <span class="hljs-strong">*.*</span> to <span class="hljs-emphasis">'slave'</span>@<span class="hljs-emphasis">'%'</span> identified by <span class="hljs-emphasis">'slave'</span>;

mysql&gt; flush privileges;

<span class="hljs-header">mysql&gt; show master status;
+------------------+----------+--------------+------------------+-------------------+</span>
<span class="hljs-header">| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+</span>
<span class="hljs-header">| mysql-bin.000004 |      1160 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+</span>
1 row in set (0.00 sec)
</code>
  • 从mysql容器配置
<code>mysql<span class="hljs-subst">&gt;</span> change master <span class="hljs-keyword">to</span> master_host<span class="hljs-subst">=</span><span class="hljs-string">'172.17.0.2'</span>,master_user<span class="hljs-subst">=</span><span class="hljs-string">'slave'</span>,master_password<span class="hljs-subst">=</span><span class="hljs-string">'slave'</span>,
master_log_file<span class="hljs-subst">=</span><span class="hljs-string">'mysql-bin.000004'</span>,master_log_pos<span class="hljs-subst">=</span><span class="hljs-number">1160</span>,master_port<span class="hljs-subst">=</span><span class="hljs-number">3306</span>;
mysql<span class="hljs-subst">&gt;</span> start slave;
mysql<span class="hljs-subst">&gt;</span> show slave status <span class="hljs-subst">/</span>G

<span class="hljs-subst">***************************</span> <span class="hljs-number">1.</span> row <span class="hljs-subst">***************************</span>
               Slave_IO_State: Waiting for master <span class="hljs-keyword">to</span> send event
                  Master_Host: <span class="hljs-number">172.17</span><span class="hljs-number">.0</span><span class="hljs-number">.2</span>
                  Master_User: slave
                  Master_Port: <span class="hljs-number">3306</span>
                Connect_Retry: <span class="hljs-number">60</span>
              Master_Log_File: mysql<span class="hljs-attribute">-bin</span><span class="hljs-number">.000004</span>
          Read_Master_Log_Pos: <span class="hljs-number">1160</span>
               Relay_Log_File: <span class="hljs-number">3</span>dc37943fb7a<span class="hljs-attribute">-relay</span><span class="hljs-attribute">-bin</span><span class="hljs-number">.000002</span>
                Relay_Log_Pos: <span class="hljs-number">320</span>
        Relay_Master_Log_File: mysql<span class="hljs-attribute">-bin</span><span class="hljs-number">.000004</span>
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: <span class="hljs-number">0</span>
                   Last_Error: 
                 Skip_Counter: <span class="hljs-number">0</span>
          Exec_Master_Log_Pos: <span class="hljs-number">1160</span>
              Relay_Log_Space: <span class="hljs-number">534</span>
              Until_Condition: <span class="hljs-literal">None</span>
               Until_Log_File: 
                Until_Log_Pos: <span class="hljs-number">0</span>
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: <span class="hljs-number">0</span>
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: <span class="hljs-number">0</span>
                Last_IO_Error: 
               Last_SQL_Errno: <span class="hljs-number">0</span>
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: <span class="hljs-number">1</span>
                  Master_UUID: <span class="hljs-number">39</span>f6cd9a<span class="hljs-attribute">-f870</span><span class="hljs-subst">-</span><span class="hljs-number">11e7</span><span class="hljs-attribute">-b14e</span><span class="hljs-subst">-</span><span class="hljs-number">0242</span>ac110002
             Master_Info_File: /<span class="hljs-built_in">var</span>/lib/mysql/master<span class="hljs-built_in">.</span>info
                    SQL_Delay: <span class="hljs-number">0</span>
          SQL_Remaining_Delay: <span class="hljs-built_in">NULL</span>
      Slave_SQL_Running_State: Slave has read <span class="hljs-literal">all</span> relay <span class="hljs-keyword">log</span>; waiting for more updates
           Master_Retry_Count: <span class="hljs-number">86400</span>
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: <span class="hljs-number">0</span>
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
<span class="hljs-number">1</span> row <span class="hljs-keyword">in</span> <span class="hljs-built_in">set</span> (<span class="hljs-number">0.00</span> sec)
</code>

未经允许不得转载:冰点网络 » 2.docker配置mysql主从实现读写分离

分享到:更多 ()

评论 抢沙发

评论前必须登录!