關於hadoop namenode的雙機熱備份方案

來源:互聯網
上載者:User
關鍵字 nbsp; name dfs 查看

參考Hadoop_HDFS系統雙機熱備方案.pdf,試驗後有所增減

關於hadoopnamenode的雙機熱備份方案

1、        前言

目前hadoop-0.20.2沒有提供name node的備份,只是提供了一個secondary node,儘管它在一定程度上能夠保證對name node的備份,但當name node所在的機器出現故障時,secondary node不能提供即時的進行切換,並且可能出現資料丟失的可能性。

我們採用drbd +  heartbeat方案實現name node的HA。

採用drbd實現共用存儲,採用heartbeat實現心跳監控,所有伺服器都配有雙網卡,其中一個網卡專門用於建立心跳網路連接。

2、        基本配置

2.1、硬體環境

採用VMWare的虛擬機器作為測試機,一共三台,其中兩台分別提供2個網卡(其中一個用作網路通訊,一個為heartbeat的心跳),和一個空白的大小相同的分區(供drbd使用)。 軟體環境:RedHat Linux AS 5,hadoop-0.20.2, 大體情況如下圖:

主機

IP位址

分區

server1(name node)

eth0:10.10.140.140

eth1:10.0.0.201(heartbeat心跳使用此ip)

eth0:0:10.10.140.200(虛擬IP)

/dev/drbd0  Mounted on                /home/share

server2(data node)

eth0:10.10.140.117

server3(備份 name node)

eth0:10.10.140.84

eth1:10.0.0.203(heartbeat心跳使用此ip)

eth0:0:10.10.140.200(虛擬IP)

dev/drbd0  Mounted on                /home/share

2.1、網路設定

2.2.1、修改server1和server3的hosts(相同)檔

vi /etc/hosts

10.10.140.140  server1

10.10.140.117  server2

10.10.140.84   server3

10.10.140.200  servervip

10.0.0.201     server1

10.0.0.203      server3

2.2.2、server1和server3的網路設定如下:

server1的網路設定:

[root@server1 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced MicroDevices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0C:29:18:65:F5

ONBOOT=yes

IPADDR=10.10.140.140

NETMASK=255.255.254.0

GATEWAY=10.10.140.1

TYPE=Ethernet

[root@server1 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth1

# Please read/usr/share/doc/initscripts-*/sysconfig.txt

# for thedocumentation of these parameters.

GATEWAY=10.0.0.1

TYPE=Ethernet

DEVICE=eth1

HWADDR=00:0c:29:18:65:ff

BOOTPROTO=none

NETMASK=255.255.255.0

IPADDR=10.0.0.201

ONBOOT=yes

USERCTL=no

IPV6INIT=no

PEERDNS=yes

Server3的網路設定:

[root@server3 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced MicroDevices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0C:29:D9:6A:53

ONBOOT=yes

IPADDR=10.10.140.84

NETMASK=255.255.254.0

GATEWAY=10.10.140.1

TYPE=Ethernet

[root@server3 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth1

# Please read/usr/share/doc/initscripts-*/sysconfig.txt

# for thedocumentation of these parameters.

GATEWAY=10.0.0.1

TYPE=Ethernet

DEVICE=eth1

HWADDR=00:0c:29:d9:6a:5d

BOOTPROTO=none

NETMASK=255.255.255.0

IPADDR=10.0.0.203

ONBOOT=yes

USERCTL=no

IPV6INIT=no

PEERDNS=yes

2.2.3、修改主機名稱

[root@server1 ~]#cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=server1

[root@server3 ~]#cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=server3

2.2.4、 關閉防火牆

[root@server1 ~]#chkconfig iptables off

[root@server3 ~]# chkconfig iptables off

3、        DRBD安裝與配置

3.1、DRBD的原理

DRBD(DistributedReplicated Block Device)是基於Linux系統下的塊複製分發設備。 它可以即時的同步遠端主機和本地主機之間的資料,類似與Raid1的功能,我們可以將它看作為網路 Raid1。 在伺服器上部署使用DRBD,可以用它代替共用磁碟陣列的功能,因為資料同時存在於本地和遠端的伺服器上,當本機伺服器出現故障時,可以使用遠端伺服器上的資料繼續工作,如果要實現無間斷的服務, 可以通過drbd結合另一個開源工具heartbeat,實現服務的無縫接管。 DRBD的工作原理如下圖:

3.2、安裝

下載安裝包:wget  HTTP://oss.linbit.com/drbd/8.3/drbd-8.3.0.tar.gz,執行以下命令:

tar xvzf drbd-8.3.0.tar.gz

cd drbd-8.3.0

cd drbd

make clean all

cd ..

make tools

make install

make install-tools

驗證安裝是否正確:

# insmod drbd/drbd.ko 或者 # modprobe drbd

# lsmod | grep drbd

drbd                 220056  2

顯示則安裝正確。 主要在server1上和和server3上都要安裝

3.3、配置

3.3.1、DRBD使用的硬碟分區

server1和server3分區的大小,格式必須相同。 並且必須都為空白分區,可以在裝系統前預留分區,如果已經安裝好的系統,建議使用gparted工具進行分區。

使用方法可以參考:HTTP://hi.baidu.com/migicq/blog/item/5e13f1c5c675ccb68226ac38.html

server1:ip位址為10.10.140.140,drbd的分區為:/dev/sda4

server3:ip位址為10.10.140.84,drbd的分區為:/dev/sda4

3.3.2、主要的設定檔

DRBD運行時,會讀取一個設定檔/etc/drbd.conf。 這個檔裡描述了DRBD設備與硬碟分區的映射關係,和DRBD的一些配置參數。

[root@server1 ~]#vi /etc/drbd.conf

#是否參加DRBD消費者統計.預設是yes

global {

usage-count yes;

}

# 設置主備節點同步時的網路速率最大值,單位是位元組

common {

syncer { rate 10M; }

# 一個DRBD設備(即:/dev/drbdX),叫做一個"資源".裡面包含一個DRBD設備的主備#節點的相關資訊。

resource r0 {

# 使用協定C.表示收到遠端主機的寫入確認後,則認為寫入完成.

protocol C;

net {

# 設置主備機之間通信使用的資訊演算法.

cram-hmac-alg sha1;

shared-secret"FooFunFactory";

allow-two-primaries;

}

syncer {

rate 10M;

}

# 每個主機的說明以"on"開頭,後面是主機名稱.在後面的{}中為這個主機的配置  on server1 {

device    /dev/drbd0;

#使用的磁碟分割是/dev/sda4

disk     /dev/sda4;

# 設置DRBD的監聽埠,用於與另一台主機通信

address   10.10.140.140:7788;

flexible-meta-disk  internal;

}

on server3 {

device   /dev/drbd0;

disk    /dev/sda4;

address  10.10.140.84:7788;

meta-disk internal;

}

}

3.3.3、將drbd.conf檔案複製到備機上/etc目錄下

[root@server1 ~]#scp /etc/drbd.conf root@server3:/etc/

3.4、DRBD啟動

準備啟動之前,需要分別在2個主機上的空白分區上創建相應的中繼資料保存的資料塊:

常見之前現將兩塊空白分區徹底清除資料

分別在兩個主機上執行

#dd if=/dev/zero  of=/dev/sdbX  bs=1M  count=128

否則下一步會出現

.........

Device size would be truncated,which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy thefilesystem)
Operation refused.
..........

分別在server1和server3上面執行

3.4.1、#drbdadmcreate-md r0 創建中繼資料

確保成功後,接下來就可以啟動drbd進程了(在server01和server02同時啟用):

3.4.2 在server1和server3上分別執行

[root@server01~]# /etc/init.d/drbd start 或servicedrbd start

StartingDRBD resources:    [ d(r0) s(r0) n(r0) ].

3.4.3 設置主節點

在server1執行以下命令(第一次),設置server1為主節點,以後可以用 drbdadmprimary db

#drbdsetup /dev/drbd0 primary –o

3.4.4 查看連接

在第一次啟動會同步磁片的資料。

3.4.5 對空白磁片進行格式化並mount到檔案系統中

此操作只在primary節點上執行。

[root@server1 ~]# mkfs.ext2/dev/drbd0

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

655360 inodes, 1309232 blocks

65461 blocks (5.00%) reserved forthe super user

First data block=0

Maximum filesystemblocks=1342177280

40 block groups

32768 blocks per group, 32768fragments per group

16384 inodes per group

Superblock backups stored onblocks:

32768, 98304, 163840, 229376, 294912,819200, 884736

Writing inode tables: done

Creating journal (32768 blocks):done

Writing superblocks and filesystemaccounting information: done

This filesystem will beautomatically checked every 35 mounts or

180 days, whichever comesfirst.  Use tune2fs -c or -i to override.

[root@server1 ~]# mount /dev/drbd0 /home/share

3.4.6 設置drbd開機時自動啟動

chkconfig--level 35 drbd on

3.5、DRBD測試

3.5.1 主備機手動切換

先卸載主機上drbd設備

[root@server1 ~]# umount /dev/drbd0

將server1降為從節點

[root@server1 ~]# drbdadm secondary r0

查詢server1的狀態

把server3升級為主節點

[root@server3 ~]# drbdadm primary r0

在server3上掛在到drbd設備上

[root@server3 ~]# mount /dev/drbd0 /home/share

查看server3的狀態

4、        Heartbeat的安裝與配置

4.1 Heartbeat的安裝

在server1和server3利用yum安裝heartbeat

[root@server1~]# yum install heartbeat

4.2            Heartbeat的配置

配置/etc/ha.d/ha.cf

1、使用下面的命令查找Heartbeat RPM包安裝後釋放的ha.cf樣本設定檔:

rpm -qd heartbeat | grepha.cf

2、使用下面的命令將樣本配置檔案複製到適當的位置:

cp/usr/share/doc/packages/heartbeat/ha.cf /etc/ha.d/

3、編輯/etc/ha.d/ha.cf檔,取消注釋符號或增加以下內容:

udpport 694

#採用ucast方式,使用網卡eth1在主伺服器和待命伺服器之間發送心跳消息。 指定對端ip,即在server1上指定10.0.0.203,在server3上指定10.0.0.201

ucast eth1 10.0.0.203

4、同時,取消keepalive,deadtime和initdead這三行的注釋符號:

keepalive 2

deadtime 30

initdead 120

initdead行指出heartbeat守護進程初次開機後應該等待120秒後再啟動主伺服器上的資源,keepalive行指出心跳消息之間應該間隔多少秒, deadtime行指出待命伺服器在由於主伺服器出故障而沒有收到心跳消息時,應該等待多長時間, Heartbeat可能會發送警告訊息指出你設置了不正確的值(例如:你可能設置deadtime的值非常接近keepalive的值以確保一個安全配置)。

5、將下面兩行添加到/etc/ha.d/ha.cf檔的末尾:

node server1

node server3

這裡填寫主、待命伺服器的名字(uname -n命令返回的值)

5、去掉以下注釋可以查看heartbeat的運行日誌,對錯誤分析有很大説明

debugfile /var/log/ha-debug

logfile /var/log/ha-log

配置 /etc/ha.d/authkeys

1、使用下面的命令定位樣本authkeys檔,並將其複製到適當的位置: rpm -qd heartbeat | grep authkeys

cp/usr/share/doc/packages/heartbeat/authkeys /etc/ha.d

2、編輯/etc/ha.d/authkeys檔,取消下面兩行內容前的注釋符號:

auth1

1 crc

3、確保authkeys檔只能由root讀取:

chmod 600/etc/ha.d/authkeys

4.3    在待命伺服器上安裝Heartbeat

把設定檔拷貝到待命伺服器上

[root@server1 ~]# scp -r/etc/ha.d root@server3:/etc/ha.d

4.4    啟動Heartbeat

1 在主伺服器和待命伺服器上把heartbeat配置為開機自動啟動

chkconfig --level 35 heartbeat on

2 手工啟停方法

/etc/init.d/heartbeat start

或者

service heartbeat start

/etc/init.d/heartbeat stop

或者

service heartbeat stop

5、        Hadoop主要設定檔的配置

提示:在啟動heartbeat前,應該先formatnamenode在drbd分區中產生中繼資料。

masters

servervip

slaves

server2

core-site.xml

<property> <name>hadoop.tmp.dir</name> <value>/home/share/hadoopdata/</value> < description>A base for other temporary directories.</description></property><property> <name >fs.default.name</name> <value>hdfs://servervip:9000</value> <description>The name of the default file system. A URI whose schemeand authority determine the FileSystem implementation. The uri'sscheme determines the config property (fs. SCHEME.impl) naming theFileSystem implementation class. Theuri's authority is used to determine the host, port, etc. for a filesystem.</description></property<propert y> <name>fs.checkpoint.dir</name> <value>${hadoop.tmp.dir}/dfs/namesecondary</value> <description>Determines where on the local filesystem the DFSsecondary namenode should store the temporary images to merge. Ifthis is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy. </description></property<property> <name>fs.checkpoint.edits.dir</name> <value> ${fs.checkpoint.dir}</value> <description>Determines where on the local filesystem the DFSsecondary namenode should store the temporary edits to merge. Ifthis is a comma-delimited list of directoires then teh edits is replicated in all of the directoires for redundancy. Default value is same as fs.checkpoint.dir </description></property>

hdfs-site.xml

<property> <name>dfs.name.dir</name> <value>${hadoop.tmp.dir}/dfs/name</value> <description>Determines where on the local filesystem the DFS namenode should store the name table(fsimage). If this is a comma-delimitedlist of directories then the name table is replicated in all of the directories, for redundanc y.</description> </property> <property> <name>dfs.name.edits.dir</name> <value >${dfs.name.dir}</value> <description>Determines where on the local filesystem the DFS namenode should sto re the transaction (edits) file. If this is acomma-delimited list of directories then the transaction file isreplicated in all of the directories, for redu ndancy. Default value is same as dfs.name.dir</description> </property>

mapred-site.xml

<property> <name>mapred.job.tracker</name> <value>servervip:9001</value> < description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-processas a single map andreduce task. </description></property>


6、        通過haresource配置自動切換

如果不使用heartbeat的情況下,DRBD只能手工切換主從關係,現在修改heartbeat的設定檔,使DRBD可以通過heartbeat自動切換。

6.1 創建資源腳本

1、新建腳本hadoop-hdfs,用於啟停hdfs檔案系統,同理也可以建腳本hadoop-all,hadoop-jobtracker等資源檔,以hdfs為例內容如下:

[root@server1 conf]# cat/etc/ha.d/resource.d/hadoop-hdfs

cd /etc/ha.d/resource.dvi hadoop-hdfs#!/bin/shcase "$1" instart)# Start commands go herecd /home/hadoop-0.20.2/binmsg=` su - root -c "sh/home/hadoop-0.20.2/bin/start-dfs.sh"`logger $msg;; stop)# Stop commands go herecd /home/hadoop-0.20.2/binmsg=`su - root -c "sh/home/hadoop-0.20.2/bin/stop-dfs.sh"`logger $ msg;; status)# Status commands go here;;

2、修改許可權

[root@server1 conf]# chmod755 /etc/ha.d/resource.d/hadoop-hdfs

3、 把腳本拷貝到備份機並同樣修改許可權

[root@server1 conf]# scp/etc/ha.d/resource.d/hadoop-hdfs server3:                                                                                   /etc/ha.d/resource.d/

6.2 配置haresources

[root@server1 conf]# cat /etc/ha.d/haresources

server1 IPaddr::10.10.140.200 drbddisk::r0 Filesystem::/dev/drbd0::/home/share::ext2hadoop-hdfs

注釋:

Server1 主伺服器名

10.10.140.200 對外服務IP別名

drbddisk::r0 資源drbddisk,參數為r0

Filesystem::/dev/drbd0::/home/share::ext2資源Filesystem,mount設備/dev/drbd0到/home/share目錄,類型為ext2

Hadoop-hdfs檔案系統資源

7、         DRBD、heartbeat、hadoop聯調

7.1創建檔和目錄

1、在server1(主節點)上drbd和heartbeat運行著。 由於heartbeat啟動後,虛擬位址10.10.140.200被分配到主節點上。 用命令查看:

用命令cat /proc/drbd查看server1和server3是否通信正常,可以看到server1和server3分別為主從節點。

查看drbd分區是否掛載

2、查看hadoop dfs是否啟動,打開:HTTP://10.10.140.200:50070/dfshealth.jsp

3、向hadoop上傳檔

創建一個目錄並上傳一個測試檔案,

[root@server1hadoop-0.20.2]# bin/hadoop dfs -mkdir testdir

[root@server1 hadoop-0.20.2]# bin/hadoop dfs-copyFromLocal /home/share/temp2 testdir

查看檔:

7.2 主備機切換

1、在server1上停止heartbeat

[root@server1 /]# service heartbeat stop

Stopping High-Availabilityservices:

[  OK  ]

2、可以查看虛擬IP已經切換到server3上了

3、驗證server3上查看hadoop檔案系統

7.3 主備機再次切換

1、在server1上啟動heartbeat

[root@server1 /]# service heartbeatstart

Starting High-Availability services:

2012/07/25_15:03:31 INFO:  Resource is stopped

[  OK  ]

2、查看虛擬IP已經切換到server1上。

3、驗證server1上查看hadoop檔案系統

8、         其他問題

8.1 split brain問題處理

split brain實際上是指在某種情況下,造成drbd的兩個節點斷開了連接,都以primary的身份來運行。 當drbd某primary節點連接對方節點準備發送資訊的時候如果發現對方也是primary狀態,那麼會會立刻自行斷開連接,並認定當前已經發生split brain了,這時候他會在系統日誌中記錄以下資訊:「 Split-Brain detected,droppingconnection!」 當發生split brain之後,如果查看連接狀態,其中至少會有一個是StandAlone狀態,另外一個可能也是StandAlone(如果是同時發現split brain狀態),也有可能是WFConnection的狀態。

1 節點重新開機時,在dmesg中出現錯誤提示:

drbd0: Split-Brain detected, dropping connection!

drbd0: self055F46EA3829909E:899EC0EBD8690AFD:FEA4014923297FC8:3435CD2BACCECFCB

drbd0: peer 7E18F3FEEA113778:899EC0EBD8690AFC:FEA4014923297FC8:3435CD2BACCECFCB

drbd0: helper command: /sbin/drbdadm split-brain minor-0

drbd0: meta connection shut down by peer.

2在203查看cat/proc/drbd,203運行為StandAlone狀態

version: 8.3.0 (api:88/proto:86-89)

GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829build by root@ost3, 2008-12-30 17:16:32

0: cs:StandAlone ro:Secondary/Unknownds:UpToDate/DUnknown r---

ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0ua:0 ap:0 ep:1 wo:b oos:664

3在202查看cat /proc/drbd,202運行為StandAlone狀態

version: 8.3.0 (api:88/proto:86-89)

GIT-hash:9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@ost2, 2008-12-3017:23:44

0: cs:StandAlone ro:Primary/Unknownds:UpToDate/DUnknown r---

ns:0 nr:0 dw:4 dr:21 al:1 bm:0 lo:0pe:0 ua:0 ap:0 ep:1 wo:b oos:68

4 原因分析

由於節點重啟導致資料不一致,而設定檔中沒有配置自動修復錯誤的內容,因而導致握手失敗,資料無法同步。

split brain有兩種解決辦法:手動處理和自動處理。

手動處理

1 在203上停止heartbeat

Heartbeat會鎖定資源,只有停止後才能釋放

/etc/init.d/heartbeat stop

2 在作為secondary的節點上放棄該資源的資料

在ost3上

/sbin/drbdadm -- --discard-my-dataconnect r0

3在作為primary的節點重新連接secondary

在ost2上

/sbin/drbdadm disconnect r0

/sbin/drbdadm connect r0

把ost2設置為主節點

/sbin/drbdadm primary r0

4在203上重新開機heartbeat

/etc/init.d/heartbeat start

5 查看202狀態 cat /proc/drbd,顯示為Connected,已經恢復了正常。

version: 8.3.0 (api:88/proto:86-89)

GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build byroot@ost2, 2008-12-30 17:23:44

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r---

ns:768 nr:0 dw:800 dr:905 al:11 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1wo:b oos:0

6查看203狀態 cat/proc/drbd,顯示為Connected,已經恢復了正常。

version: 8.3.0 (api:88/proto:86-89)

GIT-hash:9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@ost3, 2008-12-3017:16:32

0: cs:Connected ro:Secondary/Primaryds:UpToDate/UpToDate C r---

ns:0 nr:768 dw:768 dr:0 al:0 bm:10 lo:0pe:0 ua:0 ap:0 ep:1 wo:b oos:0

自動處理

通過/etc/drbd.conf配置中設置自動處理策略,在發生資料不一致時自動處理。 自動處理策略定義如下:

1 after-sb-0pri.

當兩個節點的狀態都是secondary時,可以通過after-sb-0pri策略自動復原。

1)disconnect

預設策略,沒有自動復原,簡單的斷開連接。

2)discard-younger-primary

在split brain發生前從主節點自動同步。

3)discard-older-primary

在split brain發生時從變成primary的節點同步資料。

4)discard-least-changes

在split brain發生時從塊最多的節點同步資料。

5)discard-node-NODENAME

自動同步到名位元組點

2 after-sb-1pri

當兩個節點的狀態只有一個是primary時,可以通過after-sb-1pri策略自動復原。

1)disconnect

預設策略,沒有自動復原,簡單的斷開連接。

2)consensus

丟棄secondary或者簡單的斷開連接。

3)discard-secondary

丟棄secondary資料。

4)call-pri-lost-after-sb

按照after-sb-0pri的策略執行。

3 after-sb-2pri

當兩個節點的狀態都是primary時,可以通過after-sb-2pri策略自動復原。

1)disconnect

預設策略,沒有自動復原,簡單的斷開連接。

2)violently-as0p

按照after-sb-0pri的策略執行。

3)call-pri-lost-after-sb

按照after-sb-0pri的策略執行,並丟棄其他節點。

4 配置自動復原

編輯/etc/drbd.conf,找到resource r0部分,配置策略如下,所有節點完全一致。

#after-sb-0pri disconnect;

after-sb-0pri discard-younger-primary;

#after-sb-1pri disconnect;

after-sb-1pri discard-secondary;

#after-sb-2pri disconnect;

after-sb-2pri call-pri-lost-after-sb;

參考資料:Hadoop_HDFS系統雙機熱備方案.pdf

DRBD安裝配置(主從模式)--詳細步驟圖文並茂.doc

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.