-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsearch.xml
2380 lines (2138 loc) · 234 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title><![CDATA[Hadoop 机架感知]]></title>
<url>http://binux.cn/2017/06/03/Hadoop-Perceived/</url>
<content type="html"><![CDATA[<blockquote>
<p>“Hadoop 配置机架感知”</p>
</blockquote>
<h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。这样如果本地数据损坏,节点可以从同一机架内的相邻节点拿到数据,速度肯定比从跨机架节点上拿数据要快;同时,如果整个机架的网络出现异常,也能保证在其它机架的节点上找到数据。为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本。如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。那么Hadoop是如何确定任意两个节点是位于同一机架,还是跨机架的呢?答案就是机架感知。</p>
<p>默认情况下,hadoop的机架感知是没有被启用的。所以,在通常情况下,hadoop集群的HDFS在选机器的时候,是随机选择的,也就是说,很有可能在写数据时,hadoop将第一块数据block1写到了rack1上,然后随机的选择下将block2写入到了rack2下,此时两个rack之间产生了数据传输的流量,再接下来,在随机的情况下,又将block3重新又写回了rack1,此时,两个rack之间又产生了一次数据流量。在job处理的数据量非常的大,或者往hadoop推送的数据量非常大的时候,这种情况会造成rack之间的网络流量成倍的上升,成为性能的瓶颈,进而影响作业的性能以至于整个集群的服务</p>
<h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h3><p>默认情况下,Namenode启动时候日志是这样的:</p>
<pre class=" language-bash"><code class="language-bash">2013-09-22 17:27:26,423 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /default-rack/ 192.168.147.92:50010
</code></pre>
<p>每个IP 对应的机架ID都是 <code>/default-rack</code> ,说明hadoop的机架感知没有被启用。<br>要将hadoop机架感知的功能启用,配置非常简单,在 NameNode所在节点的<code>/home/bigdata/apps/hadoop/etc/hadoop的core-site.xml</code>配置文件中配置一个选项:</p>
<pre class=" language-xml"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>property</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span>topology.scrIPt.file.name<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>value</span><span class="token punctuation">></span></span>/home/bigdata/apps/hadoop/etc/hadoop/topology.sh<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>value</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>property</span><span class="token punctuation">></span></span>
</code></pre>
<p>这个配置选项的 value 指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值。接受的参数通常为某台 datanode 机器的IP地址,而输出的值通常为该IP地址对应的 datanode 所在的 rack,例如 ”/rack1”。Namenode启动时,会判断该配置选项是否为空,如果非空,则表示已经启用机架感知的配置,此时 Namenode 会根据配置寻找该脚本,并在接收到每一个 datanode 的 heartbeat 时,将该 datanode 的 IP 地址作为参数传给该脚本运行,并将得到的输出作为该 datanode 所属的机架 id,保存到内存的一个 map 中.</p>
<p>至于脚本的编写,就需要将真实的网络拓朴和机架信息了解清楚后,通过该脚本能够将机器的 IP 地址和机器名正确的映射到相应的机架上去。一个简单的实现如下:</p>
<h3 id="topology-sh"><a href="#topology-sh" class="headerlink" title="topology.sh"></a>topology.sh</h3><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span>
HADOOP_CONF<span class="token operator">=</span>/home/bigdata/apps/hadoop/etc/hadoop
<span class="token keyword">while</span> <span class="token punctuation">[</span> $<span class="token comment" spellcheck="true"># -gt 0 ] ; do</span>
nodeArg<span class="token operator">=</span><span class="token variable">$1</span>
exec<span class="token operator"><</span><span class="token variable">${HADOOP_CONF}</span>/topology.data
result<span class="token operator">=</span><span class="token string">""</span>
<span class="token keyword">while</span> <span class="token function">read</span> line <span class="token punctuation">;</span> <span class="token keyword">do</span>
ar<span class="token operator">=</span><span class="token punctuation">(</span> <span class="token variable">$line</span> <span class="token punctuation">)</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token string">"<span class="token variable">${ar[0]}</span>"</span> <span class="token operator">=</span> <span class="token string">"<span class="token variable">$nodeArg</span>"</span> <span class="token punctuation">]</span><span class="token operator">||</span><span class="token punctuation">[</span> <span class="token string">"<span class="token variable">${ar[1]}</span>"</span> <span class="token operator">=</span> <span class="token string">"<span class="token variable">$nodeArg</span>"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
result<span class="token operator">=</span><span class="token string">"<span class="token variable">${ar[2]}</span>"</span>
<span class="token keyword">fi</span>
<span class="token keyword">done</span>
<span class="token function">shift</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> -z <span class="token string">"<span class="token variable">$result</span>"</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">then</span>
<span class="token keyword">echo</span> -n <span class="token string">"/default-rack"</span>
<span class="token keyword">else</span>
<span class="token keyword">echo</span> -n <span class="token string">"<span class="token variable">$result</span>"</span>
<span class="token keyword">fi</span>
<span class="token keyword">done</span>
</code></pre>
<h3 id="topology-data"><a href="#topology-data" class="headerlink" title="topology.data"></a>topology.data</h3><p>topology.data,格式为:节点(IP或主机名) /交换机xx/机架xx</p>
<pre class=" language-bash"><code class="language-bash">192.168.147.91 tbe192168147091 /dc1/rack1
192.168.147.92 tbe192168147092 /dc1/rack1
192.168.147.93 tbe192168147093 /dc1/rack2
192.168.147.94 tbe192168147094 /dc1/rack3
192.168.147.95 tbe192168147095 /dc1/rack3
192.168.147.96 tbe192168147096 /dc1/rack3
</code></pre>
<blockquote>
<p>需要注意的是,在 Namenode 上,该文件中的节点必须使用 IP,使用主机名无效,而 Jobtracker 上,该文件中的节点必须使用主机名,使用 IP 无效,所以,最好 IP 和主机名都配上。<br> 这样配置后,Namenode启动时候日志是这样的:</p>
<p>INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /dc1/rack3/ 192.168.147.94:50010</p>
<p>说明hadoop的机架感知已经被启用了。</p>
</blockquote>
<h3 id="HADOOP机架信息命令"><a href="#HADOOP机架信息命令" class="headerlink" title="HADOOP机架信息命令:"></a>HADOOP机架信息命令:</h3><pre class=" language-bash"><code class="language-bash">./hadoop dfsadmin -printTopology
Rack: /dc1/rack1
192.168.147.91:50010 <span class="token punctuation">(</span>tbe192168147091<span class="token punctuation">)</span>
192.168.147.92:50010 <span class="token punctuation">(</span>tbe192168147092<span class="token punctuation">)</span>
Rack: /dc1/rack2
192.168.147.93:50010 <span class="token punctuation">(</span>tbe192168147093<span class="token punctuation">)</span>
Rack: /dc1/rack3
192.168.147.94:50010 <span class="token punctuation">(</span>tbe192168147094<span class="token punctuation">)</span>
192.168.147.95:50010 <span class="token punctuation">(</span>tbe192168147095<span class="token punctuation">)</span>
192.168.147.96:50010 <span class="token punctuation">(</span>tbe192168147096<span class="token punctuation">)</span>
</code></pre>
<h3 id="增加数据节点,不重启NameNode"><a href="#增加数据节点,不重启NameNode" class="headerlink" title="增加数据节点,不重启NameNode"></a>增加数据节点,不重启NameNode</h3><p>假设Hadoop集群在192.168.147.68上部署了NameNode和DataNode,启用了机架感知,执行bin/hadoop dfsadmin -printTopology看到的结果:</p>
<pre class=" language-bash"><code class="language-bash">Rack: /dc1/rack1
192.168.147.68:50010 <span class="token punctuation">(</span>dbj68<span class="token punctuation">)</span>
</code></pre>
<p>现在想增加一个物理位置在rack2的数据节点192.168.147.69到集群中,不重启NameNode。<br>首先,修改NameNode节点的topology.data的配置,加入:<code>192.168.147.69 dbj69 /dc1/rack2</code>,保存。</p>
<pre class=" language-bash"><code class="language-bash">192.168.147.68 dbj68 /dc1/rack1
192.168.147.69 dbj69 /dc1/rack2
</code></pre>
<p>然后,<code>sbin/hadoop-daemons.sh start datanode</code> 启动数据节点dbj69,任意节点执行<code>bin/hadoop dfsadmin -printTopology</code> 看到的结果:</p>
<pre class=" language-bash"><code class="language-bash">Rack: /dc1/rack1
192.168.147.68:50010 <span class="token punctuation">(</span>dbj68<span class="token punctuation">)</span>
Rack: /dc1/rack2
192.168.147.69:50010 <span class="token punctuation">(</span>dbj69<span class="token punctuation">)</span>
</code></pre>
<p>说明hadoop已经感知到了新加入的节点dbj69。 </p>
<blockquote>
<p>注意:如果不将 dbj69 的配置加入到 topology.data 中,执行 sbin/hadoop-daemons.sh start datanode 启动数据节点 dbj69,datanode 日志中会有异常发生,导致 dbj69 启动不成功。</p>
</blockquote>
<h3 id="节点间距离计算"><a href="#节点间距离计算" class="headerlink" title="节点间距离计算"></a>节点间距离计算</h3><p>有了机架感知,NameNode 就可以画出下图所示的 datanode 网络拓扑图。D1,R1 都是交换机,最底层是 datanode。则 H1 的 rackid=/D1/R1/H1,H1 的 parent 是 R1,R1 的是 D1。这些 rackid 信息可以通过 topology.script.file.name 配置。有了这些 rackid 信息就可以计算出任意两台 datanode 之间的距离,得到最优的存放策略,优化整个集群的网络带宽均衡以及数据最优分配。</p>
<pre class=" language-bash"><code class="language-bash">distance<span class="token punctuation">(</span>/D1/R1/H1,/D1/R1/H1<span class="token punctuation">)</span><span class="token operator">=</span>0 相同的datanode
distance<span class="token punctuation">(</span>/D1/R1/H1,/D1/R1/H2<span class="token punctuation">)</span><span class="token operator">=</span>2 同一rack下的不同datanode
distance<span class="token punctuation">(</span>/D1/R1/H1,/D1/R2/H4<span class="token punctuation">)</span><span class="token operator">=</span>4 同一IDC下的不同datanode
distance<span class="token punctuation">(</span>/D1/R1/H1,/D2/R3/H7<span class="token punctuation">)</span><span class="token operator">=</span>6 不同IDC下的datanode
</code></pre>
<h2 id="著作权声明"><a href="#著作权声明" class="headerlink" title="著作权声明"></a>著作权声明</h2><p>本文来着网络文件 具体出处不清楚 如有侵权 请联系 <a href="Mailto:[email protected]?Subject=版权问题" target="_blank" rel="external">[email protected]</a></p>
]]></content>
<categories>
<category> Hadoop </category>
</categories>
<tags>
<tag> Hadoop </tag>
</tags>
</entry>
<entry>
<title><![CDATA[CentOS 7下 Docker 安装]]></title>
<url>http://binux.cn/2017/05/08/Docker-Instal/</url>
<content type="html"><![CDATA[<blockquote>
<p>“CentOS 7下 Docker安装”</p>
</blockquote>
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="1、安装CentOS-7"><a href="#1、安装CentOS-7" class="headerlink" title="1、安装CentOS 7"></a>1、安装CentOS 7</h3><h4 id="下载"><a href="#下载" class="headerlink" title="下载"></a>下载</h4><p>Ali-OSM</p>
<p><a href="http://mirrors.aliyun.com" target="_blank" rel="external">http://mirrors.aliyun.com</a></p>
<h4 id="安装-略"><a href="#安装-略" class="headerlink" title="安装 略"></a>安装 略</h4><h4 id="确认内核版本"><a href="#确认内核版本" class="headerlink" title="确认内核版本"></a>确认内核版本</h4><p>uname -r</p>
<p>3.10.0-514.16.1.el7.x86_64</p>
<blockquote>
<p>需大于3.10</p>
</blockquote>
<h3 id="2、获取docker国内加速连接"><a href="#2、获取docker国内加速连接" class="headerlink" title="2、获取docker国内加速连接"></a>2、获取docker国内加速连接</h3><p>这里使用阿里的</p>
<p><a href="https://cr.console.aliyun.com/#/accelerator" target="_blank" rel="external">https://cr.console.aliyun.com/#/accelerator</a></p>
<p><img src="http://on2bs9q7q.bkt.clouddn.com/20170508149422726525135.png" alt="20170508149422726525135.png"></p>
<h3 id="3、添加yum源"><a href="#3、添加yum源" class="headerlink" title="3、添加yum源"></a>3、添加yum源</h3><pre class=" language-bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">tee</span> /etc/yum.repos.d/docker.repo <span class="token operator"><<</span>-<span class="token string">'EOF'</span>
<span class="token punctuation">[</span>dockerrepo<span class="token punctuation">]</span>
name<span class="token operator">=</span>Docker Repository
baseurl<span class="token operator">=</span>https://yum.dockerproject.org/repo/main/centos/7/
enabled<span class="token operator">=</span>1
gpgcheck<span class="token operator">=</span>1
gpgkey<span class="token operator">=</span>https://yum.dockerproject.org/gpg
EOF
</code></pre>
<h3 id="4、安装"><a href="#4、安装" class="headerlink" title="4、安装"></a>4、安装</h3><p>sudo yum install docker-engine</p>
<h3 id="5、使用加速连接"><a href="#5、使用加速连接" class="headerlink" title="5、使用加速连接"></a>5、使用加速连接</h3><p>新建 docker 文件</p>
<p>echo DOCKER_OPTS=”-H unix:///var/run/docker.sock -H 0.0.0.0:2375 –registry-mirror=国内仓库地址” >> /etc/sysconfig/docker</p>
<p>修改 docker.service 添加 DOCKER_OPTS</p>
<p>vim /lib/systemd/system/docker.service</p>
<pre class=" language-bash"><code class="language-bash"><span class="token punctuation">[</span>Unit<span class="token punctuation">]</span>
Description<span class="token operator">=</span>Docker Application Container Engine
Documentation<span class="token operator">=</span>https://docs.docker.com
After<span class="token operator">=</span>network-online.target firewalld.service
Wants<span class="token operator">=</span>network-online.target
<span class="token punctuation">[</span>Service<span class="token punctuation">]</span>
Type<span class="token operator">=</span>notify
<span class="token comment" spellcheck="true"># the default is not to use systemd for cgroups because the delegate issues still</span>
<span class="token comment" spellcheck="true"># exists and systemd currently does not support the cgroup feature set required</span>
<span class="token comment" spellcheck="true"># for containers run by docker</span>
EnvironmentFile<span class="token operator">=</span>-/etc/sysconfig/docker
ExecStart<span class="token operator">=</span>/usr/bin/dockerd <span class="token variable">$DOCKER_OPTS</span>
<span class="token punctuation">..</span>.
</code></pre>
<h3 id="6、启动"><a href="#6、启动" class="headerlink" title="6、启动"></a>6、启动</h3><p>sudo systemctl start docker</p>
<p>查看 是否启动成功</p>
<p>ps -ef | grep docker</p>
<p>看见参数 则启动成功</p>
<h2 id="尾巴"><a href="#尾巴" class="headerlink" title="尾巴"></a>尾巴</h2><p>接下来 开始愉快的 Docker 之旅吧!</p>
<hr>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><p><a href="https://dcos.io/docs/1.7/administration/installing/custom/system-requirements/install-docker-centos/" target="_blank" rel="external">https://dcos.io/docs/1.7/administration/installing/custom/system-requirements/install-docker-centos/</a></p>
<h2 id="著作权声明"><a href="#著作权声明" class="headerlink" title="著作权声明"></a>著作权声明</h2><p>本文首次发布于 <a href="http://binux.cn">Binux Blog</a>,转载请保留以上链接</p>
]]></content>
<categories>
<category> 安装教程 </category>
</categories>
<tags>
<tag> Docker </tag>
<tag> Linux </tag>
</tags>
</entry>
<entry>
<title><![CDATA[关于 xbin-store 的一些声明!]]></title>
<url>http://binux.cn/2017/05/08/xbin-store/</url>
<content type="html"><![CDATA[<blockquote>
<p>“简单谈谈 xbin-store ”</p>
</blockquote>
<h2 id="项目起因"><a href="#项目起因" class="headerlink" title="项目起因"></a>项目起因</h2><p>项目开始于 2017-01-24 是我寒假闲着没事做的一个项目,当时是想着模仿 JD 写一个分布式商城,能把自己所学的全部知识运用进去。</p>
<p>一方面是我觉得动手实践肯定比单纯看书效果好,虽然过程中会出现很多错误,但在解决各种问题的时候也变相的锻炼了自己的能力。</p>
<p>另一方面我想做个完善的分布式商城 就像 JD 一样的商城 (理想很完美 现实很残酷 选择的目标太庞大) </p>
<h2 id="为什么开源"><a href="#为什么开源" class="headerlink" title="为什么开源"></a>为什么开源</h2><p>上面说过这个项目起因是我自己做来锻炼自己能力的,但是做着做着我发现凭我一个人的精力是无法完成这么庞大的系统的,于是我选择开源到 Github、OSChina 希望可以找到一些志同道合的朋友一起开发 </p>
<p>还有就是帮助一些对分布式感兴趣的朋友,包括创建群、写运行教程、甚至录视频。</p>
<p>最后我发现Star 1000 OSChina 有奖杯 其实我还挺想要的 不过我也不着急 项目足够完善后 还怕拿不到嘛!</p>
<script src="//git.oschina.net/binu/xbin-store/star_widget_preview"></script>
<h2 id="关于项目进度"><a href="#关于项目进度" class="headerlink" title="关于项目进度"></a>关于项目进度</h2><ul>
<li>2017-01-24 项目开始</li>
<li>2017-02-26 从本地的 Gitblit 迁移到 Github</li>
<li>2017-04-03 发布到 OSChina</li>
<li>2017-04-08 修改为使用 Spring Boot</li>
<li>2017-05-05 新建 xbin-store-cloud 项目 使用 Spring Cloud 重构</li>
<li>…</li>
</ul>
<p>大家可能发现从4月3后 项目基本变化在于架构的变化 从Spring Boot 到 Spring Cloud 架构的变化也反应着我正在学习的内容 技术总是在不停变化着 </p>
<p>其实最主要的原因还是我比较喜欢研究架构方面的内容 兴趣驱使着我学习 也没什么特别爱好了 写代码算是唯一爱好了</p>
<p>所以 如果你是想找个完善的电子商城 那么这个项目不适合你 功能很不完善 这个我自己知道 但是这个不完善是由于没有时间写 整个项目真正写的时间其实2个月都没有 </p>
<h2 id="尾巴"><a href="#尾巴" class="headerlink" title="尾巴"></a>尾巴</h2><p>希望 xbin-store、xbin-store-cloud 可以一直完善下去 奔着 写个 JD 的目标 大步前进</p>
<p>最后祝大家 Enjoy Coding</p>
<hr>
<h2 id="著作权声明"><a href="#著作权声明" class="headerlink" title="著作权声明"></a>著作权声明</h2><p>本文首次发布于 <a href="http://binux.cn">Binux Blog</a>,转载请保留以上链接</p>
]]></content>
<categories>
<category> 随记 </category>
</categories>
<tags>
<tag> 随记 </tag>
<tag> xbin-store </tag>
</tags>
</entry>
<entry>
<title><![CDATA[使用 Lombok 减少 Java Bean 代码]]></title>
<url>http://binux.cn/2017/04/16/Lombok/</url>
<content type="html"><![CDATA[<blockquote>
<p>“这篇文章将介绍如何使用Lombok 来减少 Java Bean 的代码”</p>
</blockquote>
<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>lombok 就是一款可以简化 get/set/toString/equals 等方法的工具!</p>
<ul>
<li><a href="https://projectlombok.org" target="_blank" rel="external">官网</a></li>
<li><a href="https://github.com/rzwitserloot/lombok" target="_blank" rel="external">GitHub</a></li>
</ul>
<h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><h3 id="IDE安装"><a href="#IDE安装" class="headerlink" title="IDE安装"></a>IDE安装</h3><ul>
<li>IDEA<br><img src="http://on2bs9q7q.bkt.clouddn.com/20170416149232607786005.png" alt="20170416149232607786005.png"></li>
</ul>
<p>设置<br><img src="http://on2bs9q7q.bkt.clouddn.com/20170418149248619455974.png" alt="20170418149248619455974.png"></p>
<p><strong>Enable annotation processing</strong>勾选</p>
<ul>
<li><p>eclipse / myeclipse 手动安装 lombok (没试过)</p>
<ul>
<li><p>将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下</p>
</li>
<li><p>打开 eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存:</p>
<ul>
<li>-Xbootclasspath/a:lombok.jar</li>
<li>-javaagent:lombok.jar</li>
</ul>
</li>
<li><p>重启 eclipse / myeclipse</p>
</li>
</ul>
</li>
</ul>
<h3 id="添加依赖"><a href="#添加依赖" class="headerlink" title="添加依赖"></a>添加依赖</h3><ul>
<li><p>Maven 地址</p>
<pre class=" language-xml"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependencies</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.projectlombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>lombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>1.16.16<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>scope</span><span class="token punctuation">></span></span>provided<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>scope</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependencies</span><span class="token punctuation">></span></span>
</code></pre>
</li>
<li><p>Gradle 地址</p>
<pre class=" language-xml"><code class="language-xml">provided "org.projectlombok:lombok:1.16.16"
</code></pre>
</li>
<li><p><a href="https://projectlombok.org/downloads/lombok.jar" target="_blank" rel="external">jar 下载</a>手动添加</p>
</li>
</ul>
<h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><h3 id="快速入门"><a href="#快速入门" class="headerlink" title="快速入门"></a>快速入门</h3><p><img src="http://on2bs9q7q.bkt.clouddn.com/2017041614923263831722.png" alt="2017041614923263831722.png"></p>
<p>直接类上加<code>@Data</code>注解 自动生成 getXxx()/setXxx()/toString()/equals(Object)等方法</p>
<h3 id="注解说明"><a href="#注解说明" class="headerlink" title="注解说明"></a>注解说明</h3><h4 id="NonNull"><a href="#NonNull" class="headerlink" title="@NonNull"></a>@NonNull</h4><p>如果被注解属值为 <code>null</code> 将抛出 <code>NullPointerException</code></p>
<p>可以修饰的对象为: FIELD(域),METHOD(方法),PARAMETER(参数),LOCAL_VARIABLE(局部变量)</p>
<h4 id="Cleanup"><a href="#Cleanup" class="headerlink" title="@Cleanup"></a>@Cleanup</h4><p>修饰 Java IO 类,会自动对资源调用close()方法关闭.</p>
<p>可以修饰的对象为: LOCAL_VARIABLE(局部变量)</p>
<h4 id="Getter-Setter"><a href="#Getter-Setter" class="headerlink" title="@Getter / @Setter"></a>@Getter / @Setter</h4><p>自动生成 <code>getXxx()</code>/<code>setXxx()</code></p>
<h5 id="Getter-lazy-true"><a href="#Getter-lazy-true" class="headerlink" title="@Getter(lazy=true)"></a>@Getter(lazy=true)</h5><p>当需要使用<code>get</code>获取的值需要非常大资源计算 可以创建一个<code>private final 变量</code>使用<code>@Getter(lazy=true)</code>修饰 用这次计算的值对其进行赋值。</p>
<p>可以修饰的对象为: LOCAL_VARIABLE(局部变量),TYPE(类、接口(包括注解类型)、enum)</p>
<h4 id="ToString"><a href="#ToString" class="headerlink" title="@ToString"></a>@ToString</h4><p>自动生成 <code>toString()</code></p>
<p>可以修饰的对象为: TYPE(类、接口(包括注解类型)、enum)</p>
<h4 id="EqualsAndHashCode"><a href="#EqualsAndHashCode" class="headerlink" title="@EqualsAndHashCode"></a>@EqualsAndHashCode</h4><p>自动生成 <code>equals()</code> 和 <code>hashCode()</code> 方法</p>
<p>可以修饰的对象为: TYPE(类、接口(包括注解类型)、enum)</p>
<h4 id="NoArgsConstructor、-RequiredArgsConstructor、-AllArgsConstructor"><a href="#NoArgsConstructor、-RequiredArgsConstructor、-AllArgsConstructor" class="headerlink" title="@NoArgsConstructor、@RequiredArgsConstructor、@AllArgsConstructor"></a>@NoArgsConstructor、@RequiredArgsConstructor、@AllArgsConstructor</h4><p>自动生成 构造无参方法、构造非<code>final</code>或<code>@NonNull</code>修饰对象的有参构造方法、构造全部参数构造方法</p>
<p>可以修饰的对象为: TYPE(类、接口(包括注解类型)、enum)</p>
<h4 id="Data"><a href="#Data" class="headerlink" title="@Data"></a>@Data</h4><p>组合注解相当于:<code>@ToString</code>、<code>@EqualsAndHashCode</code>、<code>@Getter(全部)</code>、<code>@Setter(非final字段)</code>、<code>@RequiredArgsConstructor</code></p>
<p>可以修饰的对象为: TYPE(类、接口(包括注解类型)、enum)</p>
<h4 id="Value"><a href="#Value" class="headerlink" title="@Value"></a>@Value</h4><p>被修饰的会加<code>final</code>、<code>@ToString</code>、<code>@EqualsAndHashCode</code>、<code>@AllArgsConstructor</code>、<code>@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)</code>、<code>@Getter</code></p>
<p>可以修饰的对象为: TYPE(类、接口(包括注解类型)、enum)</p>
<h4 id="Builder"><a href="#Builder" class="headerlink" title="@Builder"></a>@Builder</h4><p>生成一个内部类<code>BuilderExampleBuilder</code>可以使用链式编程创建对象。</p>
<p>如:Person.builder().name(“Binux”).city(“NanJing.”).build();</p>
<p>可以修饰的对象为: TYPE(类、接口(包括注解类型)、enum),CONSTRUCTOR(构造器),METHOD(方法)</p>
<h4 id="SneakyThrows"><a href="#SneakyThrows" class="headerlink" title="@SneakyThrows"></a>@SneakyThrows</h4><p>对修饰对象进行<code>try-catch</code> value为<code>Throwable>[] value()</code> 可以声明异常类型</p>
<p>可以修饰的对象为: CONSTRUCTOR(构造器),METHOD(方法)</p>
<h4 id="Synchronized"><a href="#Synchronized" class="headerlink" title="@Synchronized"></a>@Synchronized</h4><p>对修饰方法内进行加锁 <code>value</code>值为锁名称 锁为<code>Object</code>类型 </p>
<p>如:<code>private final Object $lock = new Object[0];</code></p>
<p>可以修饰的对象为: METHOD(方法)</p>
<h4 id="Log"><a href="#Log" class="headerlink" title="@Log"></a>@Log</h4><p>当需要使用<code>get</code>获取的值需要非常大资源计算 可以创建一个<code>private final 变量</code> 用这次计算的值对其进行赋值。</p>
<ul>
<li><p>@CommonsLog</p>
<p> <code>Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);</code></p>
</li>
<li><p>@JBossLog</p>
<p> <code>Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);</code></p>
</li>
<li><p>@Log</p>
<p> <code>Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());</code></p>
</li>
<li><p>@Log4j</p>
<p> <code>Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);</code></p>
</li>
<li><p>@Log4j2</p>
<p> <code>Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);</code></p>
</li>
<li><p>@Slf4j</p>
<p> <code>Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);</code></p>
</li>
<li><p>@XSlf4j</p>
<p> <code>Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);</code></p>
</li>
</ul>
<p>可以修饰的对象为: TYPE(类、接口(包括注解类型)</p>
<h2 id="详情请查看"><a href="#详情请查看" class="headerlink" title="详情请查看"></a>详情请查看</h2><p><a href="https://projectlombok.org/features/index.html" target="_blank" rel="external">https://projectlombok.org/features/index.html</a></p>
<hr>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>lombok 解决了成员类型修改后 还需重新生成getXxx/setXxx()/toString()等方法的问题,还是很实用的。</p>
<hr>
<h2 id="著作权声明"><a href="#著作权声明" class="headerlink" title="著作权声明"></a>著作权声明</h2><p>本文首次发布于 <a href="http://binux.cn">Binux Blog</a>,转载请保留以上链接</p>
]]></content>
<categories>
<category> 工具 </category>
</categories>
<tags>
<tag> Lombok </tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hello Hexo]]></title>
<url>http://binux.cn/2017/03/12/Hello-Hexo/</url>
<content type="html"><![CDATA[<blockquote>
<p>“Hello Hexo!!!”</p>
</blockquote>
<h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><p>花了一天的时间把Blog换了个主题 没办法第一眼看了这个主题就特别喜欢然后立马就换了</p>
<p>换主题倒不是太难,但是由于我之前使用的jekyll生成Blog,而这个主题是用Hexo生成Blog</p>
<p>他们的生成方式完全不同,个人感觉Hexo生成方便点,毕竟直接生成HTML静态页面,不用Github服务器在进行处理了</p>
<p>多亏了网上的大神们,没什么难度的完成了迁移,主要纠结我一天时间的是blog图片的选择上面,处女座加纠结狂,导致我看哪张图片都不顺眼</p>
<p>要找一个符合我个人审美的系列图得多难…</p>
<p>最后我实在不想找了,找了个还算可以的字体,操起我几百年没用过的PS,直接用文字作为Blog的背景图片</p>
<p>最后感觉效果还可以,至少看的过去了</p>
<p>就这样吧!</p>
<p>继续看我的源码去了</p>
<p>不想去BAT的程序猿都不是好程序猿 ^-^</p>
<hr>
<h2 id="著作权声明"><a href="#著作权声明" class="headerlink" title="著作权声明"></a>著作权声明</h2><p>本文首次发布于 <a href="http://binux.cn">Binux Blog</a>,转载请保留以上链接</p>
]]></content>
<categories>
<category> 随记 </category>
</categories>
<tags>
<tag> Hexo </tag>
</tags>
</entry>
<entry>
<title><![CDATA[Xbin-Store(分布式商城)项目所用Linux服务系列 RocketMQ集群安装(七)]]></title>
<url>http://binux.cn/2017/03/07/RocketMQ-Cluster-Install/</url>
<content type="html"><![CDATA[<blockquote>
<p>“这篇文章将介绍如何安装Solr集群,如何对Solr集群集群进行操作,以及使用Java客户端进行操作!”</p>
</blockquote>
<h2 id="系列"><a href="#系列" class="headerlink" title="系列"></a>系列</h2><ul>
<li><a href="http://binux.cn/2017/03/01/Linux-MySQL-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 MySQL安装(一)</a></li>
<li><a href="http://binux.cn/2017/03/03/Redis-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Redis集群安装(二)</a></li>
<li><a href="http://binux.cn/2017/03/04/Zookeeper-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Zookeeper集群安装(三)</a></li>
<li><a href="http://binux.cn/2017/03/04/Nginx-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Nginx安装(四)</a></li>
<li><a href="http://binux.cn/2017/03/05/FastDFS-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 FastDFS安装(五)</a></li>
<li><a href="http://binux.cn/2017/03/06/Solr-Cluster-Install/">Xbin-Store(分布式商城)项目所依赖的Linux服务系列 Solr集群安装(六)</a></li>
<li><strong><a href="http://binux.cn/2017/03/07/RocketMQ-Cluster-Install/">Xbin-Store(分布式商城)项目所依赖的Linux服务系列 RocketMQ集群安装(七)</a></strong></li>
</ul>
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><h3 id="所用虚拟机"><a href="#所用虚拟机" class="headerlink" title="所用虚拟机"></a>所用虚拟机</h3><p>CentOS 6.5 * 4</p>
<p>RocketMQ 版本3.2.6</p>
<p>模式: 多Master多Slave模式,异步复制</p>
<h3 id="IP"><a href="#IP" class="headerlink" title="IP"></a>IP</h3><table>
<thead>
<tr>
<th style="text-align:center">序号</th>
<th style="text-align:center">IP</th>
<th style="text-align:center">用户名</th>
<th style="text-align:center">密码</th>
<th style="text-align:center">角色</th>
<th style="text-align:center">模式</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">192.168.1.1</td>
<td style="text-align:center">root</td>
<td style="text-align:center"><strong>*</strong></td>
<td style="text-align:center">nameServer1,broker-a</td>
<td style="text-align:center">Master1</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">192.168.1.2</td>
<td style="text-align:center">root</td>
<td style="text-align:center"><strong>*</strong></td>
<td style="text-align:center">nameServer2,broker-b</td>
<td style="text-align:center">Master2</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">192.168.1.3</td>
<td style="text-align:center">root</td>
<td style="text-align:center"><strong>*</strong></td>
<td style="text-align:center">nameServer3,broker-a-s</td>
<td style="text-align:center">Slave1</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">192.168.1.4</td>
<td style="text-align:center">root</td>
<td style="text-align:center"><strong>*</strong></td>
<td style="text-align:center">nameServer4,broker-b-s</td>
<td style="text-align:center">Slave2</td>
</tr>
</tbody>
</table>
<h3 id="下载软件"><a href="#下载软件" class="headerlink" title="下载软件"></a>下载软件</h3><ul>
<li><a href="http://download.csdn.net/detail/cynicismsrs/9773419" target="_blank" rel="external">alibaba-rocketmq-3.2.6.tar.gz</a></li>
<li><a href="https://github.com/JoeyFan/rocketmq-console" target="_blank" rel="external">rocketmq-console</a></li>
</ul>
<hr>
<h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="安装-4台同时"><a href="#安装-4台同时" class="headerlink" title="安装(4台同时)"></a>安装(4台同时)</h3><h4 id="安装JDK-略"><a href="#安装JDK-略" class="headerlink" title="安装JDK 略"></a>安装JDK 略</h4><h4 id="解压"><a href="#解压" class="headerlink" title="解压"></a>解压</h4><pre class=" language-bash"><code class="language-bash"><span class="token function">tar</span> -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local
<span class="token function">cd</span> /usr/local
<span class="token function">ln</span> -s alibaba-rocketmq rocketmq
</code></pre>
<h4 id="创建存储路径"><a href="#创建存储路径" class="headerlink" title="创建存储路径"></a>创建存储路径</h4><pre class=" language-bash"><code class="language-bash"><span class="token function">mkdir</span> /usr/local/rocketmq/store
<span class="token function">mkdir</span> /usr/local/rocketmq/store/commitlog
<span class="token function">mkdir</span> /usr/local/rocketmq/store/consumequeue
<span class="token function">mkdir</span> /usr/local/rocketmq/store/index
</code></pre>
<h4 id="配置RocketMQ配置文件"><a href="#配置RocketMQ配置文件" class="headerlink" title="配置RocketMQ配置文件"></a>配置RocketMQ配置文件</h4><pre class=" language-bash"><code class="language-bash">vim /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties
vim /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties
vim /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties
vim /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties
</code></pre>
<h5 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h5><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#所属集群名字 (注意不要有空格)</span>
brokerClusterName<span class="token operator">=</span>rocketmq-cluster
<span class="token comment" spellcheck="true">#broker名字,注意此处不同的配置文件填写的不一样 192.168.1.1/192.168.1.3 填broker-a 192.168.1.2/192.168.1.4 填broker-b</span>
brokerName<span class="token operator">=</span><span class="token punctuation">(</span>broker-a<span class="token operator">|</span>broker-b<span class="token punctuation">)</span>
<span class="token comment" spellcheck="true">#0 表示 Master,>0 表示 Slave 192.168.1.1/192.168.1.2 填0 192.168.1.3/192.168.1.4 填1</span>
brokerId<span class="token operator">=</span>0
<span class="token comment" spellcheck="true">#本机IP 默认识别 多块网卡会导致识别错误</span>
brokerIP1<span class="token operator">=</span>本机IP
<span class="token comment" spellcheck="true">#nameServer地址,分号分割</span>
namesrvAddr<span class="token operator">=</span>192.168.1.1:9876<span class="token punctuation">;</span>192.168.1.2:9876<span class="token punctuation">;</span>192.168.1.3:9876<span class="token punctuation">;</span>192.168.1.4:9876
<span class="token comment" spellcheck="true">#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数</span>
defaultTopicQueueNums<span class="token operator">=</span>4
<span class="token comment" spellcheck="true">#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭</span>
autoCreateTopicEnable<span class="token operator">=</span>true
<span class="token comment" spellcheck="true">#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭</span>
autoCreateSubscriptionGroup<span class="token operator">=</span>true
<span class="token comment" spellcheck="true">#Broker 对外服务的监听端口</span>
listenPort<span class="token operator">=</span>10911
<span class="token comment" spellcheck="true">#删除文件时间点,默认凌晨 4点</span>
deleteWhen<span class="token operator">=</span>04
<span class="token comment" spellcheck="true">#文件保留时间,默认 48 小时</span>
fileReservedTime<span class="token operator">=</span>120
<span class="token comment" spellcheck="true">#commitLog每个文件的大小默认1G</span>
mapedFileSizeCommitLog<span class="token operator">=</span>1073741824
<span class="token comment" spellcheck="true">#ConsumeQueue每个文件默认存30W条,根据业务情况调整</span>
mapedFileSizeConsumeQueue<span class="token operator">=</span>300000
<span class="token comment" spellcheck="true">#destroyMapedFileIntervalForcibly=120000</span>
<span class="token comment" spellcheck="true">#redeleteHangedFileInterval=120000</span>
<span class="token comment" spellcheck="true">#检测物理文件磁盘空间</span>
diskMaxUsedSpaceRatio<span class="token operator">=</span>88
<span class="token comment" spellcheck="true">#存储路径</span>
storePathRootDir<span class="token operator">=</span>/usr/local/rocketmq/store
<span class="token comment" spellcheck="true">#commitLog 存储路径</span>
storePathCommitLog<span class="token operator">=</span>/usr/local/rocketmq/store/commitlog
<span class="token comment" spellcheck="true">#消费队列存储路径存储路径</span>
storePathConsumeQueue<span class="token operator">=</span>/usr/local/rocketmq/store/consumequeue
<span class="token comment" spellcheck="true">#消息索引存储路径</span>
storePathIndex<span class="token operator">=</span>/usr/local/rocketmq/store/index
<span class="token comment" spellcheck="true">#checkpoint 文件存储路径</span>
storeCheckpoint<span class="token operator">=</span>/usr/local/rocketmq/store/checkpoint
<span class="token comment" spellcheck="true">#abort 文件存储路径</span>
abortFile<span class="token operator">=</span>/usr/local/rocketmq/store/abort
<span class="token comment" spellcheck="true">#限制的消息大小</span>
maxMessageSize<span class="token operator">=</span>65536
<span class="token comment" spellcheck="true">#flushCommitLogLeastPages=4</span>
<span class="token comment" spellcheck="true">#flushConsumeQueueLeastPages=2</span>
<span class="token comment" spellcheck="true">#flushCommitLogThoroughInterval=10000</span>
<span class="token comment" spellcheck="true">#flushConsumeQueueThoroughInterval=60000</span>
<span class="token comment" spellcheck="true">#Broker 的角色 192.168.1.1/192.168.1.2 填ASYNC_MASTER 192.168.1.3/192.168.1.4 填SLAVE</span>
<span class="token comment" spellcheck="true">#- ASYNC_MASTER 异步复制Master</span>
<span class="token comment" spellcheck="true">#- SYNC_MASTER 同步双写Master</span>
<span class="token comment" spellcheck="true">#- SLAVE</span>
brokerRole<span class="token operator">=</span>ASYNC_MASTER
<span class="token comment" spellcheck="true">#刷盘方式</span>
<span class="token comment" spellcheck="true">#- ASYNC_FLUSH 异步刷盘</span>
<span class="token comment" spellcheck="true">#- SYNC_FLUSH 同步刷盘</span>
flushDiskType<span class="token operator">=</span>ASYNC_FLUSH
<span class="token comment" spellcheck="true">#checkTransactionMessageEnable=false</span>
<span class="token comment" spellcheck="true">#发消息线程池数量</span>
<span class="token comment" spellcheck="true">#sendMessageThreadPoolNums=128</span>
<span class="token comment" spellcheck="true">#拉消息线程池数量</span>
<span class="token comment" spellcheck="true">#pullMessageThreadPoolNums=128</span>
<span class="token comment" spellcheck="true">#filterNums</span>
<span class="token comment" spellcheck="true">#filterServerNums=1</span>
</code></pre>
<h4 id="修改日志配置文件"><a href="#修改日志配置文件" class="headerlink" title="修改日志配置文件"></a>修改日志配置文件</h4><pre class=" language-bash"><code class="language-bash"><span class="token function">mkdir</span> -p /usr/local/rocketmq/logs
<span class="token function">cd</span> /usr/local/rocketmq/conf <span class="token operator">&&</span> <span class="token function">sed</span> -i <span class="token string">'s#<span class="token variable">${user.home}</span>#/usr/local/rocketmq#g'</span> *.xml
</code></pre>
<h4 id="修改启动脚本参数(测试时虚拟机内存不够修改)"><a href="#修改启动脚本参数(测试时虚拟机内存不够修改)" class="headerlink" title="修改启动脚本参数(测试时虚拟机内存不够修改)"></a>修改启动脚本参数(测试时虚拟机内存不够修改)</h4><pre class=" language-bash"><code class="language-bash">vim /usr/local/rocketmq/bin/runbroker.sh
JAVA_OPT<span class="token operator">=</span><span class="token string">"<span class="token variable">${JAVA_OPT}</span> -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"</span>
vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT<span class="token operator">=</span><span class="token string">"<span class="token variable">${JAVA_OPT}</span> -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"</span>
</code></pre>
<h4 id="启动NameServer"><a href="#启动NameServer" class="headerlink" title="启动NameServer"></a>启动NameServer</h4><p>nohup sh /usr/local/rocketmq/bin/mqnamesrv &</p>
<h5 id="查看是否启动成功"><a href="#查看是否启动成功" class="headerlink" title="查看是否启动成功"></a>查看是否启动成功</h5><p>tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log</p>
<h4 id="启动BrokerServer-多Master多Slave模式,异步复制"><a href="#启动BrokerServer-多Master多Slave模式,异步复制" class="headerlink" title="启动BrokerServer 多Master多Slave模式,异步复制"></a>启动BrokerServer 多Master多Slave模式,异步复制</h4><blockquote>
<p>A -192.168.1.1|B-192.168.1.2|C-192.168.1.3|B-192.168.1.4</p>
</blockquote>
<p>启动命令:</p>
<pre class=" language-bash"><code class="language-bash">A:
<span class="token function">cd</span> /usr/local/rocketmq/bin
<span class="token function">nohup</span> sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties <span class="token operator">></span>/dev/null 2<span class="token operator">></span><span class="token operator">&</span>1 <span class="token operator">&</span>
//查看是否启动成功
<span class="token function">netstat</span> -ntlp
jps
// 查看日志
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
B:
<span class="token function">cd</span> /usr/local/rocketmq/bin
<span class="token function">nohup</span> sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties <span class="token operator">></span>/dev/null 2<span class="token operator">></span><span class="token operator">&</span>1 <span class="token operator">&</span>
//查看是否启动成功
<span class="token function">netstat</span> -ntlp
jps
// 查看日志
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
C:
<span class="token function">cd</span> /usr/local/rocketmq/bin
<span class="token function">nohup</span> sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties <span class="token operator">></span>/dev/null 2<span class="token operator">></span><span class="token operator">&</span>1 <span class="token operator">&</span>
//查看是否启动成功
<span class="token function">netstat</span> -ntlp
jps
// 查看日志
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
D:
<span class="token function">cd</span> /usr/local/rocketmq/bin
<span class="token function">nohup</span> sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties <span class="token operator">></span>/dev/null 2<span class="token operator">></span><span class="token operator">&</span>1 <span class="token operator">&</span>
//查看是否启动成功
<span class="token function">netstat</span> -ntlp
jps
// 查看日志
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
<span class="token function">tail</span> -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
</code></pre>
<h4 id="安装Tomcat配置RocketMQ-Console"><a href="#安装Tomcat配置RocketMQ-Console" class="headerlink" title="安装Tomcat配置RocketMQ Console"></a>安装Tomcat配置RocketMQ Console</h4><p>复制rocketmq-console.war到192.168.1.1机器的/usr/local/tomcat/webapps/下</p>
<p>vim /usr/local/tomcat/webapps/rocketmq-console/WEB-INF/classes/config.properties</p>
<p>rocketmq.namesrv.addr=192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876;192.168.1.4:9876</p>
<h5 id="启动:"><a href="#启动:" class="headerlink" title="启动:"></a>启动:</h5><p>/usr/local/tomcat/bin/startup.sh</p>
<h4 id="防火墙配置:"><a href="#防火墙配置:" class="headerlink" title="防火墙配置:"></a>防火墙配置:</h4><p>vim /etc/sysconfig/iptables</p>
<pre class=" language-bash"><code class="language-bash">-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9876 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10911 -j ACCEPT
</code></pre>
<p>重启防火墙</p>
<p>service iptables restart</p>
<hr>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>虽然RocketMQ开源的是被阉割版 但是现在项目已经捐献给Apache了 现在已经发布了4.0 相信这款消息中间件以后一定会大放光彩</p>
<hr>
<h2 id="著作权声明"><a href="#著作权声明" class="headerlink" title="著作权声明"></a>著作权声明</h2><p>本文首次发布于 <a href="http://binux.cn">Binux Blog</a>,转载请保留以上链接</p>
]]></content>
<categories>
<category> 安装教程 </category>
</categories>
<tags>
<tag> Linux </tag>
<tag> XBin-Store </tag>
<tag> RocketMQ </tag>
</tags>
</entry>
<entry>
<title><![CDATA[Xbin-Store(分布式商城)项目所用Linux服务系列 Solr集群安装(六)]]></title>
<url>http://binux.cn/2017/03/06/Solr-Cluster-Install/</url>
<content type="html"><![CDATA[<blockquote>
<p>“这篇文章将介绍如何安装Solr集群,如何对Solr集群集群进行操作,以及使用Java客户端进行操作!”</p>
</blockquote>
<h2 id="系列"><a href="#系列" class="headerlink" title="系列"></a>系列</h2><ul>
<li><a href="http://binux.cn/2017/03/01/Linux-MySQL-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 MySQL安装(一)</a></li>
<li><a href="http://binux.cn/2017/03/03/Redis-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Redis集群安装(二)</a></li>
<li><a href="http://binux.cn/2017/03/04/Zookeeper-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Zookeeper集群安装(三)</a></li>
<li><a href="http://binux.cn/2017/03/04/Nginx-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Nginx安装(四)</a></li>
<li><a href="http://binux.cn/2017/03/05/FastDFS-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 FastDFS安装(五)</a></li>
<li><strong><a href="http://binux.cn/2017/03/06/Solr-Cluster-Install/">Xbin-Store(分布式商城)项目所依赖的Linux服务系列 Solr集群安装(六)</a></strong></li>
<li><a href="http://binux.cn/2017/03/07/RocketMQ-Cluster-Install/">Xbin-Store(分布式商城)项目所依赖的Linux服务系列 RocketMQ集群安装(七)</a></li>
</ul>
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><h3 id="所用虚拟机"><a href="#所用虚拟机" class="headerlink" title="所用虚拟机"></a>所用虚拟机</h3><p>CentOS 6.5</p>
<h3 id="IP"><a href="#IP" class="headerlink" title="IP"></a>IP</h3><center><img src="http://on2bs9q7q.bkt.clouddn.com/Linux-Solr-img1.png" alt="IP"></center><br><center>IP</center>
<h3 id="下载软件"><a href="#下载软件" class="headerlink" title="下载软件"></a>下载软件</h3><ul>
<li><a href="http://download.csdn.net/detail/cynicismsrs/9772212" target="_blank" rel="external">apache-tomcat-7.0.47.tar.gz</a></li>
<li><a href="http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz" target="_blank" rel="external">zookeeper-3.4.6</a></li>
<li><a href="https://archive.apache.org/dist/lucene/solr/4.10.3/solr-4.10.3.tgz" target="_blank" rel="external">solr-4.10.3.tgz</a></li>
<li><a href="http://download.csdn.net/detail/zhuzhenlong/9733932" target="_blank" rel="external">IK Analyzer 2012FF_hf1.zip</a></li>
</ul>
<hr>
<h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><h4 id="安装JDK-略"><a href="#安装JDK-略" class="headerlink" title="安装JDK 略"></a>安装JDK 略</h4><h4 id="Zookeeper集群安装"><a href="#Zookeeper集群安装" class="headerlink" title="Zookeeper集群安装"></a>Zookeeper集群安装</h4><p><a href="http://binux.cn/2017/03/04/Zookeeper-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Zookeeper集群安装(三)</a></p>
<h4 id="Tomcat安装-四台同时"><a href="#Tomcat安装-四台同时" class="headerlink" title="Tomcat安装(四台同时)"></a>Tomcat安装(四台同时)</h4><h5 id="解压"><a href="#解压" class="headerlink" title="解压"></a>解压</h5><p>tar -zxvf apache-tomcat-7.0.47.tar.gz</p>
<h5 id="把解压后的Tomcat复制"><a href="#把解压后的Tomcat复制" class="headerlink" title="把解压后的Tomcat复制"></a>把解压后的Tomcat复制</h5><p>/usr/local/solr/tomcat</p>
<h5 id="修改端口号"><a href="#修改端口号" class="headerlink" title="修改端口号"></a>修改端口号</h5><p>vim /usr/local/solr/tomcat/conf/server/server.xml</p>
<p>改为80端口</p>
<pre class=" language-xml"><code class="language-xml">71行
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Connector</span> <span class="token attr-name">port</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>80<span class="token punctuation">"</span></span> <span class="token attr-name">protocol</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>HTTP/1.1<span class="token punctuation">"</span></span>
<span class="token attr-name">connectionTimeout</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>20000<span class="token punctuation">"</span></span>
<span class="token attr-name">redirectPort</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>8443<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
</code></pre>
<h5 id="把solr的压缩包上传到服务器。并解压。"><a href="#把solr的压缩包上传到服务器。并解压。" class="headerlink" title="把solr的压缩包上传到服务器。并解压。"></a>把solr的压缩包上传到服务器。并解压。</h5><h4 id="Solr安装"><a href="#Solr安装" class="headerlink" title="Solr安装"></a>Solr安装</h4><h5 id="复制war包"><a href="#复制war包" class="headerlink" title="复制war包"></a>复制war包</h5><p>把/root/solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat/webapps/下。并改名为ROOT.war</p>
<p>rm -rf /usr/local/solr/tomcat/webapps/ROOT</p>
<p>启动tomcat自动解压。关闭tomcat。删除ROOT.war.</p>
<h5 id="复制Jar包"><a href="#复制Jar包" class="headerlink" title="复制Jar包"></a>复制Jar包</h5><p>把/root/solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中。</p>
<p>cp /root/solr-4.10.3/example/lib/ext/* /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/lib/</p>
<h5 id="创建solrhome"><a href="#创建solrhome" class="headerlink" title="创建solrhome"></a>创建solrhome</h5><blockquote>
<p>Solrhome是存放solr服务器所有配置文件的目录。</p>
</blockquote>
<p>cp -r /root/solr-4.10.3/example/solr /usr/local/solr/solrhome</p>
<h5 id="修改Solr配置文件"><a href="#修改Solr配置文件" class="headerlink" title="修改Solr配置文件"></a>修改Solr配置文件</h5><p>vim /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/web.xml</p>
<pre class=" language-bash"><code class="language-bash">第41行
<span class="token operator"><</span>env-entry<span class="token operator">></span>
<span class="token operator"><</span>env-entry-name<span class="token operator">></span>solr/home<span class="token operator"><</span>/env-entry-name<span class="token operator">></span>
<span class="token operator"><</span>env-entry-value<span class="token operator">></span>/usr/local/solr/solrhome<span class="token operator"><</span>/env-entry-value<span class="token operator">></span>
<span class="token operator"><</span>env-entry-type<span class="token operator">></span>java.lang.String<span class="token operator"><</span>/env-entry-type<span class="token operator">></span>
<span class="token operator"><</span>/env-entry<span class="token operator">></span>
</code></pre>
<h4 id="配置中文分词"><a href="#配置中文分词" class="headerlink" title="配置中文分词"></a>配置中文分词</h4><h5 id="解压-1"><a href="#解压-1" class="headerlink" title="解压"></a>解压</h5><p>IK Analyzer 2012FF_hf1.zip</p>
<h5 id="复制"><a href="#复制" class="headerlink" title="复制"></a>复制</h5><p>cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/lib/</p>
<p>cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/classes</p>
<blockquote>
<p>扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑。</p>
</blockquote>
<h5 id="配置fieldType"><a href="#配置fieldType" class="headerlink" title="配置fieldType"></a>配置fieldType</h5><p>vim /usr/local/solr/solrhome/collection1/conf/schema.xml</p>
<blockquote>
<p>跳转到文档末尾:G</p>
</blockquote>
<pre class=" language-xml"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>fieldType</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text_ik<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>solr.TextField<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>analyzer</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.wltea.analyzer.lucene.IKAnalyzer<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>fieldType</span><span class="token punctuation">></span></span>
</code></pre>
<h5 id="业务字段配置"><a href="#业务字段配置" class="headerlink" title="业务字段配置"></a>业务字段配置</h5><blockquote>
<p>业务字段判断标准:</p>
<ul>
<li>在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述</li>
<li>后续的业务是否需要用到此字段。例如:商品id。</li>
</ul>
</blockquote>
<p>如:</p>
<pre class=" language-xml"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>field</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>item_title<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text_ik<span class="token punctuation">"</span></span> <span class="token attr-name">indexed</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">stored</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>field</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>item_price<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>long<span class="token punctuation">"</span></span> <span class="token attr-name">indexed</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token attr-name">stored</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>field</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>item_image<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>string<span class="token punctuation">"</span></span> <span class="token attr-name">indexed</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>false<span class="token punctuation">"</span></span> <span class="token attr-name">stored</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
等......
</code></pre>
<h4 id="配置Solr集群"><a href="#配置Solr集群" class="headerlink" title="配置Solr集群"></a>配置Solr集群</h4><h5 id="上传配置文件"><a href="#上传配置文件" class="headerlink" title="上传配置文件"></a>上传配置文件</h5><p>cd solr-4.10.3/example/scripts/cloud-scripts/</p>
<p>./zkcli.sh -zkhost 192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181 -cmd upconfig -confdir /usr/local/solr/solrhome/collection1/conf -confname myconf</p>
<h5 id="登陆zookeeper服务器查询配置文件:"><a href="#登陆zookeeper服务器查询配置文件:" class="headerlink" title="登陆zookeeper服务器查询配置文件:"></a>登陆zookeeper服务器查询配置文件:</h5><p>./zkCli.sh</p>
<h5 id="修改solr-xml监控端口为80端口"><a href="#修改solr-xml监控端口为80端口" class="headerlink" title="修改solr.xml监控端口为80端口"></a>修改solr.xml监控端口为80端口</h5><p>vim /usr/local/solr/solrhome/solr.xml</p>
<pre class=" language-xml"><code class="language-xml">31行:
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>solrcloud</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>str</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>host<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>${host:}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>str</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>int</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>hostPort<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>${jetty.port:80}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>int</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>str</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>hostContext<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>${hostContext:solr}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>str</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>int</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>zkClientTimeout<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>${zkClientTimeout:30000}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>int</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>bool</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>genericCoreNodeNames<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>${genericCoreNodeNames:true}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>bool</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>solrcloud</span><span class="token punctuation">></span></span>
</code></pre>
<h5 id="和zookeeper关联"><a href="#和zookeeper关联" class="headerlink" title="和zookeeper关联"></a>和zookeeper关联</h5><p>修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址:<br>JAVA_OPTS=”-DzkHost=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181”</p>
<blockquote>
<p>可以使用vim的查找功能查找到JAVA_OPTS的定义的位置</p>
</blockquote>
<h4 id="启动"><a href="#启动" class="headerlink" title="启动"></a>启动</h4><p>启动每一台solr的tomcat服务</p>
<h4 id="集群配置"><a href="#集群配置" class="headerlink" title="集群配置"></a>集群配置</h4><p>访问:<a href="http://192.168.1.11/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2" target="_blank" rel="external">http://192.168.1.11/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2</a></p>
<blockquote>
<p>新建collection2将集群分为两片,每片两个副本。</p>
</blockquote>
<p>访问:<a href="http://192.168.1.11/admin/collections?action=DELETE&name=collection1" target="_blank" rel="external">http://192.168.1.11/admin/collections?action=DELETE&name=collection1</a></p>
<blockquote>
<p>删除 collection1</p>
</blockquote>
<h2 id="solrJ访问solrCloud"><a href="#solrJ访问solrCloud" class="headerlink" title="solrJ访问solrCloud"></a>solrJ访问solrCloud</h2><pre class=" language-java"><code class="language-java"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SolrCloudTest</span> <span class="token punctuation">{</span>
<span class="token comment" spellcheck="true">// zookeeper地址</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> String zkHostString <span class="token operator">=</span> <span class="token string">"192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181"</span><span class="token punctuation">;</span>
<span class="token comment" spellcheck="true">// collection默认名称</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> String defaultCollection <span class="token operator">=</span> <span class="token string">"collection2"</span><span class="token punctuation">;</span>
<span class="token comment" spellcheck="true">// cloudSolrServer对象</span>
<span class="token keyword">private</span> CloudSolrServer cloudSolrServer<span class="token punctuation">;</span>
<span class="token annotation punctuation">@Before</span>
<span class="token comment" spellcheck="true">// 测试方法之前构造 CloudSolrServer</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
cloudSolrServer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">CloudSolrServer</span><span class="token punctuation">(</span>zkHostString<span class="token punctuation">)</span><span class="token punctuation">;</span>
cloudSolrServer<span class="token punctuation">.</span><span class="token function">setDefaultCollection</span><span class="token punctuation">(</span>defaultCollection<span class="token punctuation">)</span><span class="token punctuation">;</span>
cloudSolrServer<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment" spellcheck="true">// 向solrCloud上创建索引</span>
<span class="token annotation punctuation">@Test</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testCreateIndexToSolrCloud</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> SolrServerException<span class="token punctuation">,</span>
IOException <span class="token punctuation">{</span>
SolrInputDocument document <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SolrInputDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">addField</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">,</span> <span class="token string">"100001"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">addField</span><span class="token punctuation">(</span><span class="token string">"title"</span><span class="token punctuation">,</span> <span class="token string">"李四"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
cloudSolrServer<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">;</span>
cloudSolrServer<span class="token punctuation">.</span><span class="token function">commit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@Test</span>
<span class="token comment" spellcheck="true">// 搜索索引</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testSearchIndexFromSolrCloud</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{</span>
SolrQuery query <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SolrQuery</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
query<span class="token punctuation">.</span><span class="token function">setQuery</span><span class="token punctuation">(</span><span class="token string">"*:*"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
QueryResponse response <span class="token operator">=</span> cloudSolrServer<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span>query<span class="token punctuation">)</span><span class="token punctuation">;</span>
SolrDocumentList docs <span class="token operator">=</span> response<span class="token punctuation">.</span><span class="token function">getResults</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文档个数:"</span> <span class="token operator">+</span> docs<span class="token punctuation">.</span><span class="token function">getNumFound</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"查询时间:"</span> <span class="token operator">+</span> response<span class="token punctuation">.</span><span class="token function">getQTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span>SolrDocument doc <span class="token operator">:</span> docs<span class="token punctuation">)</span> <span class="token punctuation">{</span>
ArrayList title <span class="token operator">=</span> <span class="token punctuation">(</span>ArrayList<span class="token punctuation">)</span> doc<span class="token punctuation">.</span><span class="token function">getFieldValue</span><span class="token punctuation">(</span><span class="token string">"title"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
String id <span class="token operator">=</span> <span class="token punctuation">(</span>String<span class="token punctuation">)</span> doc<span class="token punctuation">.</span><span class="token function">getFieldValue</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"id: "</span> <span class="token operator">+</span> id<span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"title: "</span> <span class="token operator">+</span> title<span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">SolrServerException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Unknowned Exception!!!!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@Test</span>
<span class="token comment" spellcheck="true">// 删除索引</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testDeleteIndexFromSolrCloud</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> SolrServerException<span class="token punctuation">,</span> IOException <span class="token punctuation">{</span>
<span class="token comment" spellcheck="true">// 根据id删除</span>
UpdateResponse response <span class="token operator">=</span> cloudSolrServer<span class="token punctuation">.</span><span class="token function">deleteById</span><span class="token punctuation">(</span><span class="token string">"zhangsan"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment" spellcheck="true">// 根据多个id删除</span>
<span class="token comment" spellcheck="true">// cloudSolrServer.deleteById(ids);</span>
<span class="token comment" spellcheck="true">// 自动查询条件删除</span>
<span class="token comment" spellcheck="true">// cloudSolrServer.deleteByQuery("product_keywords:教程");</span>
<span class="token comment" spellcheck="true">// 提交</span>
cloudSolrServer<span class="token punctuation">.</span><span class="token function">commit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<hr>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>solr 主要是用来搜索的 不需要自己在另外写 集群的安装也不算太麻烦 就是机器用的多了点 要7台虚拟机 实在没有这么多虚拟机的可以在一台机器搭伪分布式</p>
<hr>
<h2 id="著作权声明"><a href="#著作权声明" class="headerlink" title="著作权声明"></a>著作权声明</h2><p>本文首次发布于 <a href="http://binux.cn">Binux Blog</a>,转载请保留以上链接</p>
]]></content>
<categories>
<category> 安装教程 </category>
</categories>
<tags>
<tag> Linux </tag>
<tag> XBin-Store </tag>
<tag> Solr </tag>
</tags>
</entry>
<entry>
<title><![CDATA[Xbin-Store(分布式商城)项目所用Linux服务系列 FastDFS安装(五)]]></title>
<url>http://binux.cn/2017/03/05/FastDFS-Install/</url>
<content type="html"><![CDATA[<blockquote>
<p>“这篇文章将介绍如何安装FastDFS,集群有点麻烦 可能以后会写篇 毕竟我个人开发是足够的”</p>
</blockquote>
<h2 id="系列"><a href="#系列" class="headerlink" title="系列"></a>系列</h2><ul>
<li><a href="http://binux.cn/2017/03/01/Linux-MySQL-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 MySQL安装(一)</a></li>
<li><a href="http://binux.cn/2017/03/03/Redis-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Redis集群安装(二)</a></li>
<li><a href="http://binux.cn/2017/03/04/Zookeeper-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Zookeeper集群安装(三)</a></li>
<li><a href="http://binux.cn/2017/03/04/Nginx-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Nginx安装(四)</a></li>
<li><strong><a href="http://binux.cn/2017/03/05/FastDFS-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 FastDFS安装(五)</a></strong></li>
<li><a href="http://binux.cn/2017/03/06/Solr-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 Solr集群安装(六)</a></li>
<li><a href="http://binux.cn/2017/03/07/RocketMQ-Cluster-Install/">Xbin-Store(分布式商城)项目所用Linux服务系列 RocketMQ集群安装(七)</a></li>
</ul>
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>本文基于CentOS6.5安装</p>
<h3 id="FastDFS方案"><a href="#FastDFS方案" class="headerlink" title="FastDFS方案"></a>FastDFS方案</h3><table>
<thead>
<tr>
<th style="text-align:center">主机IP</th>
<th style="text-align:center">名称</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">192.168.1.1</td>
<td style="text-align:center">trackerd</td>
</tr>
<tr>
<td style="text-align:center">192.168.1.2</td>
<td style="text-align:center">storaged</td>
</tr>
</tbody>
</table>
<h3 id="环境准备"><a href="#环境准备" class="headerlink" title="环境准备"></a>环境准备</h3><h4 id="下载软件:"><a href="#下载软件:" class="headerlink" title="下载软件:"></a>下载软件:</h4><ul>
<li><a href="http://download.csdn.net/detail/cynicismsrs/9771164" target="_blank" rel="external">libfastcommon-master.zip</a></li>
<li><a href="http://download.csdn.net/detail/cynicismsrs/9771173" target="_blank" rel="external">FastDFS_v5.05.tar</a></li>
<li><a href="http://download.csdn.net/detail/cynicismsrs/9771174" target="_blank" rel="external">fastdfs-nginx-module_v1.16.tar</a></li>
<li><a href="http://download.csdn.net/detail/cynicismsrs/9771212" target="_blank" rel="external">fastdfs_client_v1.24.jar</a></li>
</ul>
<h4 id="安装gcc"><a href="#安装gcc" class="headerlink" title="安装gcc"></a>安装gcc</h4><p>命令:yum install make cmake gcc gcc-c++</p>
<h3 id="解压libfastcommon"><a href="#解压libfastcommon" class="headerlink" title="解压libfastcommon"></a>解压libfastcommon</h3><p>命令:unzip libfastcommon-master.zip -d /usr/local/fast/</p>
<h3 id="关闭防火墙"><a href="#关闭防火墙" class="headerlink" title="关闭防火墙"></a>关闭防火墙</h3><blockquote>
<p>在学习时可以不用考虑防火墙的问题</p>
</blockquote>
<hr>
<h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="安装libfastcommon"><a href="#安装libfastcommon" class="headerlink" title="安装libfastcommon"></a>安装libfastcommon</h3><pre><code>./make.sh
./make.sh install
mkdir -p /usr/lib64
install -m 755 libfastcommon.so /usr/lib64
mkdir -p /usr/include/fastcommon
</code></pre><p>打印:</p>
<pre><code>install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_bits.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h /usr/include/fastcommon
</code></pre><blockquote>
<p>注意安装的路径:libfastcommon默认安装到了/usr/lib64/这个位置。</p>
</blockquote>
<h3 id="进行软链接创建"><a href="#进行软链接创建" class="headerlink" title="进行软链接创建"></a>进行软链接创建</h3><pre><code>ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
</code></pre><h3 id="安装FastDFS(同时进行)"><a href="#安装FastDFS(同时进行)" class="headerlink" title="安装FastDFS(同时进行)"></a>安装FastDFS(同时进行)</h3><h4 id="解压"><a href="#解压" class="headerlink" title="解压"></a>解压</h4><p>tar -zxvf FastDFS_v5.05.tar.gz -C /usr/local/fast/</p>
<h4 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h4><pre><code>cd /usr/local/fast/FastDFS
./make.sh
./make.sh install
</code></pre><p>打印:</p>
<pre><code>mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_trackerd /usr/bin
if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_storaged /usr/bin
if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
mkdir -p /usr/lib64
cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin
if [ 0 -eq 1 ]; then cp -f libfdfsclient.a /usr/lib64; fi
if [ 1 -eq 1 ]; then cp -f libfdfsclient.so /usr/lib64; fi
mkdir -p /usr/include/fastdfs
cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs
if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi
</code></pre><h4 id="服务脚本在:"><a href="#服务脚本在:" class="headerlink" title="服务脚本在:"></a>服务脚本在:</h4><pre><code>ls /etc/init.d/ | grep fdfs
fdfs_storaged
fdfs_trackerd
</code></pre><h4 id="配置文件在:"><a href="#配置文件在:" class="headerlink" title="配置文件在:"></a>配置文件在:</h4><pre><code>ls /etc/fdfs/
client.conf.sample storage.conf.sample tracker.conf.sample
</code></pre><h4 id="命令行工具在-usr-bin-目录下"><a href="#命令行工具在-usr-bin-目录下" class="headerlink" title="命令行工具在/usr/bin/目录下"></a>命令行工具在/usr/bin/目录下</h4><pre><code>ls /usr/bin/ | grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
</code></pre><blockquote>
<p>因为FastDFS服务脚本设置的bin目录为/usr/local/bin/下,但是实际我们安装在了/usr/bin/下面。所以我们需要修改FastDFS配置文件中的路径,也就是需要修改俩 个配置文件:</p>
<ul>
<li>命令:vim /etc/init.d/fdfs_storaged</li>
<li>进行全局替换命令:%s+/usr/local/bin+/usr/bin</li>
<li>命令:vim /etc/init.d/fdfs_trackerd</li>
<li>进行全局替换命令:%s+/usr/local/bin+/usr/bin</li>
</ul>
</blockquote>
<h2 id="配置跟踪器(trackerd)"><a href="#配置跟踪器(trackerd)" class="headerlink" title="配置跟踪器(trackerd)"></a>配置跟踪器(trackerd)</h2><h3 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h3><pre><code>cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
vim /etc/fdfs/tracker.conf
</code></pre><h4 id="修改"><a href="#修改" class="headerlink" title="修改"></a>修改</h4><pre><code># the base path to store data and log files
base_path=/fastdfs/tracker
</code></pre><p> mkdir -p /fastdfs/tracker</p>
<blockquote>
<ul>
<li>目录命令:cd /fastdfs/tracker/ && ll</li>
<li>启动tracker命令:/etc/init.d/fdfs_trackerd start</li>
<li>查看进程命令:ps -el | grep fdfs</li>
<li>停止tracker命令:/etc/init.d/fdfs_trackerd stop</li>
</ul>
</blockquote>
<h4 id="查看是否启动成功"><a href="#查看是否启动成功" class="headerlink" title="查看是否启动成功"></a>查看是否启动成功</h4><h5 id="启动前:"><a href="#启动前:" class="headerlink" title="启动前:"></a>启动前:</h5><pre><code>cd /fastdfs/tracker/ && ll
total 0
</code></pre><h5 id="启动"><a href="#启动" class="headerlink" title="启动"></a>启动</h5><p>/etc/init.d/fdfs_trackerd start</p>
<h5 id="启动成功"><a href="#启动成功" class="headerlink" title="启动成功"></a>启动成功</h5><pre><code>cd /fastdfs/tracker/ && ll
total 8
drwxr-xr-x. 2 root root 4096 Dec 14 20:48 data
drwxr-xr-x. 2 root root 4096 Dec 14 20:48 logs
</code></pre><blockquote>
<p>可以设置开机启动跟踪器:(一般生产环境需要开机启动一些服务,如keepalived、Nginx、tomcat等等)</p>
<ul>
<li>命令:vim /etc/rc.d/rc.local</li>
<li>加入配置:/etc/init.d/fdfs_trackerd start</li>
</ul>
</blockquote>
<h2 id="配置FastDFS存储(storaged)"><a href="#配置FastDFS存储(storaged)" class="headerlink" title="配置FastDFS存储(storaged)"></a>配置FastDFS存储(storaged)</h2><h3 id="修改配置文件storage-conf"><a href="#修改配置文件storage-conf" class="headerlink" title="修改配置文件storage.conf"></a>修改配置文件storage.conf</h3><blockquote>
<ul>
<li>进入文件目录:cd /etc/fdfs/,进行copy storage文件一份</li>
<li>命令:cd /etc/fdfs/</li>
<li>命令:cp storage.conf.sample storage.conf</li>
<li>命令:vim /etc/fdfs/storage.conf</li>
</ul>
</blockquote>
<h3 id="修改内容:"><a href="#修改内容:" class="headerlink" title="修改内容:"></a>修改内容:</h3><pre><code>base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=192.168.1.1:22122
http.server_port=80
</code></pre><h3 id="创建存储目录:"><a href="#创建存储目录:" class="headerlink" title="创建存储目录:"></a>创建存储目录:</h3><p>mkdir -p /fastdfs/storage</p>
<h3 id="启动存储(storage)"><a href="#启动存储(storage)" class="headerlink" title="启动存储(storage)"></a>启动存储(storage)</h3><p>命令:/etc/init.d/fdfs_storaged start</p>
<h3 id="查看是否启动成功-1"><a href="#查看是否启动成功-1" class="headerlink" title="查看是否启动成功"></a>查看是否启动成功</h3><p>ps -ef | grep fdfs</p>
<blockquote>
<p>可以设置开机启动跟踪器:(一般生产环境需要开机启动一些服务,如keepaliv ed、linux、tomcat等等)</p>
<ul>
<li>命令:vim /etc/rc.d/rc.local</li>
<li>加入配置:/etc/init.d/fdfs_storaged start</li>