forked from zstackio/zstackio.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeed.xml
More file actions
1133 lines (734 loc) · 66.9 KB
/
feed.xml
File metadata and controls
1133 lines (734 loc) · 66.9 KB
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"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>ZStack</title>
<description>ZStack is open source IaaS software managing resources of compute, storage, networking throughout a datacenter all by APIs.</description>
<link>http://zstack.org/</link>
<atom:link href="http://zstack.org/feed.xml" rel="self" type="application/rss+xml" />
<pubDate>Thu, 31 Dec 2015 15:10:10 +0800</pubDate>
<lastBuildDate>Thu, 31 Dec 2015 15:10:10 +0800</lastBuildDate>
<generator>Jekyll v2.5.3</generator>
<item>
<title>给不同L3网络设置不同的 VirtualRouter Offering</title>
<description><h2>前言</h2>
<p>当用户的网络环境中有多套公有L3网络并且使用了 VirtualRouter(VR) 的网络服务的时候,就需要给创建虚拟机的L3网络配置不同的VR Offering。</p>
<p>由于每个VR Offering会设置特定的管理网络L3和公有网络L3,所以不同公有网络的L3网络应该配备不同的VR Offering,
否则会导致使用其中某个L3网络的虚拟机无法获得正常的网络连接能力。</p>
<h2>网络场景描述</h2>
<p>让我们先来看三种网络场景。第一张图描述了在一个典型的EIP网络模型下,有两个用户的私有网络,整个环境共用了相同的管理网络和公有网络。
在这个场景中,不同的用户网络进行了隔离。用户网络内的虚拟机通讯只发生在私有网络上。当需要访问外网环境时,
VM会通过不同的VR连接相同的公有网络。在这里,我们只需要设置一个默认的VR Offering即可,因为两个VR都是使用相同的公有网络。也就是说VR的配置相同。</p>
<p><img src="/images/blogs/vroffering/zstack_1_pub_l3-2_pri_l3.png" class="center-img img-responsive"></p>
<p>有时候,由于一些特殊的原因(例如需要分摊流量、需要设置不同的公网出口等),我们会配置类似于第二张图的场景。
这个场景和第一张图唯一的不同是在于,两个私有网络访问公网的时候并不是通过相同的共有网络。
这个时候我们就需要给两个私有网络(private l3)配置不同的VR Offering。让其中一个VR走 Public L3-1 访问公网,
而另外一个走 Public L3-2 访问公网。</p>
<p><img src="/images/blogs/vroffering/zstack_2_pub_l3_2_pri_l3.png" class="center-img img-responsive"></p>
<p>在扁平网络(Flat Network)模式中,我们更可能遇到多个公有网络的场景。每个公有网络有独立的网关。
例如下图所示,两个VR只负责给各自的L3网络做DHCP和DNS服务,
虚拟机VM1和VM3分别通过不同的公有网络进行网络通讯。这个时候我们也需要给两个公有网络(public l3)配置不同的 VR Offering。
VM会根据所在的不同的L3网络连接公有网络。</p>
<p><img src="/images/blogs/vroffering/zstack_2_pub_l3.png" class="center-img img-responsive"></p>
<h2>给不同的L3网络设置不同的VR Offering</h2>
<p>首先我们要根据公有网络的数量创建相同数量VR Offering,我们可以把最常用L3的VR Offering设置成默认的。</p>
<p>接着我们就可以给不同L3网络配置不同VR Offering。具体的方法是通过设置系统标签(System Tag)的方式来完成的。
设置系统标签的zstack-cli命令是:</p>
<p><code>CreateSystemTag resourceType=InstanceOfferingVO resourceUuid=YOUR_VR_OFFERING_UUID tag=guestL3Network::YOUR_L3_NETWORK_UUID</code></p>
<p>这里的YOUR_VR_OFFERING_UUID需要替换成目标VR Offering的UUID
YOUR_L3_NETWORK_UUID替换为用于创建VM的L3网络的UUID。EIP模式下(图二),该网络是Private L3。
扁平模式下(图三),该网络是Public L3的UUID。千万留意该L3 网络UUID不可以指定错误。</p>
<p>如果还不熟悉zstack-cli命令,可以参考ZStack的用户教程里各种<a href="http://zstack.org/cn/tutorials/flat-network-cli.html">命令行版本</a>的操作方法。</p>
<p>设置完后,ZStack就可以正确识别不同L3网络的VR Offering,并为不同VM使用不同的网络服务。</p>
<p>更多关于网络服务和VR的信息可以参考:<a href="http://zstackdoc.readthedocs.org/en/latest/userManual/virtualRouter.html">ZStack API文档</a></p>
</description>
<pubDate>Thu, 31 Dec 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn_blog/assign_vr_offering_for_different_l3.html</link>
<guid isPermaLink="true">http://zstack.org/cn_blog/assign_vr_offering_for_different_l3.html</guid>
<category>cn_blog</category>
</item>
<item>
<title>ZStack开发分享--给Qemu增加Cache Mode</title>
<description><h2>前言</h2>
<p>笔者一直以来都持续关心着各种云相关的软件发展的情形和趋势, 但始终没有真正的去折腾它。
直到今年五月份在 Ceph 群组里听到了一个名为 ZStack的 IaaS 开源软件, 于是在自己的好奇心驱使下加入了 ZStack中国社区QQ群组。
在群里潜水了几个月后发现安装似乎很容易, 所以开始试著依照
http://ZStack.org/cn/installation/ 上的一键安装来安装 ZStack, 果然是非常容易安装</p>
<p>接着按照<a href="http://ZStack.org/cn/tutorials/flat-network-ui.html">扁平网络的教程</a>, 正准备继续折腾,却发生VM 无法启动的问题, 顿时觉得有点小失望。</p>
<p>详细的错误讯息请见
https://github.com/ZStackorg/ZStack/issues/146</p>
<p>后来通过Google搜索发现原来是 Qemu 的 Cache Option 和文件系统兼容性所引起的问题。
这个问题的起源是因为我的机器里用的文件系统是ZFS (操作系统是 Ubuntu 14.04), 但是ZFS 不支持 O_DIRECT 所造成的。
因为 ZStack 0.9中在创建 VM 时都是使用 'cache=none', 但是在 ZFS 作为 VM 主存储时 cache 必须为 writethrough 或者 writeback 才行。
去群里向原开发者请教之后发现可以通过在 GlobalConfig中增加一个配置来实现Qemu cache 模式的切换,来解决这个问题。
看起来这个方法实现起来也不会太困难, 于是开始着手解决这个问题。</p>
<h2>实际动手</h2>
<p>先参考一些官方的文件来了解 ZStack 源代码
(以下些许内容取自 ZStack 官网 http://ZStack.org/cn )
目前ZStack的源代码由三个软件仓库构成:</p>
<ol>
<li>ZStack使用Java编写,是ZStack的核心,负责IaaS各种资源管理调度和消息通讯;</li>
<li>ZStack-utility目前主要使用Python编写,包含ZStack的各种终端代理和其他工具。 这些终端代理负责接收来自ZStack核心的消息并执行对应的操作,例如和Libvirt通讯来管理VM的生命周期、各种存储(例如Ceph,iSCSI,SFTP)的管理、 虚拟路由器里管理VM的IP地址等等。除了终端代理工具外,这个软件仓库还包含了ZStack其他的工具,例如ZStack的编辑打包工具、 ZStack安装程序、ZStack命令行工具、ZStack管控工具等等。</li>
<li>ZStack-dashboard使用JavaScript编写,是ZStack的图形界面。</li>
</ol>
<p>(为免篇幅太长, 关于怎么从 Github 取出源码的部分在此省略了)</p>
<p>基本上修改的思路为三个步骤:
1. 新增一个全局的变量叫 CacheMode (Java编写)
2. 将此新的全局变量传给 ZStack-utility 里的 agent (Python 编写的)
3. 在 Python编写的 agent 里, 依照此全局变量的值做出对应的设置</p>
<h3>步骤一</h3>
<p>首先修改 ZStack 的部分,
在 conf/globalConfig/kvm.xml新增一个element</p>
<p><img src="/images/blogs/cache_mode/1.png" class="center-img img-responsive"></p>
<p>在 plugin/kvm/src/main/java/org/ZStack/kvm/KVMGlobalConfig.java 新增全局的变量</p>
<p><img src="/images/blogs/cache_mode/2.png" class="center-img img-responsive"></p>
<p>到此基本上已经在 Web UI 的 Global Configure 新增一个配置 vm.CacheMode (见下图)</p>
<p><img src="/images/blogs/cache_mode/3.png" class="center-img img-responsive"></p>
<h3>步骤二</h3>
<p>修改 ZStack 的部分,
在plugin/kvm/src/main/java/org/ZStack/kvm/KVMAgentCommands.java 中
public static class VolumeTO 中新增私有的变量及公有的方法</p>
<p><img src="/images/blogs/cache_mode/4.png" class="center-img img-responsive"></p>
<p>接著修改 plugin/kvm/src/main/java/org/ZStack/kvm/KVMHost.java
在 startVm 方法里透过 VolumeTO 类新增的方法将新增的 Global Config 配置传给 ZStack-utility agent</p>
<p><img src="/images/blogs/cache_mode/5.png" class="center-img img-responsive"></p>
<p>到这边 ZStack 部分算是修改完成</p>
<h3>依照官方说明的方法来编译ZStack Java 源码</h3>
<p>http://ZStack.org/cn_blog/build-ZStack.html</p>
<p><code>cd ZStack</code>
<code>mvn -DskipTests clean install</code></p>
<p><img src="/images/blogs/cache_mode/6.png" class="center-img img-responsive"></p>
<p>如果过程顺利应该会看到如下的输出</p>
<p><img src="/images/blogs/cache_mode/7.png" class="center-img img-responsive"></p>
<h3>步骤三</h3>
<p>最后我们还要修改 ZStack-utility agent在收到我们新增的全局配置后做出对应的修改
kvmagent/kvmagent/plugins/vm_plugin.py</p>
<p><img src="/images/blogs/cache_mode/8.png" class="center-img img-responsive"></p>
<p><img src="/images/blogs/cache_mode/9.png" class="center-img img-responsive"></p>
<h3>步骤四</h3>
<p>依照官方说明的方法来编译ZStack All In One 安装包
http://ZStack.org/cn_blog/build-ZStack.html</p>
<h3>编译ZStack All In One安装包</h3>
<p>如果ZStack的Java源码已经编译通过,我们就可以开始尝试编译ZStack All In One安装包了:
<code>cd ~/ZStack-repos/</code>
<code>wget -c http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.35/bin/apache-tomcat-7.0.35.zip</code>
<code>cd ZStack-utility/ZStackbuild</code>
<code>ant -DZStack_build_root=/root/ZStack-repos all-in-one</code></p>
<p>因为default git 都会去 checkout master 分支来编译 ZStack All In One包,下面是我使用的方式</p>
<p><code>ant -DZStack.build_version=0.9fix
-DZStackutility.build_version=0.9fix
-DZStackdashboard.build_version=0.9
-Dbuild_name=qa
-DZStack_build_root=/home/matt/ZStack-github all-in-one</code></p>
<p>(关于 –D 相关的选项, 可以看 ZStack-utility/ZStackbuild/build.properties)
如果过程顺利应该会看到如下的输出</p>
<p><img src="/images/blogs/cache_mode/10.png" class="center-img img-responsive"></p>
<h3>后话</h3>
<p>对于新增全局配置的修改大致上就是这样, 唯一要特别注意的地方是, 修改 ZStack Java代码的部分, 关于新增全局配置的变量和方法该摆放在哪一个类, 为了以后代码的维护以及可读性, 最好还是可以跟原始开发者讨论讨论, 本范例会修改在 VolumeTO 类 里, 不代表著所有新增的全局配置都需要修改在那边(意思是有经过些许判断的), 主要还是得依照新增的配置去找出比较相关的类去修改会比较适当, 以上为个人一点小小的心得。</p>
</description>
<pubDate>Tue, 22 Dec 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn_blog/add-qemu-mode-to-zstack.html</link>
<guid isPermaLink="true">http://zstack.org/cn_blog/add-qemu-mode-to-zstack.html</guid>
<category>cn_blog</category>
</item>
<item>
<title>ZStack 助力PaaS/SaaS 高效集成IaaS -- ZStack云环境的快速备份和还原</title>
<description><p>ZStack的快速安装能力解决了传统基础架构即服务软件部署过程过于繁琐的问题。不过安装IaaS软件本身只是第一步。
安装ZStack之后,用户还需要在ZStack上添加计算、存储、网络等相关资源,才能创建云主机。如果用户需要反复的测试部署云环境的过程,例如:</p>
<p>1,给不同的客户演示ZStack的环境的使用过程
2,PaaS和SaaS产品,需要集成ZStack作为IaaS管控层。在搭建PaaS/SaaS私有云的过程中,快速搭建ZStack云环境。</p>
<p>ZStack已经充分的考虑了PaaS/SaaS用户的快速集成,以及需要经常的搭建演示相同的ZStack环境的需求。
对此,ZStack提供了备份和还原云的能力。用户只需要把当前搭建好的云环境备份到一个xml文件中,
之后就可以在一个新装的ZStack环境里使用该xml文件快速还原云环境。'''这一切都要归功于ZStack的全API交付能力'''。
所谓IaaS API的全交付能力,就是指通过API便可以创建IaaS所需要的全部资源。</p>
<p>下面我们就来看一看ZStack的备份和还原云是怎么操作的。</p>
<p>假设我们已经搭建了ZStack,并且配置了一个可以创建虚拟机的云环境。那么备份当前云环境的命令非常简单:</p>
<ol>
<li>首先你需要用zstack-cli登录zstack环境(如果没有更改过密码,密码就是password):</li>
</ol>
<p>zstack-cli LogInByAccount accountName=admin password=password</p>
<ol>
<li>如果IaaS已经部署(或者部署了一部分,例如你可以只部署到下载完Image Template和添加完主存储和备份存储的相关操作。
那么下次还原的时候,也可以是恢复一个IaaS云环境的中间状态),就可以用下面的命令来备份云环境到一个xml文件中去,
备份的参数是 '-D' (切勿和还原的小 '-d' 搞混淆,每次执行命令前也可以使用'-h'查看):</li>
</ol>
<p>zstack-cli -D /tmp/ec2-cloud.xml</p>
<p>dump好的xml文件的内容是这样的:</p>
<p><img class="img-responsive" src="/images/blogs/dump-zstack/dump-xml.png"></p>
<hr />
<p>需要注意的是zstack-cli在备份云环境的时候,调用的是Query相关的API。由于Query API无法取到两个重要信息的:
'''Host的用户名和密码,SftpBackupStorage的用户名和密码''',所以这两个信息需要用户手动添加,不过手动编辑一下还是非常简单的:</p>
<p><img class="img-responsive" src="/images/blogs/dump-zstack/dump-xml2.png"></p>
<hr />
<ol>
<li>还原IaaS环境前,为了保证一个干净的环境,请务必停止ZStack server,重新初始化数据库,和再重启ZStack server
(如果是全新安装的ZStack,可以跳过这步。):</li>
</ol>
<p><code>zstack-ctl stop_node</code></p>
<p>zstack-ctl deploydb --host=YOUR_DB_IP_ADDRESS --drop</p>
<p><code>zstack-ctl start_node</code></p>
<ol>
<li>使用下面这条命令来还原IaaS环境:</li>
</ol>
<p>zstack-cli -d /tmp/ec2-cloud.xml</p>
<p>如果用户的image是放在本地的,整个还原过程会非常快速(例如小于1分钟)。</p>
<p>有了云环境的快速备份和还原,ZStack是不是非常适合我们的PaaS和SaaS软件集成呢?ZStack欢迎和各种PaaS和SaaS的应用服务公司合作。</p>
</description>
<pubDate>Wed, 11 Nov 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn_blog/zstack-dump-and-redeploy-cloud.html</link>
<guid isPermaLink="true">http://zstack.org/cn_blog/zstack-dump-and-redeploy-cloud.html</guid>
<category>cn_blog</category>
</item>
<item>
<title>更新计算节点和备份存储的密码</title>
<description><p>当用户更新了计算节点(Host)或者备份存储(Sftp Backup Storage)密码后,如果没有通知ZStack,
之后可能会遇到ZStack重连该资源失败的问题。
所以用户在更改资源的用户密码后需要通过ZStack的API来更新ZStack记录的这些资源的root用户密码。</p>
<h2>更新资源root密码的操作如下:</h2>
<ol>
<li>登录zstack-cli</li>
</ol>
<p><code>zstack-cli LogInByAccount accountName=admin password=password</code></p>
<ol>
<li>更新Host节点用户密码</li>
</ol>
<p><code>zstack-cli UpdateKVMHost uuid=YOUR_KVM_HOST_UUID password=YOUR_HOST_NEW_ROOT_PASSWORD</code></p>
<ol>
<li>重连Host节点</li>
</ol>
<p><code>zstack-cli ReconnectHost uuid=YOUR_KVM_HOST_UUID</code></p>
<ol>
<li>更新备份存储用户密码</li>
</ol>
<p><code>zstack-cli UpdateSftpBackupStorage uuid=YOUR_SFTP_BS_UUID password=YOUR_SFTP_BS_NEW_ROOT_PASSWORD</code></p>
<ol>
<li>重连备份存储</li>
</ol>
<p><code>zstack-cli ReconnectSftpBackupStorage uuid=YOUR_SFTP_BS_UUID</code></p>
<h2>一次性更改主机密码并更新ZStack</h2>
<p>因为zstack-cli是一个可以在shell执行的命令行工具,所以用户可以用shell script做一个wrapper。
用户使用该wrapper就可以把更改主机root密码和更新ZStack数据库的操作在一个脚本里完成。例如:</p>
<pre><code>[root@localhost ~]# cat change_passwd_wrapper.sh
#Execute in management node. The target_host_ip is the host IP address recorded
# in ZStack. You need to install command jq to parse JSON.
which jq &amp;&gt;/dev/null|| (echo "please install jq firstly" &amp;&amp; exit 1)
target_host_ip=$1
new_passwd=$2
ssh $target_host_ip "echo \"root:$new_passwd\" | chpasswd"
zstack-cli LogInByAccount accountName=admin password=password
host_uuid=`zstack-cli QueryHost managementIp=$target_host_ip |jq '.inventories[0].uuid'`
zstack-cli UpdateKVMHost uuid=$host_uuid password=$new_passwd
zstack-cli ReconnectHost uuid=$host_uuid
</code></pre>
<p>该脚本的使用方法是:</p>
<p><code>[root@localhost ~]# ./change_passwd_wrapper.sh 10.0.101.2 new_passwd</code></p>
<p>该命令首先会ssh到目标的host(10.0.101.2)上用chpasswd命令来更改root的密码为new_passwd。
然后会调用ZStack的API把相应的信息更新到ZStack的数据库中,并且重连Host。
需要注意的是这里的IP地址需要和Host在ZStack中使用的managementIp为相同的字符串,否则更新ZStack会失败。
另外该脚本中使用了<code>jq</code>来解析JSON字符串,所以用户需要预先安装jq。</p>
<p>用户在实际使用ZStack环境中如果遇到问题,可以到ZStack官方QQ群:<strong>410185063</strong> 寻求更多帮助。</p>
</description>
<pubDate>Mon, 12 Oct 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn_blog/updte-host-and-sftp-backup-storage-password.html</link>
<guid isPermaLink="true">http://zstack.org/cn_blog/updte-host-and-sftp-backup-storage-password.html</guid>
<category>cn_blog</category>
</item>
<item>
<title>ZStack Zhaitech Cooperation</title>
<description><h1>Cooperation with the machine learning startup -- Zhaitech</h1>
<p>Today we are happy to announce that we have reached a cooperation agreement with Daqula Zhang, the CEO of the machine learning startup ZhaiTech. According the agreement, Zhaitech will choose ZStack as the unique cloud platform for their machine learning software, for both consumers and business customers; ZStack will provide the professional IaaS solution for Zhaitech, helping setup the on-premise cloud services.</p>
</description>
<pubDate>Sun, 11 Oct 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/blog/zhaitech.html</link>
<guid isPermaLink="true">http://zstack.org/blog/zhaitech.html</guid>
<category>blog</category>
</item>
<item>
<title>ZStack Zhaitech Cooperation</title>
<description><h1>Cooperation with the machine learning startup -- Zhaitech</h1>
<p>Today we are happy to announce that we have reached a cooperation agreement with Daqula Zhang, the CEO of the machine learning startup ZhaiTech. According the agreement, Zhaitech will choose ZStack as the unique cloud platform for their machine learning software, for both consumers and business customers; ZStack will provide the professional IaaS solution for Zhaitech, helping setup the on-premise cloud services.</p>
</description>
<pubDate>Sun, 11 Oct 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn/blog/zhaitech.html</link>
<guid isPermaLink="true">http://zstack.org/cn/blog/zhaitech.html</guid>
<category>blog</category>
</item>
<item>
<title>扁平摸索 vs. EIP 模式 —— 在单机环境中搭建ZStack</title>
<description><p>ZStack作为标准IaaS软件管理计算、存储和网络三大子系统,其中网络子系统是最复杂的。用户在一个简单的单机环境中搭建IaaS,
最常遇到的问题就是该搭建哪种IaaS网络模型和在搭建该模型之前该如何在单机上准备必要的网络环境。
由于不当的网络环境准备,常会导致云主机的启动失败,或者启动后无法获得正确的IP地址。
今天我们将会介绍如何正确的准备用于搭建IaaS系统的网络环境。</p>
<p>首先,让我们来简单介绍一下两种不同的IaaS网络方案:<a href="http://zstack.org/cn/tutorials/flat-network-ui.html">扁平网络</a>和
<a href="http://zstack.org/cn/tutorials/ec2-ui.html">EIP网络</a></p>
<h2>1. 扁平网络</h2>
<p><img class="img-responsive" src="/images/flat_network.png"></p>
<p>扁平网络是私有云环境中最常用、最简单的网络环境。用户的云主机和计算节点处于相同的网络层,</p>
<p>用户的应用完全不会感知自己运行在云主机中、还是物理主机中。用户的应用会非常容易的从物理机迁移到扁平网络的云主机中。
在扁平网络中,假设用户设置的Public-L2的网卡设备为eth0,那么ZStack创建的云主机的IP地址将会和eth0所在的网络拥有相同的网段。
例如用户计算节点eth0的IP地址为192.168.0.2(网关为192.168.0.1,子网掩码为255.255.255.0),用户在Public-L3中设置的IP Range为
192.168.0.100~192.168.0.200。那么在创建在Public-L3网络上的云主机将会自动从ZStack获取192.168.0.100~192.168.0.200中的一个IP地址。</p>
<p><strong>注意:用户在设置Public-L3的IP Range的时候需要避免和eth0网络上其他网络设备的IP地址冲突</strong></p>
<p><strong>注意:用户在设置Public-L3的网关和子网掩码错误,将会导致创建的云主机无法访问网关以外的网络,例如Internet。</strong></p>
<p><strong>注意:用户在添加Public-L3的网络服务时,如果没有选择DHCP的服务,可能会导致新创建的云主机无法获得IP地址,
或者获得IP地址和ZStack分配的不一致。这是因为该云主机并不知道ZStack给它分配的IP地址为多少。</strong></p>
<p><strong>注意:如果eth0网络上有其他DHCP服务器,Public-L3也选择了DHCP服务,有可能会导致云主机获取的IP地址不是ZStack分配的。
这是因为云主机拿到了从网络上原有DHCP服务器分配的IP地址。用户可以通过设置原有DHCP服务器,来禁止它给新的云主机分配IP地址。
不过用户不必担心ZStack的DHCP服务会污染网络上的其他DHCP服务,因为ZStack的DHCP服务器只会给指定MAC的云主机分配IP地址。</strong></p>
<p>在阅读以上注意事项后,希望用户在打算实施私有云部署前,需要预先考虑如何优化公司网络配置。
原则上也很简单,就是用户可以准备一个全新的二层网络环境。给该二层网络环境配置一个网关和对应的IP CIDR,并且不配置任何的DHCP服务。</p>
<p>扁平网络也可以直接用于“公有云”业务,也就是每一个云主机都有一个互联网的独立IP地址。很多VPS提供商利用该模式提供服务。
需要注意的是,扁平网络的云主机之间没有二层网络隔离,网络安全需要通过三层的安全组(Security Group)提供。
用户在选择Public-L3网络服务的时候,需要选上Security Group。通常情况下,三层网络安全控制已经可以达到要求。</p>
<h2>2. EIP 网络</h2>
<p><img class="img-responsive" src="/images/eip.png"></p>
<p>EIP的网络模式(Port Forwarding的模式与EIP模式几乎类似)实际是经典的亚马逊AWS EC2模式。在该模式中,云主机会被设置上两个IP地址。
其中一个是私网IP地址,也就是在云主机中用ifconfig看到的IP地址。还有一个是公网IP地址(可以是互联网的IP地址,也可以是公司内部网络的IP地址)。
云主机的私网IP地址无法从外部直接连接(例如,无法从Internet上连接某公司内部一个IP为192.168.0.10的机器)。
用户通过公网IP地址可以登录该云主机,并进行相关的操作。由于该模式是经典的公有云模式,所以其他公有云也大多提供类似的模式。</p>
<p>在ZStack的EIP网络中,云主机的私网和公网之间是通过路由器(例如虚拟路由器)来隔离和中转的。虚拟路由器既承担了DHCP、DNS这样的服务,
也承担了网关和DNAT的服务。这种做法可以做到更有效的网络隔离,也可以在公网IP地址有限的情况下节省公网IP地址。
如果云主机提供的网络服务只供私网内的其他云主机使用,就不需要获得一个独立的公网IP地址。
在公有云业务中,每个独立的公网IP地址也都是需要收费的。</p>
<p>在EIP模式中,虚拟路由器至少需要拥有一个公网IP地址,用于私网内部云主机访问公网的中转。在没有给云主机配置EIP之前,
公网上的其他网络设备是无法透过虚拟路由器访问云主机的,但是云主机依然可以通过虚拟路由器访问公网(SNAT)。
而EIP相当于DNAT,相当于在虚拟路由器上假设了一个桥梁。</p>
<p><strong>注意:在很多网络环境中,用户采用了EIP的网络架构,但是未必需要使用EIP功能。用户可能只用虚拟路由器的SNAT来分割内外网。</strong></p>
<p>私有云是否会使用EIP网络模式呢?答案是根据用户的需求和网络环境来确定的。通常有两种私有云的情况会使用EIP模式:</p>
<p>一,提供网络服务的公司有一些不多的互联网IP地址。提供网络服务的云主机搭建在公司内网环境,用于连接数据库服务器和应用服务器。
通过EIP,可以让用户可以直接访问放置在公司内网的云主机。如果云主机需要迁移、升级、扩容,用户也可以把EIP在不同的云主机之间进行无缝迁移。
当需要使用负载均衡的时候,该EIP服务可以变身为负载均衡器,把来源于用户的网络访问分散到不同的云主机上。</p>
<p>二,公司的部门较多,有部门需要在公司内网环境里划分独立的私有网络,该私有网络可以访问公司内网,但是公司其他部门不能直接连接私有网络的机器。
这个场景中,云主机EIP的IP地址是公司内网IP地址。使用EIP网络拓扑可以给每个部门的私有网络分配不同的Vlan号以达到二层网络隔离。</p>
<p><strong>注意:用户在设置Public-L3的IP Range的时候需要避免和eth0网络上其他网络设备的IP地址冲突。否则如果虚拟路由器可能会启动失败,
并报告IP地址被占用。</strong></p>
<p><strong>注意:在EIP模式中,如果Public-L2(如eth0)上有其他DHCP服务器,并不会影响虚拟路由器的IP地址分配。
这是因为虚拟路由器的IP地址是ZStack从Public-L3的IP Range中静态指定的。用户唯一需要注意的是,
需要预先在原有网络上DHCP服务器预留一段静态IP地址用于虚拟路由器的IP地址和EIP的IP地址。预留出来的IP地址,
也就是用户设置在Public-L3上面的IP Range。</strong></p>
<h2>3. 单机配置扁平网络和EIP网络</h2>
<p>实战过程中,很多用户会常会在单机上尝试练习扁平网络和EIP网络模式。如果用户能够简单的配置原有网络环境,
那么可以轻松的测试。但是通常情况下,用户的单机网络环境可能和我们之前定义的网络环境有些差异。
例如,我们要求原有网络中预留一些和eth0网络的IP地址给Public-L3,但是由于一些原因无法更改原有网络的网络分配。
又例如,用户的测试机器直接连在Internet上,eth0只有一个Internet的IP地址,没有更多的公网IP地址。
这个时候,我们需要一些特别的手段来营造合适的网络环境。这个手段,就是在单机上创建一个独立的网络设备eth0.10。
我们给该网络设备配置上一个172.16.0.1的IP地址,并将该设备用于Public-L2,这样就可以创建一个干净的网络环境用于ZStack测试。
如果单机的网卡设备不是eth0,也可以做个替换,例如把eth0换成em1。</p>
<p>具体的配置为:</p>
<ol>
<li>Public-L2:eth0.10</li>
<li>Public L3 IP Range: 172.16.0.2~172.16.0.254</li>
<li>Public L3 Netmask: 255.255.255.0</li>
<li>Public L3 Gateway: 172.16.0.1</li>
<li>Private-L2(EIP模式):eth0,vlan 100</li>
<li>Private L3 CIDR: 10.0.0.1/24</li>
</ol>
<p>eth0.10的创建方法:</p>
<ol>
<li>vconfig add eth0 10</li>
<li>ifconfig eth0.10 172.16.0.1 netmask 255.255.255.0</li>
</ol>
<p>为何要给eth0.10设置172.16.0.1的IP地址?有两个原因:</p>
<ol>
<li>虚拟路由器会从Public L3上获得一个172.16.0.x的IP地址,ZStack需要连接它</li>
<li>需要把172.16.0.1作为网关,连接eth0,让云主机可以连通公网。</li>
</ol>
<p>打通eth0.10到eth0的网络:</p>
<ol>
<li>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</li>
<li>iptables -A FORWARD -i eth0.10 -j ACCEPT</li>
<li>iptables -A FORWARD -i br_eth0.10 -j ACCEPT</li>
</ol>
<h3>3.1 练习扁平网络</h3>
<p><img class="img-responsive" src="/images/blogs/misc/single-machine-flat-network.png"></p>
<p>如上图所示,扁平网络模式下的云主机和虚拟路由器都将会获得172.16.0.x的IP地址。</p>
<h3>3.2 练习EIP网络</h3>
<p><img class="img-responsive" src="/images/blogs/misc/single-machine-eip-network.png"></p>
<p>如上图所示,虚拟路由器都将会跨接br_eth0.10和br_eth0.100两个网络。在br_eth0.10网络上,会获得172.16.0.x的IP地址;
在br_eth0.100网络上会获得10.0.0.1的IP地址。其他云主机将会获得10.0.0.x的IP地址。给云主机申请的EIP地址将会是172.16.0.x。
这个时候用户可以直接通过在计算节点上ssh EIP地址,但是无法直接ssh 云主机的私网地址。</p>
<p>用户在实际使用ZStack环境中如果遇到问题,可以到ZStack官方QQ群:<strong>410185063</strong> 寻求帮助。</p>
<h2>参考文献:</h2>
<ol>
<li><a href="./virtualrouter-introduction.html">ZStack 虚拟路由器工作流程</a></li>
<li><a href="/cn/tutorials/flat-network-ui.html">扁平网络教程</a></li>
<li><a href="/cn/tutorials/ec2-ui.html">EIP网络教程</a></li>
<li><a href="http://zstackdoc.readthedocs.org/en/latest/userManual/virtualRouter.html?highlight=virtual%20router">虚拟路由器</a></li>
</ol>
</description>
<pubDate>Sun, 04 Oct 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn_blog/build-zstack-network-on-single-machine.html</link>
<guid isPermaLink="true">http://zstack.org/cn_blog/build-zstack-network-on-single-machine.html</guid>
<category>cn_blog</category>
</item>
<item>
<title>【免安装】ZStack v0.9三层网络VMWare镜像 </title>
<description><p>zstack.tw社区最近制作了ZStack 0.9 VMware Workstation镜像并上传到百度云盘。感兴趣试用的同学可以按照下面的介绍下载试用。</p>
<p>本次镜像里按照了ZStack 0.9,并且配置了复杂的三层网络模式 (Three Tiered Network模式)</p>
<p><strong>ovf档案百度云盘下载位置</strong></p>
<p>http://pan.baidu.com/s/1pJmqR8n</p>
<p>配置说明:</p>
<p>1.操作系统centos7,预设帐号root,默认密码zstack</p>
<p>2.网络模式是NAT模式,默认ip位置是192.168.230.140</p>
<p>3.开机后记得启动zstack node服务与ui `zstack-ctl start_node;zstack-ctl start_ui`</p>
<p>4.已经下载安装了两个VM的qcow2文件: ttylinux.qcow2, zstack-virtualrouter-0.9.0.qcow2</p>
<p> 镜像所在目录:</p>
<p> /var/www/html/qcow2</p>
<p> url位置:</p>
<p> http://192.168.230.140/qcow2</p>
<p>5.Linux安装ISO的文件也已下载,共有两个ISO档案,练习安装虚拟机会用到:</p>
<p> CentOS-7-x86_64-Minimal-1503-01.iso</p>
<p> ubuntu-14.04.3-server-amd64.iso</p>
<p> 文件位置:</p>
<p> /var/www/html/iso</p>
<p> url位置:</p>
<p> http://192.168.230.140/iso</p>
<p>如果遇到安装使用的问题,大家可以到ZStack QQ群:410185063里需求帮助。</p>
</description>
<pubDate>Thu, 24 Sep 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn_blog/zstack-on-vmware-image.html</link>
<guid isPermaLink="true">http://zstack.org/cn_blog/zstack-on-vmware-image.html</guid>
<category>cn_blog</category>
</item>
<item>
<title>ZStack 虚拟路由器工作流程</title>
<description><p>Virtual Router(VR,虚拟路由器)是ZStack中一个特别的网络组件。目前ZStack里大部分的网络服务都是由VR提供的。
VR实际上是一个用于提供服务的特殊虚拟机,
它只在用户虚拟机需要网络服务的时候,由ZStack自动创建和管理。今天我们介绍一下ZStack网络服务里VR的工作流程。
当了解该工作流程后,用户可以更好的规划云环境里的网络服务。一旦出现VR创建失败的情况,也可以更快的定位和解决问题。</p>
<p><img class="img-responsive" src="/images/blogs/misc/zstack-create-vm-process.png"></p>
<p>首先来看一下上图,这个网络环境是ZStack教程里典型内外网分离的网络模型,可用于EIP,Port Forwarding,Security Group,Load Balancer等。
在这个模型里,我们有两台物理机器,左边一台是计算节点,用于创建各种虚拟机;右边一台用于安装ZStack管控节点(Management Node)。
计算节点有两块物理网卡eth0和eth1(如果用户只有一个网卡eth0,可以通过vlan创建一个eth0.x的网卡替代eth1)。
计算节点的eth0和管控节点的网卡相连,这个网络在ZStack里面被称为管理网络(Management-l2)。该网络可以直接连接到公网(Internet或者公司内网)。
在该模型中,公有网络(Public-l2)和Management-l2公用一个eth0。当然为了更好的网络隔离,用户也可以再增加一个独立等网卡eth2,
用于Public-l2(由于管控节点控制计算节点不需要走公有网络,通过网络分离,也可以保护管控节点的安全)。
在我们的例子中,我们需要确保ZStack管控节点可以正确的连接计算节点的eth0(图中的10.0.0.1/24网段,我们需要给网卡配置上正确的IP地址)。
这样在添加计算节点的时候,ZStack就可以通过计算节点eth0上的IP地址部署对应的Agent。
由于Public-l2和Management-l2共享了一个L2,所以在配置网络环境的时候,我们只需要添加Public-l2和Public-l3。
随后在创建VR的时候,管控节点会和VR上的eth0进行通讯,VR的eth0的IP地址将会从用户设置的Public-l3中的IP Range取出一个。
在本例子里面,Publice-l3的IP Range一定是在10.0.0.1/24中的某一段。用户在设置Public-l3的IP Range的时候必须确保设置的IP地址段
不和已有网络中的网络设备冲突,Gateway和NetMask也需要设置正确。</p>
<p><strong>注意:当用户只使用了单台物理机做ZStack部署,并且单台物理机的eth0是从DHCP拿到的IP地址的时候,
如果把eth0作为Public-l2的网卡设备,需要特别关注ZStack给VR分配的IP地址不能和网络中的其他IP冲突。
如果使用没有连接任何网络的ethX作为单节点的Public-l2的网络设备,那么需要在添加L2 Network之前,给ethX设置上相应的IP地址,否则之后无法连通VR的eth0。</strong></p>
<p>在我们的模型里,计算节点上还有一个eth1用于用户VM的私有网络。该eth1可以通过交换机和同一个Cluster内的其他计算节点的eth1相连。
当ZStack添加计算节点的时候,会通过Ansible把KVM Agent安装到计算节点上。当ZStack添加Publice-L2和Private-L2的时候,
会在计算节点上给eth0和eth1创建对应的网桥br_eth0和br_eth1。根据网桥工作原理,ZStack还会把eth0和eth1上的IP地址转移到br_eth0和br_eth1上。</p>
<p>添加完成所有的资源,用户在创建第一个VM的时候,如果用户VM使用了VR的任何一种网络服务(DHCP、DNS、SNAT、Port Forwarding、EIP、Load Balancer),
ZStack会自动创建一个VR VM。这也是创建第一个VM的时候速度比较慢的原因之一。</p>
<p>ZStack创建VR VM的过程如下:</p>
<ol>
<li>ZStack 根据 VR 模版创建一个VR VM,该VM有两个网卡,一个连接到br_eth0负责连接管控节点和公网(如果有独立的Public-l2,会多创建一个网卡),另一个连接到br_eth1负责连接用户VM。</li>
<li>ZStack 给VR指定两个特定的IP地址并注入VR VM中。</li>
<li>VR 启动的最后会调用一个初始化的脚本把注入的IP地址设置到eth0和eth1上面</li>
<li>ZStack管控程序在创建VR之后就会轮询的用ssh尝试连接VR</li>
<li>如果ssh连接成功,ZStack管控程序就会通过Ansible 安装和部署VR的管控程序</li>
<li>VR Agent启动后,ZStack管控程序就会通过HTTP post命令给VR,例如设置即将启动的用户VM的IP地址,DNS之类。</li>
</ol>
<p>VR启动成功后,ZStack就会创建用户VM。用户VM的eth0通过br_eth1的网桥连接到VR的eth1上,并且可以和未来的用户VM通讯。
用户VM访问公网的时候,通过VR的SNAT服务中转。用户VM需要EIP、Port Forwarding还有Load Balancer等服务的时候,也都是在VR上进行对应的配置。</p>
<p>用户在使用ZStack的时候,有时候会遇到VR创建失败的情况。经过分析,其中大多数失败原因都是因为网络配置导致的。具体来看,VR启动失败的故障可能有:</p>
<ol>
<li>创建VR VM失败:找不到合适的Host。可能是没有处于Connected状态的Host,或者Host上的空闲资源(CPU,内存)不足以启动VR。</li>
<li>VR 操作系统启动失败:虚拟化软件错误或者硬盘连接错误(NFS网络不稳定)</li>
<li><strong> ZStack ssh VR 失败:ZStack管控节点无法连接VR。通常原因有:IP地址配置不对;交换机没有允许对应的IP连接;使用了特别的vlan,但是交换机没有设置Truck模式。</strong></li>
<li>ZStack Ansible部署VR Agent失败:部署VR的时候可能会连接Internet下载VR需要的系统库,但是这步在0.9之后就不需要从互联网上下载系统库了,所以通常不会出错。</li>
<li>VR Agent 启动失败:可能是使用了不匹配的VR Image。例如ZStack 0.9 需要使用 VR 0.9版本的Image,如果用户没有更新VR Image的话,会导致HTTP 404的错误。</li>
</ol>
<p>上述错误中,最常见的错误是3。大家可以对照解决。</p>
<p>在VR启动后,用户再启动同一Private L3上的VM的时候ZStack通常不会再次创建VR(除非是使用了独立的负载均衡功能)。
如果在用户VM运行的过程中,发生了VR连接错误,它的影响会是什么?我们该如何恢复呢?下表例举了在多计算节点和不同存储类型的情况下如何恢复失联VR的方法。</p>
<table class="table table-striped table-bordered">
<tr>
<td><b>VR失效原因</b></td>
<td><b>VR失效影响</b></td>
<td><b>恢复VR方法</b></td>
</tr>
<tr>
<td>VR VM网络失联,但是virsh list还可以看到VR 是running状态</td>
<td>扁平网络:外网通讯中断、无法创建新VM、内网连接不影响;扁平网络:无法创建新VM,网络连接不影响</td>
<td>从ZStack UI中的Virtual Router中delete VR VM, 再去Instance的界面重新创建一个用户VM</td>
</tr>
<tr>
<td>VR VM 所在Host挂掉,之后手动重启Host</td>
<td>非扁平网络:外网通讯中断、无法创建新VM;扁平网络:无法创建新VM,网络不影响</td>
<td>从ZStack UI中的Virtual Router中再次Start VR VM</td>
</tr>
<tr>
<td>VR VM 所在Host挂掉,之后Host无法重启,使用网络共享主存储</td>
<td>非扁平网络:外网通讯中断、无法创建新VM、内网不影响;扁平网络:无法创建新VM,网络连接不影响</td>
<td>使用zstack-cli UpdateVmInstance 把VR VM的状态改成 Stopped,再从ZStack UI中的Virtual Router中再次Start VR VM</td>
</tr>
<tr>
<td>VR VM 所在Host挂掉,之后Host无法重启,使用本地主存储</td>
<td>非扁平网络:外网通讯中断、无法创建新VM;扁平网络:无法创建新VM,网络连接不影响</td>
<td>使用zstack-cli UpdateVmInstance 把VR VM的状态改成 Stopped,从ZStack UI中的Virtual Router中delete VR VM,然后再去Instance的界面创建一个新的用户VM</td>
</tr>
</table>
<p>未来ZStack的VR还会提供HA的功能,当一个VR失效的时候,会自动启动一个VR接管之前VR的网络服务。
通常虚拟路由已经可以满足大多数用户正常的网络要求,但是如果用户对网络性能有更高的要求,ZStack也可以集成商业虚拟机交换机,甚至是物理交换机的网络服务。
用户可以在创建L3网络的时候,选择不同网络服务的提供方。</p>
</description>
<pubDate>Mon, 14 Sep 2015 00:00:00 +0800</pubDate>
<link>http://zstack.org/cn_blog/virtualrouter-introduction.html</link>
<guid isPermaLink="true">http://zstack.org/cn_blog/virtualrouter-introduction.html</guid>
<category>cn_blog</category>
</item>
<item>
<title>ZStack v0.9 发布</title>
<description><p>ZStack 0.9 版本今天发布,欢迎大家测试试用。在这个版本里,ZStack新加了两大重量级的功能:</p>
<h2>支持分布式存储Ceph</h2>
<p>从0.9版本开始,ZStack正式支持Ceph作为主存储和备份存储的设备。为了最大化的利用Ceph存储的高级能力,
在一个Zone内,用户需要使用一个Ceph Cluster同时作为主存储和备份存储。这样做的好处是,
避免了用户在创建新的云主机、备份Volume等操作时,主存储和备份存储之间不必要的数据拷贝,
所有的数据操作都是通过COW(copy on write)来实现的。</p>
<p><img src="/images/0.9/1.png" class="center-img img-responsive"></p>
<p>ZStack和Ceph之间的交互是通过部署在Ceph Mon服务器上的Agent来完成的。用户可以动态的添加或删除Ceph的Mon服务器。</p>
<h3>Ceph 备份存储</h3>
<div class="bs-callout bs-callout-info">
<h4>Ceph 备份存储只能和Ceph主存储配合使用</h4>
使用Ceph的一个主要的好处是因为Ceph支持COW,所以在ZStack中,如果使用了Ceph的备份存储,那么主存储也必须是同一个Ceph。
由于Ceph备份存储和主存储都使用相同的Ceph cluster,所以用户不能把一个Ceph的备份存储挂载到多个ZStack的Zones上。 最好的使用方法是每一个Zone使用独立的Ceph cluster作为同一套主存储和备份存储。
换句话说,当ZStack的Zone仅仅挂载了Ceph作为备份存储的时候,你不能再使用NFS、本地存储以及ISCSI作为该Zone的主存储。
当一个Zone同时挂载Ceph备份存储和SFTP备份存储的时候,可以混用多种主存储类型。但是需要特别注意的是,
如果云主机的镜像文件只存在于Ceph备份存储的时候,该云主机只能在Ceph主存储上创建成功。
假设创建云主机时选择的L3网络所在的Cluster上没有挂载Ceph主存储,但是该云主机的镜像文件只存在在Ceph备份存储
上,那么创建云主机将会发生找不到合适主存储的失败。
</div>
<h4>从UI添加Ceph备份存储</h4>
<p><img src="/images/0.9/2.png" class="center-img img-responsive"></p>
<ol>
<li>选择类型 'Ceph'</li>
<li>输入Ceph mon server的 IP/hostname</li>
<li>输入Ceph mon server的 SSH 用户名</li>
<li>输入Ceph mon server的 SSH 密码</li>
<li>点击 'Add'</li>
<li>重复步骤 3 ~ 5 来添加其他的Ceph Mon服务器</li>
<li>点击 'Next'</li>
</ol>
<h4>通过CLI添加Ceph备份存储</h4>
<p>你可以使用 AddCephBackupStorage 来添加 Ceph 备份存储. 例如:</p>
<pre><code>&gt;&gt;&gt;AddCephBackupStorage name=ceph monUrls=root:密码@192.168.0.123,root:password@192.168.0.124,root:password@192.168.0.125
</code></pre>
<p><code>monUrls</code> 是一个字符串列表,每一个Mon服务器的信息通过逗号来分割,每一个Mon服务器的信息遵从如下的格式:</p>
<pre><code>ssh_用户名:ssh_密码@mon_server_ip:[ssh_port][/?monPort=ceph_mon_port]
</code></pre>
<p><code>ssh_用户名</code>, <code>ssh_密码</code>, <code>mon_server_ip</code> 是必须的内容,而<code>ssh_port</code> 和 <code>ceph_mon_port</code>是选填的。
<code>ceph_mon_port</code> 是Ceph Mon服务器的端口,默认值为6789. 一个完整的monUrl的例子是:<code>root:password@192.168.0.123:22/?monPort=6789</code>.</p>
<div class="bs-callout bs-callout-info">
<h4>指定 pool</h4>
<code>AddCephBackupStorage</code> 有一个特别的参数<code>poolName</code>。通过它,用户可以指定一个存在的Ceph Pool。
当用户指定一个pool的名字的时候,ZStack会使用这个pool。当这个pool不存在的时候,ZStack将会报告一个添加失败的错误。
当用户不指定特别的pool名字的时候,ZStack会自动创建一个新的pool。
你可以利用这个功能预先创建一个合适的pool。
</div>
<h4>动态添加Mon服务器</h4>
<p>在添加了Ceph备份存储后,用户还可以给该备份存储添加新的Ceph Mon服务器:</p>
<pre><code>&gt;&gt;&gt;AddMonToCephBackupStorage uuid=d914841733fa499c9dc6d63ea339469d monUrls=root:password@192.168.0.123,root:password@192.168.0.124,root:password@192.168.0.125
</code></pre>
<h4>动态删除Mon服务器</h4>
<p>你还可以使用 RemoveMonFromCephBackupStorage 来删除一个Ceph Mon服务器。</p>
<pre><code>&gt;&gt;&gt;RemoveMonFromCephBackupStorage uuid=d914841733fa499c9dc6d63ea339469d monHostnames=192.168.0.123,192.168.0.124
</code></pre>
<p><code>monHostnames</code> 是一个通过逗号分割的字符串列表,里面是Mon的IP地址。</p>
<h4>查询Ceph备份存储</h4>
<p>使用QueryCephBackupStorage可以查询所有Ceph备份存储的详情:</p>
<p><img src="/images/0.9/4.png" class="center-img img-responsive"></p>
<h3>Ceph主存储</h3>
<p>Ceph主存储既可以和Ceph备份存储协同工作,也可以使用SFTP备份存储。</p>
<h4>通过UI添加</h4>
<p><img src="/images/0.9/3.png" class="center-img img-responsive"></p>
<ol>
<li>选择类型 'Ceph'</li>
<li>输入Ceph mon server的IP/hostname</li>
<li>输入Ceph mon server的SSH 用户名</li>
<li>输入Ceph mon server的SSH 密码</li>
<li>点击 'Add'</li>
<li>重复步骤 3 ~ 5 来添加其他的Ceph Mon服务器</li>
<li>点击 'Next'</li>
</ol>
<h4>Add through CLI</h4>
<p>你可以使用 AddCephPrimaryStorage 来添加一个 Ceph 主存储。 例如::</p>
<pre><code>&gt;&gt;&gt;AddCephPrimaryStorage name=ceph zoneUuid=d914841733fa499c9dc6d63ea339469d monUrls=root:password@192.168.0.123,root:password@192.168.0.124,root:password@192.168.0.125
</code></pre>
<p><code>monUrls</code> 是一个字符串列表,每一个Mon服务器的信息通过逗号来分割,每一个Mon服务器的信息遵从如下的格式:</p>
<pre><code>ssh_用户名:ssh_密码@mon_server_ip:[ssh_port][/?monPort=ceph_mon_port]
</code></pre>
<p><code>ssh_用户名</code>, <code>ssh_密码</code>, <code>mon_server_ip</code> 是必须的内容,而<code>ssh_port</code> 和 <code>ceph_mon_port</code>是选填的。
<code>ceph_mon_port</code> 是Ceph Mon服务器的端口,默认值为6789. 一个完整的monUrl的例子是:<code>root:password@192.168.0.123:22/?monPort=6789</code>.</p>
<p> <h4>指定 pool</h4>
<code>AddCephPrimaryStorage</code> 有三个个特别的参数<code>imageCachePoolName, rootVolumePoolName, dataVolumePoolName</code>。
通过它们,用户可以指定存在的Ceph Pool作为主存储的Pool。
当用户指定pool的名字的时候,ZStack会使用这个pool。当pool不存在的时候,ZStack将会报告一个添加失败的错误。
当用户不指定特别的pool名字的时候,ZStack会自动创建三个新的pool。</p>
<p> 你可以利用这个功能预先创建合适的pool。在指定Pool的时候,你可以只指定其中的一个或者两个,然后由ZStack来创建其余的Pool。
</div></p>
<h4>动态添加Mon服务器</h4>
<p>在添加了Ceph主存储后,用户还可以给该主存储添加新的Ceph Mon服务器:</p>
<pre><code>&gt;&gt;&gt;AddMonToCephBackupStorage uuid=d914841733fa499c9dc6d63ea339469d monUrls=root:password@192.168.0.123,root:password@192.168.0.124,root:password@192.168.0.125
</code></pre>
<h4>动态删除Mon服务器</h4>
<p>你还可以使用 RemoveMonFromCephPrimaryStorage 来删除一个Ceph Mon服务器。</p>
<pre><code>&gt;&gt;&gt;RemoveMonFromCephPrimaryStorage uuid=d914841733fa499c9dc6d63ea339469d monHostnames=192.168.0.123,192.168.0.124
</code></pre>
<p>The <code>monHostnames</code> is a list of IPs of mon servers that you want to remove.</p>
<h4>查询Ceph主存储</h4>
<p>你可以使用QueryCephPrimaryStorage来查询所有的Ceph主存储的详细信息:</p>
<p><img src="/images/0.9/5.png" class="center-img img-responsive"></p>
<h2>动态负载均衡</h2>
<p>从0.9开始,ZStack支持全新的动态负载均衡网络服务。详细的负载均衡介绍请访问<a href="http://zstackdoc.readthedocs.org/en/latest/userManual/lb.html">负载均衡用户手册</a></p>
<h2>安装 0.9</h2>
<h3>单节点一键安装</h3>
<pre><code>mkdir -p zstack-0.9
cd zstack-0.9
wget http://download.zstack.org/releases/0.9/0.9.0/zstack-install.sh
bash zstack-install.sh -a
</code></pre>
<h3>多节点安装</h3>
<p>ZStack 0.9 多节点安装的步骤可以参考<a href="../installation/multi-node.html">多节点安装手册</a>。</p>
<h2>无缝升级</h2>
<div class="bs-callout bs-callout-warning">
<h4>请格外留意在文章最后的虚拟路由器的升级指令</h4>
由于ZStack 0.9 在制裁动态路由功能的时候,添加了新的虚拟路由功能。所以不论是否使用虚拟路由功能,用户都应该升级
虚拟路由。详细的升级办法,会写在升级这章的最后。
</div>
<div class="bs-callout bs-callout-warning">
<h4>备份数据库</h4>
虽然ZStack升级程序会进行备份,不过在升级数据库前,强烈建议用户手动<b>备份数据库!</b>
您可以使用以下的命令来备份当前zstack的数据库,以防之后的误操作:
<pre><code>mysqldump -u root -proot_password --host mysql_ip --port mysql_port zstack > path_to_db_dump.sql</code></pre>
</div>
<h3>快速升级</h3>
<p>如果你仅仅只有一个管理节点,数据库和Dashboard也装在相同的节点上,那么你就可以用下面的方法快速升级:</p>
<pre><code>zstack-ctl stop_node
mkdir -p zstack-0.9
cd zstack-0.9
wget http://download.zstack.org/releases/0.9/0.9.0/zstack-install.sh
wget http://7xi3lj.com1.z0.glb.clouddn.com/releases/0.9/0.9.0/zstack-all-in-one-0.9.0.tgz
bash zstack-install.sh -u -f zstack-all-in-one-0.9.0.tgz
</code></pre>
<p>正常情况,你大概只需要等待2分钟,zstack就会帮你升级完成。</p>
<h3>使用zstack-ctl升级多节点</h3>
<h4>1. 升级第一个节点</h4>
<pre><code>mkdir -p zstack-0.9
cd zstack-0.9
</code></pre>
<div class="bs-callout bs-callout-info">
<h4>请重新安装zstack-ctl,如果你还在使用zstack v0.6系列的产品</h4>
wget http://download.zstack.org/releases/0.7/rc2/zstackctl-0.7.tar.gz
/var/lib/zstack/virtualenv/zstackctl/bin/pip install --ignore-installed zstackctl-0.7.tar.gz
</div>
<pre><code>wget http://7xi3lj.com1.z0.glb.clouddn.com/releases/0.9/0.9.0/zstack.war
zstack-ctl upgrade_management_node --war-file zstack.war
</code></pre>
<h4>2. 升级数据库</h4>
<p>请确保你已经成功备份了数据库!</p>
<pre><code>zstack-ctl upgrade_db
</code></pre>
<div class="bs-callout bs-callout-info">
<h4>如果只有一个管理节点,您可以立刻启动该节点</h4>
使用命令<pre><code>zstack-ctl start_node</code></pre>启动zstack管理节点。如果还有其他管理节点,请继续完成步骤三。
</div>
<h4>3. 升级其他管理节点</h4>
<pre><code>zstack-ctl upgrade_management_node --war-file path_to_the_war --host remote_host_ip
</code></pre>
<h4>4. 升级UI</h4>
<div class="bs-callout bs-callout-info">
<h4>停止UI服务</h4>
如果还在使用0.6版本,请使用命令:<code>/etc/init.d/zstack-dashboard stop</code>;
对于0.6以后的版本,请使用命令:<code>zstack-ctl stop_ui</code>
</div>
<p>升级本地UI服务:</p>
<pre><code>zstack-ctl install_ui
</code></pre>
<p>或者升级远端UI服务:</p>
<pre><code>zstack-ctl install_ui --host remote_machine_ip
</code></pre>
<h4>5. 启动管理节点</h4>
<p>启动本地管理节点:</p>
<pre><code>`zstack-ctl start_node`
</code></pre>
<p>启动远程管理节点:</p>
<pre><code>`zstack-ctl start_node --host remote_host_ip`
</code></pre>
<div class="bs-callout bs-callout-info">
<h4>所有的Agent都会随着管理节点的启动而自动升级</h4>
当管理节点启动后,会重新连接并升级包括计算节点,备份存储,虚拟路由等等一系列的ZStack Agents。
用户在创建新的云主机之前,需要确保计算节点的状态已经变成Connected
</div>
<h4>6. 启动UI服务</h4>
<p>启动本地UI:</p>