一、单机yum安装

1、关闭selinux,设置firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

firewall-cmd --permanent --add-port=27017/tcp;firewall-cmd --reload

2、更改yum源

rm -rf /etc/yum.repos.d/*

vi /etc/yum.repos.d/base.repo

[rocky-base]

name=rocky-base

baseurl=http://mirrors.163.com/rocky/8.6/BaseOS/x86_64/os/

enable=1

gpgcheck=0

[rocky-appstream]

name=rocky-appstream

baseurl=http://mirrors.163.com/rocky/8.6/AppStream/x86_64/os/

gpgcheck=0

enable=1

[rocky-extras]

name=rocky-extras

baseurl=http://mirrors.163.com/rocky/8.6/extras/x86_64/os/

gpgcheck=0

enable=1

vi /etc/yum.repos.d/mongodb.repo

[mongodb-org-6.0]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

dnf -y install net-tools bash-completion vim wget

reboot

安装mongodb

yum install -y mongodb-org

systemctl start mongod

mongosh

二、二进制文件安装

最小化安装rockylinux8.6

1、关闭selinux,防火墙放通策略及安装软件包

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

firewall-cmd --permanent --add-port=27017/tcp;firewall-cmd --reload

dnf -y install net-tools bash-completion vim wget

reboot

2、下载mongodb软件及mongodb-shell

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.2.tgz

wget https://downloads.mongodb.com/compass/mongosh-1.6.0-linux-x64.tgz

tar -xvf mongodb-linux-x86_64-rhel80-6.0.2.tgz

mv mongodb-linux-x86_64-rhel80-6.0.2 /usr/local/mongodb

3、查看安装

4、编辑配置文件

mkdir -p /data/mongodb

vim /data/mongodb/mongodb.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/mongodb.log

storage:

dbPath: /data/mongodb

journal:

enabled: true

processManagement:

fork: true

net:

port: 27017

bindIp: 0.0.0.0

5、启动与检查

/usr/local/mongodb/bin/mongod -f /data/mongodb/mongodb.conf

ls /data/mongodb

ps -aux | grep mongo

netstat -antup | grep mongo

 6、安装mongodb-shell

tar -xvf mongosh-1.6.0-linux-x64.tgz

mv mongosh-1.6.0-linux-x64/bin/mongosh /usr/bin

mongosh

7、优化

Soft rlimits for open file descriptors too low

vim /etc/security/limits.conf

加入如下

* - nproc 65536

* - nofile 65536

logout

ulimit -n

ulimit -a

 vm.max_map_count is too low

vi /etc/sysctl.conf

加入如下

vm.max_map_count=655360

sysctl -p

 /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'

echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled

echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag

vim /etc/rc.d/rc.local

加入

echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled

echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag

chmod +x /etc/rc.d/rc.local

You are running this process as the root user, which is not recommended

Access control is not enabled for the database. Read and write access to data and configuration is unrestricted

kill (px -aux |grep mongo)

useradd mongodb

echo password | passwd --stdin mongodb

chown -R mongodb:mongodb /data/mongodb

vim /data/mongodb/mongodb.conf

加入

security:

authorization: enabled

reboot

mongodb用户登录

/usr/local/mongodb/bin/mongod -f /data/mongodb/mongodb.conf

mongosh

8、关闭

use admin

db.shutdownServer()

 三、基本命令

show dbs;

show databases;

1、mongodb创建库、创建集合、插入数据

use mydb

db.myuser.insertOne({ name: 'john', age:28 })

show dbs

show collections

db.myuser.insertOne( {'name': 'jerry', age: 27} )

db.myuser.insertOne( {'name': 'mary', age: 26} )

db.myuser.find()

db.myuser.find( { name: 'john' } )

db.myuser.find( { age: 26 } )

 集合的field不固定,可以插入如下数据

db.myuser.insert( {age: 29} )

db.myuser.insert( {'location': 'urumqi'} )

db.myuser.find()

 更新集合数据

db.myuser.update({ age: 29 }, {$set: { age: 30 }})

db.myuser.update({ 'name': 'mary' }, { $set: { 'name': 'hanmei' } })

 删除集合数据

db.myuser.remove({ name: 'hanmei' })

db.myuser.find()

 删除集合所有数据

db.myuser.remove( {} )

db.myuser.find()

 删除集合

db.myuser.drop()

 删除数据库

db.dropDatabase()

show dbs

2、查询

use mydb

db.myuser.insert( {name:"john", age: 20} )

db.myuser.insert( {name:"mary", age: 28} )

db.myuser.insert( {name:"pat", age: 38} )

db.myuser.insert( {name:"amy", age: 58} )

db.myuser.insert( {name:"bob", age: 68} )

db.myuser.insert( {name:"david", age: 25} )

db.myuser.find().pretty()

db.myuser.find()

db.myuser.find().limit(2)

db.myuser.find().skip(0).limit(2)

db.myuser.find().skip(2).limit(2)

db.myuser.find().skip(4).limit(2)

db.myuser.find().sort({ age: 1 })

db.myuser.find().sort({ age: -1 })

db.myuser.find({ age: {$lt: 30} })

$gt #大于

$lt #小于

$gte #大于或等于

$lte #小于或等于

db.myuser.find( {name: 'john'} )

db.myuser.find( {name: 'mary'} )

db.myuser.find({ $or: [ {name: 'john'},{name: 'mary'} ] })

db.myuser.find({ $and: [ {name: 'john'},{age: 20} ] })

 正则查询

db.myuser.find({ name: {$regex: "mar[a-z]"} })

db.myuser.find( {"name":{$regex:"(a)"}} )

 3、索引

db.getProfilingStatus()

for(i=1; i<=500000;i++){

db.myuser.insert( {name:'mytest'+i, age:i} )

}

db.myuser.find( {age:210086} )

db.myuser.find( {age:210086} ).explain(true)

 

db.myuser.getIndexes()

db.myuser.ensureIndex( {age:1} )

db.myuser.find( {age:210086} )

db.myuser.find( {age:210086} ).explain(true)

 删除索引

db.myuser.dropIndex( {age:1} )

使用正则时,索引无效

db.myuser.find( {"name":"mytest10010"} )

 创建索引

db.myuser.ensureIndex( {name:1} )

db.myuser.find( {"name":"mytest110086"} )

db.myuser.find( {"name":"mytest110086"} ).explain(true)

db.myuser.find( {"name":/99999/} )

db.myuser.find( {"name":/99999/} ).explain(true)

 唯一索引

db.myuser.remove({})

db.myuser.insert( {userid:1} )

db.myuser.insert( {userid:1} )

db.myuser.find( )

建立索引

db.myuser.remove({})

db.myuser.ensureIndex( {userid:1},{unique:true} )

db.myuser.insert( {userid:1} )

db.myuser.insert( {userid:1} )

db.myuser.insert( {userid:2} )

3、 监控

db.serverStatus()

db.serverStatus().network

db.serverStatus().opcounters

db.serverStatus().connections

serverStatus可用来获取mongodb的状态信息

db.serverStatus()   #查看所有的监控信息

db.serverStatus().network #单独查看网络流量信息

db.serverStatus().opcounters #统计增、删、改、查的次数

db.serverStatus().connections#连接

四、副本集搭建

序号主机名IP安装选项备注1stu1192.168.3.81rockylinux8.6最小化安装2stu2192.168.3.82rockylinux8.6最小化安装3stu3192.168.3.83rockylinux8.6最小化安装4stu4192.168.3.84rockylinux8.6最小化安装伸缩使用

1、关闭selinux,防火墙放通策略及安装软件包(四台设备)

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

firewall-cmd --permanent --add-port=27017/tcp;firewall-cmd --reload

dnf -y install net-tools bash-completion vim wget

reboot

2、下载mongodb软件及mongodb-shell(四台设备)

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.2.tgz

wget https://downloads.mongodb.com/compass/mongosh-1.6.0-linux-x64.tgz

tar -xvf mongodb-linux-x86_64-rhel80-6.0.2.tgz

mv mongodb-linux-x86_64-rhel80-6.0.2 /usr/local/mongodb

tar -xvf mongosh-1.6.0-linux-x64.tgz

mv mongosh-1.6.0-linux-x64/bin/mongosh /usr/bin

3、编辑配置文件

stu1:

mkdir -p /data/mongodb

vim /data/mongodb/mongodb.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/mongodb.log

storage:

dbPath: /data/mongodb

journal:

enabled: true

processManagement:

fork: true

net:

port: 27017

bindIp: 192.168.3.81

replication:

replSetName: mycluster

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/mongodb.conf

netstat -antup | grep mongod

stu2:

mkdir -p /data/mongodb

vim /data/mongodb/mongodb.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/mongodb.log

storage:

dbPath: /data/mongodb

journal:

enabled: true

processManagement:

fork: true

net:

port: 27017

bindIp: 192.168.3.82

replication:

replSetName: mycluster

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/mongodb.conf

netstat -antup | grep mongod

stu3:

mkdir -p /data/mongodb

vim /data/mongodb/mongodb.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/mongodb.log

storage:

dbPath: /data/mongodb

journal:

enabled: true

processManagement:

fork: true

net:

port: 27017

bindIp: 192.168.3.83

replication:

replSetName: mycluster

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/mongodb.conf

netstat -antup | grep mongod

注:解决warnings见二进制安装

4、配置

mongosh 192.168.3.81

config = { _id:"mycluster", members:[

{_id:0,host:"192.168.3.81:27017"},

{_id:1,host:"192.168.3.82:27017"},

{_id:2,host:"192.168.3.83:27017"}]

}

use admin

rs.initiate( config )

rs.status()

 

 5、测试

stu1:

use mydb

db.myuser.insertOne( {'name': 'mytest'} )

show dbs

db.myuser.find()

 stu2:

mongosh 192.168.3.82

show dbs

use mydb

db.myuser.find()

rs.secondaryOk()

db.myuser.find()

db.myuser.insertOne( {'name': 'mytest82'} )

注:SECONDARY需要声明是slave才能查看数据,从库无法插入数据

 查看从库延时

rs.printSecondaryReplicationInfo()

6、副本集切换

stu1:半闭192.168.3.81

stu2:

mongosh 192.168.3.82

rs.status()

use mydb

db.myuser.find()

db.myuser.insertOne( {'name': 'mytest82'} )

db.myuser.find()

 7、副本级优先级

primary的选举依赖于各个实例的优先权重,默认权重都是1     (只有开启优先级时才会抢占)

开启192.168.3.81,此时主仍为192.168.3.82

stu2:

mongosh 192.168.3.82

conf = rs.config()

conf.members[0].priority = 10

conf.members[1].priority = 5

conf.members[2].priority = 2

rs.reconfig(conf)

rs.status()

 此时stu1为主

8、副本集伸缩

stu4:

mkdir -p /data/mongodb

vim /data/mongodb/mongodb.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/mongodb.log

storage:

dbPath: /data/mongodb

journal:

enabled: true

processManagement:

fork: true

net:

port: 27017

bindIp: 192.168.3.84

replication:

replSetName: mycluster

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/mongodb.conf

netstat -antup | grep mongod

stu1:

mongosh 192.168.3.81

use admin

rs.add('192.168.3.84:27017')

rs.status()

 stu4:

rs.secondaryOk()

use mydb

db.myuser.find()

db.myuser.insertOne( {'name': 'mytest84'} )

 stu1:

rs.remove('192.168.3.83:27017')

rs.status()

192.168.3.83已移除

五、mongodb备份

备份

mongosh

for(i=1; i<=50;i++){

db.myuser.insert( {name:'mytest'+i, age:i} )

}

db.myuser.find( {"name":"mytest46"})

db.myuser.count()

mongodump -h 127.0.0.1 -o /data/mongodbbk/

ls -lh /data/mongodbbk/

还原

mongosh

db.myuser.drop()

mongorestore -h 127.0.0.1 /data/mongodbbk/

mongosh

use mydb

db.myuser.find( {"name":"mytest46"})

db.myuser.count()

 

 六、mongodb分片集群搭建

mongodb分片集群三种角色

router角色: mongodb的路由,提供入口,使得分片集群对外透明,router不存储数据

configsvr角色: mongodb的配置角色,存储元数据信息。分片集群后端有多份存储,读取数据该去哪个存储上读取,依赖于配置角色。配置角色建议使用副本集

shardsvr角色:  mongodb的存储角色,存储真正的数据,建议使用副本集

 环境说明:生产环境需9台以上服务器部署

本实验使用3台

序号主机名IP安装选项作用备注1stu1192.168.3.81rockylinux8.6最小化安装 27017: router 28018:   configsvr 29019:   shardsvr 29029:   shardsvr 2stu2192.168.3.82rockylinux8.6最小化安装 27017: router 28018:   configsvr 29019:   shardsvr 29029:   shardsvr 3stu3192.168.3.83rockylinux8.6最小化安装 27017: router 28018:   configsvr 29019:   shardsvr 29029:   shardsvr

1、关闭selinux,防火墙放通策略及安装软件包(三台设备)

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

firewall-cmd --permanent --add-port=27017/tcp

firewall-cmd --permanent --add-port=28018/tcp

firewall-cmd --permanent --add-port=29019/tcp

firewall-cmd --permanent --add-port=29029/tcp

firewall-cmd --reload

dnf -y install net-tools bash-completion vim wget

reboot

2、下载mongodb软件及mongodb-shell(三台设备)

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.2.tgz

wget https://downloads.mongodb.com/compass/mongosh-1.6.0-linux-x64.tgz

tar -xvf mongodb-linux-x86_64-rhel80-6.0.2.tgz

mv mongodb-linux-x86_64-rhel80-6.0.2 /usr/local/mongodb

tar -xvf mongosh-1.6.0-linux-x64.tgz

mv mongosh-1.6.0-linux-x64/bin/mongosh /usr/bin

3、configsvr搭建

stu1:

mkdir -p /data/mongodb/configsvr

vim /data/mongodb/configsvr/configsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/configsvr/configsvr.log

storage:

dbPath: /data/mongodb/configsvr

journal:

enabled: true

processManagement:

fork: true

net:

port: 28018

bindIp: 192.168.3.81

replication:

replSetName: mycluster

sharding:

clusterRole: configsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/configsvr/configsvr.conf

netstat -antup | grep mongod

stu2:

mkdir -p /data/mongodb/configsvr

vim /data/mongodb/configsvr/configsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/configsvr/configsvr.log

storage:

dbPath: /data/mongodb/configsvr

journal:

enabled: true

processManagement:

fork: true

net:

port: 28018

bindIp: 192.168.3.82

replication:

replSetName: mycluster

sharding:

clusterRole: configsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/configsvr/configsvr.conf

netstat -antup | grep mongod

stu3:

mkdir -p /data/mongodb/configsvr

vim /data/mongodb/configsvr/configsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/configsvr/configsvr.log

storage:

dbPath: /data/mongodb/configsvr

journal:

enabled: true

processManagement:

fork: true

net:

port: 28018

bindIp: 192.168.3.83

replication:

replSetName: mycluster

sharding:

clusterRole: configsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/configsvr/configsvr.conf

netstat -antup | grep mongod

stu1:

mongosh 192.168.3.81:28018

use admin

config = { _id:"mycluster",

configsvr: true,

members:[

{_id:0,host:"192.168.3.81:28018"},

{_id:1,host:"192.168.3.82:28018"},

{_id:2,host:"192.168.3.83:28018"}

]

}

rs.initiate(config)

rs.status()

 4、router搭建

stu1:

mkdir -p /data/mongodb/router

vim /data/mongodb/router/router.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/router/router.log

processManagement:

fork: true

net:

port: 27017

bindIp: 192.168.3.81

sharding:

configDB: mycluster/192.168.3.81:28018,192.168.3.82:28018,192.168.3.83:28018

启动

/usr/local/mongodb/bin/mongos -f /data/mongodb/router/router.conf

stu2:

mkdir -p /data/mongodb/router

vim /data/mongodb/router/router.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/router/router.log

processManagement:

fork: true

net:

port: 27017

bindIp: 192.168.3.82

sharding:

configDB: mycluster/192.168.3.81:28018,192.168.3.82:28018,192.168.3.83:28018

启动

/usr/local/mongodb/bin/mongos -f /data/mongodb/router/router.conf

stu3:

mkdir -p /data/mongodb/router

vim /data/mongodb/router/router.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/router/router.log

processManagement:

fork: true

net:

port: 27017

bindIp: 192.168.3.83

sharding:

configDB: mycluster/192.168.3.81:28018,192.168.3.82:28018,192.168.3.83:28018

启动

/usr/local/mongodb/bin/mongos -f /data/mongodb/router/router.conf

5、shardsvr搭建

stu1:

mkdir -p /data/mongodb/shardsvr1

vim /data/mongodb/shardsvr1/shardsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/shardsvr1/shardsvr.log

storage:

dbPath: /data/mongodb/shardsvr1/

journal:

enabled: true

processManagement:

fork: true

net:

port: 29019

bindIp: 192.168.3.81

replication:

replSetName: myclusterdata1

sharding:

clusterRole: shardsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shardsvr1/shardsvr.conf

mkdir -p /data/mongodb/shardsvr2

vim /data/mongodb/shardsvr2/shardsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/shardsvr1/shardsvr.log

storage:

dbPath: /data/mongodb/shardsvr2/

journal:

enabled: true

processManagement:

fork: true

net:

port: 29029

bindIp: 192.168.3.81

replication:

replSetName: myclusterdata2

sharding:

clusterRole: shardsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shardsvr2/shardsvr.conf

stu2:

mkdir -p /data/mongodb/shardsvr1

vim /data/mongodb/shardsvr1/shardsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/shardsvr1/shardsvr.log

storage:

dbPath: /data/mongodb/shardsvr1/

journal:

enabled: true

processManagement:

fork: true

net:

port: 29019

bindIp: 192.168.3.82

replication:

replSetName: myclusterdata1

sharding:

clusterRole: shardsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shardsvr1/shardsvr.conf

mkdir -p /data/mongodb/shardsvr2

vim /data/mongodb/shardsvr2/shardsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/shardsvr1/shardsvr.log

storage:

dbPath: /data/mongodb/shardsvr2/

journal:

enabled: true

processManagement:

fork: true

net:

port: 29029

bindIp: 192.168.3.82

replication:

replSetName: myclusterdata2

sharding:

clusterRole: shardsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shardsvr2/shardsvr.conf

stu3:

mkdir -p /data/mongodb/shardsvr1

vim /data/mongodb/shardsvr1/shardsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/shardsvr1/shardsvr.log

storage:

dbPath: /data/mongodb/shardsvr1/

journal:

enabled: true

processManagement:

fork: true

net:

port: 29019

bindIp: 192.168.3.83

replication:

replSetName: myclusterdata1

sharding:

clusterRole: shardsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shardsvr1/shardsvr.conf

mkdir -p /data/mongodb/shardsvr2

vim /data/mongodb/shardsvr2/shardsvr.conf

systemLog:

destination: file

logAppend: true

path: /data/mongodb/shardsvr1/shardsvr.log

storage:

dbPath: /data/mongodb/shardsvr2/

journal:

enabled: true

processManagement:

fork: true

net:

port: 29029

bindIp: 192.168.3.83

replication:

replSetName: myclusterdata2

sharding:

clusterRole: shardsvr

启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shardsvr2/shardsvr.conf

stu1:

mongosh 192.168.3.81:29019

use admin

config = { _id:"myclusterdata1",

members:[

{_id:0,host:"192.168.3.81:29019"},

{_id:1,host:"192.168.3.82:29019"},

{_id:2,host:"192.168.3.83:29019"}

]

}

rs.initiate(config)

rs.status()

 stu1:

mongosh 192.168.3.81:29029

use admin

config = { _id:"myclusterdata2",

members:[

{_id:0,host:"192.168.3.81:29029"},

{_id:1,host:"192.168.3.82:29029"},

{_id:2,host:"192.168.3.83:29029"}

]

}

rs.initiate(config)

rs.status()

 6、router中填加shardsvr

stu1:

mongosh 192.168.3.81:27017

use admin

sh.addShard("myclusterdata1/192.168.3.81:29019,192.168.3.82:29019,192.168.3.83:29019")

sh.addShard("myclusterdata2/192.168.3.81:29029,192.168.3.82:29029,192.168.3.83:29029")

sh.status()

 7、测试

stu1:   router

mongosh 192.168.3.81:27017

use mydb

for(i=1; i<=500;i++){

db.myuser.insert( {name:'mytest'+i, age:i} )

}

sh.status()

db.myuser.count();

db.myuser.find({"name":"mytest488"});

注:默认情况下所有数据未分片存储,只存在主集群中

mongosh 192.168.3.81:29019

show dbs;

use mydb

db.myuser.find({"name":"mytest488"});

db.myuser.count();

mongosh 192.168.3.81:29029

show dbs;

可见数据未写入myclusterdata2 

数据分片存储(stu1)

mongosh 192.168.3.81:27017

use mydb

db.dropDatabase()

use admin

db.runCommand( { enablesharding :"mydb"});

db.runCommand( { shardcollection : "mydb.myuser",key : {_id: "hashed"} } )

use mydb

for(i=1; i<=500;i++){

db.myuser.insert( {name:'mytest'+i, age:i} )

}

db.myuser.count();

db.myuser.find({"name":"mytest488"});

sh.status()

mongosh 192.168.3.81:29019

show dbs;

use mydb

db.myuser.find({"name":"mytest488"});

db.myuser.count();

mongosh 192.168.3.81:29029

show dbs;

use mydb

db.myuser.find({"name":"mytest488"});

db.myuser.count();

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。