求数学女孩的恋爱推理事件簿事件簿百度云资源

solrcloud,tomcat,外部zookeeper配置详解
之前由于在项目中使用的solr3.6,服务器总是莫名其妙的挂掉,各种解决未果,于是尝试换到solr4,想试试solrcloud和zookeeper集群看看效果怎么样,实际效果比3.6稳定很多,下面说一下项目中我们的具体现在一个测试的配置。 我们配置3台zookper服务器和3台solr服务器,由于没有多台机器测试,zookeeper的集群都在一台服务器上,tomcat部署在3台服务器上。
zookeeper是什么
ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) 、 蜜蜂(Hive) 、 小猪(Pig)& 的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei& 等项目中都采用到了 Zookeeper。ZooKeeper是一个分布式的,开放的分布式应用程序协调服务,ZooKeeper是以Fast Paxos算法为基础,实现同步服务,配置维护和命名服务等分布式应用。
zookeeper安装及配置
&zookeeper配置
(1)解压为zookeeper[plain] view plaincopyprint?tar -xf -C /home/myuser/zookeeper/&
tar -xf -C /home/myuser/zookeeper/复制zookeeper文件夹3份,分别重名名为zookeeperA,zookeeperB,zookeeperC。
并且创建数据快照以及日志存放文件夹,命名为zooA,zooB,zooC。
(2)编辑对应的zookeeper配置文件,复制zookeeperconf下zoo_sample.cfg为zoo.cfg
cd /home/myuser/zookeeperA/conf&
cp zoo_sample.cfg zoo.cfg&&&&
cd /home/myuser/zookeeperA/conf
cp zoo_sample.cfg zoo.cfg&& (3)修改zoo.cfg
# The number of milliseconds of each tick&
tickTime=2000&
# The number of ticks that the initial&&
# synchronization phase can take&
initLimit=10&
# The number of ticks that can pass between&&
# sending a request and getting an acknowledgement&
syncLimit=5&
# the directory where the snapshot is stored.&
# do not use /tmp for storage, /tmp here is just&&
# example sakes.&
dataDir=/home/myuser/zooA/data&
# the port at which the clients will connect&
clientPort=2181&
# ZooKeeper server and its port no. # ZooKeeper ensemble should know about every other machine in the ensemble # specify server id by creating 'myid' file in the dataDir # use hostname instead of IP address for convenient maintenance&&
server.1=127.0.0.1:&
server.2=127.0.0.1:&&
server.3=127.0.0.1:&
# Be sure to read the maintenance section of the&&
# administrator guide before turning on autopurge.&
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance&
# The number of snapshots to retain in dataDir&
#autopurge.snapRetainCount=3&
# Purge task interval in hours&
# Set to &0& to disable auto purge feature&
#autopurge.purgeInterval=1&
dataLogDir=/home/myuser/zooA/log&
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/myuser/zooA/data
# the port at which the clients will connect
clientPort=2181
# ZooKeeper server and its port no. # ZooKeeper ensemble should know about every other machine in the ensemble # specify server id by creating 'myid' file in the dataDir # use hostname instead of IP address for convenient maintenance
server.1=127.0.0.1:
server.2=127.0.0.1:
server.3=127.0.0.1:
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to &0& to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=/home/myuser/zooA/logtickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
clientPort:服务的监听端口
dataDir:用于存放内存快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)
dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。
(4)创建myid文件
cd /home/myuser/zooA/data&
sudo sh -c 'echo &1& && myid'&&&
cd /home/myuser/zooA/data
sudo sh -c 'echo &1& && myid'& 其他文件夹类似创建myid文件,zookeeperB为2,zookeeperC为3
(5)启动zookeeper
cd /home/myuser/zookeeperA/bin&
sudo sh& zkServer.sh start&
cd /home/myuser/zookeeperA/bin
sudo sh& zkServer.sh start查看zookeeper状态[plain] view plaincopyprint?[root@weibo bin]# sh zkServer.sh status&
JMX enabled by default&
Using config: /home/weibo/zookeeperA/bin/../conf/zoo.cfg&
Mode: follower&
[root@weibo bin]# sh zkServer.sh status
JMX enabled by default
Using config: /home/weibo/zookeeperA/bin/../conf/zoo.cfg
Mode: follower启动OK,依次启动另外两台zookeeper,启动第一台zookeeper后,你可以观察bin下的zookeeper.out可以看到报错,connection refused,没有关系,zookeeper需要等待其他另个节点的加入,全部启动之后就正常了。
(6)客户端连接zookeeper
[root@weibo bin]# sh zkCli.sh&&
Connecting to localhost:2181&
15:00:25,363 [myid:] - INFO& [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/ GMT&
15:00:25,369 [myid:] - INFO& [main:Environment@100] - Client environment:host.name=localhost&
15:00:25,370 [myid:] - INFO& [main:Environment@100] - Client environment:java.version=1.6.0_33&
15:00:25,371 [myid:] - INFO& [main:Environment@100] - Client environment:java.vendor=Sun Microsystems Inc.&
15:00:25,372 [myid:] - INFO& [main:Environment@100] - Client environment:java.home=/home/weibo/jdk1.6.0_33/jre&
15:00:25,373 [myid:] - INFO& [main:Environment@100] - Client environment:java.class.path=/home/weibo/zookeeperA/bin/../build/classes:/home/weibo/zookeeperA/bin/../build/lib/*.jar:/home/weibo/zookeeperA/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/weibo/zookeeperA/bin/../lib/slf4j-api-1.6.1.jar:/home/weibo/zookeeperA/bin/../lib/netty-3.2.2.Final.jar:/home/weibo/zookeeperA/bin/../lib/log4j-1.2.15.jar:/home/weibo/zookeeperA/bin/../lib/jline-0.9.94.jar:/home/weibo/zookeeperA/bin/../zookeeper-3.4.5.jar:/home/weibo/zookeeperA/bin/../src/java/lib/*.jar:/home/weibo/zookeeperA/bin/../conf:/home/weibo/jdk1.6.0_33/lib:.&
15:00:25,373 [myid:] - INFO& [main:Environment@100] - Client environment:java.library.path=/home/weibo/jdk1.6.0_33/jre/lib/amd64/server:/home/weibo/jdk1.6.0_33/jre/lib/amd64:/home/weibo/jdk1.6.0_33/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib&
15:00:25,374 [myid:] - INFO& [main:Environment@100] - Client environment:java.io.tmpdir=/tmp&
15:00:25,375 [myid:] - INFO& [main:Environment@100] - Client piler=&NA&&
15:00:25,375 [myid:] - INFO& [main:Environment@100] - Client environment:os.name=&
15:00:25,376 [myid:] - INFO& [main:Environment@100] - Client environment:os.arch=amd64&
15:00:25,377 [myid:] - INFO& [main:Environment@100] - Client environment:os.version=2.6.32-279.5.2.el6.x86_64&
15:00:25,377 [myid:] - INFO& [main:Environment@100] - Client environment:user.name=root&
15:00:25,378 [myid:] - INFO& [main:Environment@100] - Client environment:user.home=/root&
15:00:25,379 [myid:] - INFO& [main:Environment@100] - Client environment:user.dir=/home/weibo/zookeeperA/bin&
15:00:25,382 [myid:] - INFO& [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@9d04653&
Welcome to ZooKeeper!&
15:00:25,604 [myid:] - INFO& [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (无法定位登录配置)&
JLine support is enabled&
15:00:25,649 [myid:] - INFO& [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session&
15:00:25,842 [myid:] - INFO& [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x13e7ed, negotiated timeout = 30000&
WATCHER::&
WatchedEvent state:SyncConnected type:None path:null&
[zk: localhost:2181(CONNECTED) 0] ls /&
[configs, zookeeper, clusterstate.json, aliases.json, live_nodes, overseer, overseer_elect, collections]&
[zk: localhost:2181(CONNECTED) 1]&&
[root@weibo bin]# sh zkCli.sh
Connecting to localhost:2181
15:00:25,363 [myid:] - INFO& [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/ GMT
15:00:25,369 [myid:] - INFO& [main:Environment@100] - Client environment:host.name=localhost
15:00:25,370 [myid:] - INFO& [main:Environment@100] - Client environment:java.version=1.6.0_33
15:00:25,371 [myid:] - INFO& [main:Environment@100] - Client environment:java.vendor=Sun Microsystems Inc.
15:00:25,372 [myid:] - INFO& [main:Environment@100] - Client environment:java.home=/home/weibo/jdk1.6.0_33/jre
15:00:25,373 [myid:] - INFO& [main:Environment@100] - Client environment:java.class.path=/home/weibo/zookeeperA/bin/../build/classes:/home/weibo/zookeeperA/bin/../build/lib/*.jar:/home/weibo/zookeeperA/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/weibo/zookeeperA/bin/../lib/slf4j-api-1.6.1.jar:/home/weibo/zookeeperA/bin/../lib/netty-3.2.2.Final.jar:/home/weibo/zookeeperA/bin/../lib/log4j-1.2.15.jar:/home/weibo/zookeeperA/bin/../lib/jline-0.9.94.jar:/home/weibo/zookeeperA/bin/../zookeeper-3.4.5.jar:/home/weibo/zookeeperA/bin/../src/java/lib/*.jar:/home/weibo/zookeeperA/bin/../conf:/home/weibo/jdk1.6.0_33/lib:.
15:00:25,373 [myid:] - INFO& [main:Environment@100] - Client environment:java.library.path=/home/weibo/jdk1.6.0_33/jre/lib/amd64/server:/home/weibo/jdk1.6.0_33/jre/lib/amd64:/home/weibo/jdk1.6.0_33/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
15:00:25,374 [myid:] - INFO& [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
15:00:25,375 [myid:] - INFO& [main:Environment@100] - Client piler=&NA&
15:00:25,375 [myid:] - INFO& [main:Environment@100] - Client environment:os.name=Linux
15:00:25,376 [myid:] - INFO& [main:Environment@100] - Client environment:os.arch=amd64
15:00:25,377 [myid:] - INFO& [main:Environment@100] - Client environment:os.version=2.6.32-279.5.2.el6.x86_64
15:00:25,377 [myid:] - INFO& [main:Environment@100] - Client environment:user.name=root
15:00:25,378 [myid:] - INFO& [main:Environment@100] - Client environment:user.home=/root
15:00:25,379 [myid:] - INFO& [main:Environment@100] - Client environment:user.dir=/home/weibo/zookeeperA/bin
15:00:25,382 [myid:] - INFO& [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@9d04653
Welcome to ZooKeeper!
15:00:25,604 [myid:] - INFO& [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (无法定位登录配置)
JLine support is enabled
15:00:25,649 [myid:] - INFO& [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session
15:00:25,842 [myid:] - INFO& [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x13e7ed, negotiated timeout = 30000
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[configs, zookeeper, clusterstate.json, aliases.json, live_nodes, overseer, overseer_elect, collections]
[zk: localhost:2181(CONNECTED) 1] configs:保存上传的配置文件信息
clusterstate.json:集群状态json
aliases:别名json
live_node:当solr服务器启动的时候,会注册到这里
overseer:保存shard信息
overseer_elect:节点选举
collections:所有的collection
Solr及Tomcat安装配置
(1)下载solr4.2,把solr-4.2.1\example\solr\collection1\conf 目录下的配置文件上传的zookeeper
(2)上传solr配置文件到zookeeper
java -classpath .:/home/weibo/tomcat_solr_qq/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:.0.1:.0.1:2381 -confdir /home/weibo/solr-config -confname weiboconfig&
java -classpath .:/home/weibo/tomcat_solr_qq/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:.0.1:.0.1:2381 -confdir /home/weibo/solr-config -confname weiboconfig(3)把配置文件和目标collection联系起来
java -classpath .:/home/weibo/tomcat_solr_qq/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection weibocollection -confname weiboconfig -zkhost 127.0.0.1:.0.1:.0.1:2381&
java -classpath .:/home/weibo/tomcat_solr_qq/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection weibocollection -confname weiboconfig -zkhost 127.0.0.1:.0.1:.0.1:2381(4)复制3个tomcat,在conf/Catalina/localhost创建solr.xml(如果目录不存在,请自行创建),内容如下
&?xml version=&1.0& encoding=&utf-8&?&&
&Context docBase=&/home/weibo/solr-qq/solr.war& debug=&0& corssContext=&false& &&
&&&&&&& &Environment name=&solr/home& type=&java.lang.String& value=&/home/weibo/solr-qq/& override=&true&/&&
&/Context&&
&?xml version=&1.0& encoding=&utf-8&?&
&Context docBase=&/home/weibo/solr-qq/solr.war& debug=&0& corssContext=&false& &
&&&&&&& &Environment name=&solr/home& type=&java.lang.String& value=&/home/weibo/solr-qq/& override=&true&/&
&/Context&
crossContext不能设置为true,这里注意
(5)在你的solr home目录创建solr.xml
&?xml version=&1.0& encoding=&UTF-8& ?&&
&solr persistent=&true&&&
& &cores adminPath=&/admin/cores& zkClientTimeout=&20000& hostPort=&8080&&&
& &/cores&&
&?xml version=&1.0& encoding=&UTF-8& ?&
&solr persistent=&true&&
& &cores adminPath=&/admin/cores& zkClientTimeout=&20000& hostPort=&8080&&
& &/cores&
&/solr&其他tomcat对应设置对应的端口号
(6)编辑tomcat bin/catalina.sh(windows下catalina.bat),加入
[plain] view plaincopyprint?JAVA_OPTS='-DzkHost=127.0.0.1:.0.1:.0.1:2381'&
JAVA_OPTS='-DzkHost=127.0.0.1:.0.1:.0.1:2381'这里就是solr和zookeeper交互的地方了
(7)依次启动tomcat,创建core及shard,访问solr
由于zookeeper是过半存活,所以由于我这里使用的是3台zookeeper,所以最大可以死掉1台,还能继续工作,官方推荐使用奇数台服务器。最近需要搭建一个cloudSolr集群,写下记录。基础环境是在centos6.5 64bit3个下载地址:1、 下载Solr-4.x 2、下载Tomcat 3、下载Zookeeper 第一:安装zookeeper集群zookeeper的安装比较简单记得关闭防火墙,否则会提示启动失败(重要)
chkconfig iptables off 重启后生效
在zoo.cfg配置文件中
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/hadoop/package/zookeeper-3.4.5/data
# the port at which the clients will connect
clientPort=2181
server.1=192.168.0.146:
server.2=192.168.0.142:
server.3=192.168.0.145:
需要修改的:
dataDir=/home/hadoop/package/zookeeper-3.4.5/data
里需要创建一个myid文件里面的值是配置文件中server.后的值
如:server.1=192.168.0.146:
里面的值是1 第二: 安装tomcat+solr集成
参照我上篇文章tomcat集成solr
在主节点147 安装后,复制到148,149 服务器上。 第三zk和solr+tomcat集成修改tomcat 下 配置文件:在主192.168.0.157 服务器上的tomcat 目录下bin的配置文件 JAVA_OPTS = "-DzkHost=192.168.0.157:.0.158:.0.159:2181-Dbootstrap_confdir=/home/hadoop/package/solrhome/collection1/conf -Dcollection.configName=myconf -Dbootstrap_conf=true-DnumShards=2"在192.168.0.158, 192.168.0.159 服务上的tomcat
bin目录下catalina.sh 添加set JAVA_OPTS = -DzkHost=192.168.0.157:.0.158:.0.159:2181 打开后出现错误提示:Loading of "/solr/zookeeper?wt=json" failed (HTTP-Status 404)
"Zookeeper is not configured for this Solr Core. Please try connecting to an alternate zookeeper address."
将配置文件复制到其他服务器上:java -classpath .:/home/hadoop/cloudsolr/tomcat-7.0.55/webapps/solr/WEB-INF/lib/*
org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.0.157:8.0.158:.0.159:2181 -confdir /home/hadoop/cloudsolr/solrhome/collection1/conf
-confname myconf 同步到节点: java -classpath .:/home/hadoop/cloudsolr/tomcat-7.0.55/webapps/solr/WEB-INF/lib/*
org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection collection1 -confname myconf -zkhost 192.168.0.157:8.0.158:.0.159:2181错误提示:log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).log4j:WARN Please initialize the log4j system properly.log4j:WARN See
for more info. 错误提示adoop@slave3 solrlib]$ java -classpath .:/home/hadoop/package/solrlib/*
org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.0.157:.0.158:.0.159:2181 -confdir .:/home/hadoop/package/solrconfig -confname myconf
Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: org/apache/log4j/Level
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:288)
at org.mon.cloud.SolrZkClient.&clinit&(SolrZkClient.java:72)
at org.apache.solr.cloud.ZkCLI.main(ZkCLI.java:175)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 7 more
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:288)
at org.mon.cloud.SolrZkClient.&clinit&(SolrZkClient.java:72)
at org.apache.solr.cloud.ZkCLI.main(ZkCLI.java:175)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 7 more 解决办法:下载/cdpSQiMZbfe33 (提取码:49e0) 将jar导入即可1、启动的时候错误提示:Load collection config from:/collections/collection1
2465 [coreLoadExecutor-6-thread-1] ERROR org.mon.cloud.ZkStateReader
?.Specified config does not exist in ZooKeeper:collection1
2469 [coreLoadExecutor-6-thread-1] ERROR org.apache.solr.core.CoreContainer
?.Error creating core [collection1]: Specified config does not exist in ZooKeeper:collection1
org.mon.cloud.ZooKeeperException: Specified config does not exist in ZooKeeper:collection1错误原因: 启动错误提示:HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure: Could not load conf for core collection1:
Error loading solr config from solr/collection1/conf/solrconfig.xml,trace=org.mon.SolrException: SolrCore 'collection1'
is not available due to init failure: Could not load conf for core collection1: Error loading solr config from solr/collection1/conf/solrconfig.xml at
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 18:17收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-1

我要回帖

更多关于 金田一少年事件簿r 的文章

 

随机推荐