Redis是從3.0版本開始支持cluter的,采用的是hash槽方式,可以將多個(gè)Redis實(shí)例整合在一起,形成一個(gè)群集,也就是將數(shù)據(jù)分散存儲(chǔ)到群集中的多個(gè)節(jié)點(diǎn)上。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、猇亭ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的猇亭網(wǎng)站制作公司
Redis的cluster是一個(gè)無(wú)中心的結(jié)構(gòu),在群集中,每個(gè)master的身份是平等的,每個(gè)節(jié)點(diǎn)都保存數(shù)據(jù)和整個(gè)群集的狀態(tài),并且知道其他節(jié)點(diǎn)所負(fù)責(zé)的槽,也會(huì)定時(shí)發(fā)送心跳信息,能夠及時(shí)感知群集中異常的節(jié)點(diǎn),并且采取投票的方式來(lái)決定該節(jié)點(diǎn)是否為不可用,若票數(shù)為群集中節(jié)點(diǎn)的半數(shù)以上,則認(rèn)為該節(jié)點(diǎn)不可用,也正是因?yàn)榇颂攸c(diǎn),所以要部署Redis群集,節(jié)點(diǎn)數(shù)量最少要三個(gè)及以上。
群集角色有master和slave,master之間分配slots(槽),槽點(diǎn)編號(hào)是0-16383(共16384個(gè))。
默認(rèn)情況下,每個(gè)群集節(jié)點(diǎn)有兩個(gè)TCP端口在監(jiān)聽,一個(gè)是6379(用于監(jiān)聽客戶端的訪問(wèn)連接),另一個(gè)是16379(用于群集之間的節(jié)點(diǎn)通信)。注意,防火墻需要放行這兩個(gè)端口的流量。
Redis的所有數(shù)據(jù)都是保存在內(nèi)存中,然后不定期的通過(guò)異步方式保存到磁盤上(這稱為“半持久化模式”);也可以把每一次數(shù)據(jù)變化都寫入到一個(gè)append only file(aof)里面(這稱為“全持久化模式”)。
Redis提供的這兩種方式進(jìn)行持久化,一種是RDB持久化(原理是將Redis在內(nèi)存中的數(shù)據(jù)庫(kù)定時(shí)記錄dump到磁盤上的RDB持久化),另一種是AOF(append only file)持久化(原理是將Redis的操作日志以追加的方式寫入文件)
RDB的優(yōu)點(diǎn)與缺點(diǎn)
RDB半持久化的優(yōu)點(diǎn):
- 只包含一個(gè)文件,有利于文件備份;
- 災(zāi)難恢復(fù)比aof持久化要快;
- 性能最大化。對(duì)于Redis的服務(wù)進(jìn)程而言,在開始持久化時(shí),它唯一需要做的只是fork出子進(jìn)程,之后再由子進(jìn)程完成這些持久化的工作,這樣就可以極大的避免服務(wù)進(jìn)程執(zhí)行IO操作了。
- 相比較AOF機(jī)制,如果數(shù)據(jù)集過(guò)大,RDB的啟動(dòng)效率會(huì)更高。
RDB半持久化的缺點(diǎn):- 由于RDB是通過(guò)fork子進(jìn)程來(lái)協(xié)助完成數(shù)據(jù)持久化工作的,因此,如果當(dāng)數(shù)據(jù)集比較大時(shí),可能會(huì)導(dǎo)致整個(gè)服務(wù)停止幾百毫秒,甚至是1秒鐘。
AOF的優(yōu)點(diǎn)與缺點(diǎn)
AOF全持久化的優(yōu)點(diǎn):
- 可以保證數(shù)據(jù)的高可用性;
- 寫入過(guò)程中及時(shí)出現(xiàn)宕機(jī)現(xiàn)象,也不會(huì)破壞日志文件中已經(jīng)存在的內(nèi)容,如果在寫入過(guò)程中宕機(jī),重啟Redis后可以通過(guò)redis-check-aof工具來(lái)解決;
- 如果日志過(guò)大,Redis可以自動(dòng)啟用rewrite機(jī)制,生成新的文件存儲(chǔ)aof日志;
- 該機(jī)制可以帶來(lái)更高的數(shù)據(jù)安全性,及數(shù)據(jù)持久性。Redis中提供了三種同步策略,即每秒同步、每修改同步和不同步。
AOF全持久化的缺點(diǎn):- 對(duì)于相同數(shù)量的數(shù)據(jù)集而言,AOF文件通常要大于RDB文件。RDB在恢復(fù)大數(shù)據(jù)集時(shí)的速度比AOF的恢復(fù)速度要快;
- 根據(jù)同步策略的不同,AOF在運(yùn)行效率上往往會(huì)慢于RDM,總之,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB一樣高效。
如果RDB和AOF同時(shí)存在,則優(yōu)先選擇AOF方式。
上面共六臺(tái)centos服務(wù)器,實(shí)現(xiàn)三臺(tái)master分別對(duì)應(yīng)一臺(tái)slave(也可以在一臺(tái)服務(wù)器上配置多個(gè)Redis實(shí)例,但不要master-slave在同一臺(tái)物理服務(wù)器,可以使用交叉master-slave的方式進(jìn)行主從復(fù)制,所謂交叉就是master在node01,但對(duì)應(yīng)的slave在node02,node02上master對(duì)應(yīng)的slave在node03,而node03對(duì)應(yīng)的slave在node01,這樣做的好處是避免因?yàn)槲锢矸?wù)器的宕機(jī)而造成整個(gè)群集崩潰,這里只是稍微提示以下,自行研究即可)。
這里為了展示同一臺(tái)主機(jī)上配置多個(gè)Redis實(shí)例,所以將在node06上配置多個(gè)Redis實(shí)例,其余節(jié)點(diǎn)各負(fù)責(zé)一個(gè)Redis實(shí)例即可。
在進(jìn)行接下來(lái)的配置前,請(qǐng)先下載我提供的源碼包(其實(shí),這里部署的版本是Redis4.0的,版本還低了些,有些方便的配置無(wú)法進(jìn)行,可以參考下我那篇部署Redis 5.0的博文)。
這里以node01的配置進(jìn)行示例,其他節(jié)點(diǎn)照搬進(jìn)行配置即可。
[root@node01 ~]# ls | grep redis #在xshell使用rz命令上傳我提供的包,如下:
redis-4.0.14.tar.gz
[root@node01 ~]# tar zxf redis-4.0.14.tar.gz -C /usr/local/ #解包
[root@node01 ~]# cd /usr/local/ #切換至指定路徑
[root@node01 local]# mv redis-4.0.14 redis #更改目錄名稱
[root@node01 local]# cd redis/ #切換至解壓后的目錄
[root@node01 redis]# make && make install #無(wú)需配置,直接編譯安裝即可
[root@node01 redis]# ./utils/install_server.sh #對(duì)Redis進(jìn)行初始化
#初始化的所有選項(xiàng)保持默認(rèn),一路回車確認(rèn)即可
#是在確認(rèn)監(jiān)聽端口、配置文件、日志文件、pid存放路徑等信息
.............#省略部分內(nèi)容
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
#出現(xiàn)上述內(nèi)容,則表示初始化成功
#接下來(lái)進(jìn)行一些優(yōu)化,如下:
[root@node01 redis]# echo "512" > /proc/sys/net/core/somaxconn
[root@node01 redis]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
[root@node01 redis]# sysctl -p
vm.overcommit_memory = 1
[root@node01 redis]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[root@node01 redis]# vim /etc/redis/6379.conf #編輯配置文件,修改如下
bind 0.0.0.0 #找到?jīng)]有被注釋的這一行,修改為0.0.0.0
daemonize yes #若有注釋符號(hào),需要?jiǎng)h除注釋符號(hào),以便生效
cluster-enabled yes
cluster-node-timeout 5000
appendonly yes
#修改完成后,保存退出即可。
[root@node01 redis]# /etc/init.d/redis_6379 restart #重啟Redis服務(wù)
[root@node01 redis]# netstat -anpt | grep redis #確定端口6379及16379處于監(jiān)聽狀態(tài)
在其他節(jié)點(diǎn)服務(wù)器上將上述配置依次進(jìn)行以便,主機(jī)node06除外,因?yàn)樯院髮⒃趎ode06上展示單臺(tái)主機(jī)多Redis實(shí)例的配置。
node06這個(gè)節(jié)點(diǎn)上,我將配置其運(yùn)行多個(gè)Redis數(shù)據(jù)庫(kù)實(shí)例,所以與前面五個(gè)節(jié)點(diǎn)的配置并不是完全一樣,請(qǐng)謹(jǐn)慎配置。
[root@node06 ~]# tar zxf redis-4.0.14.tar.gz -C /usr/local/
[root@node06 ~]# cd /usr/local/
[root@node06 local]# mv redis-4.0.14 redis
[root@node06 local]# cd redis/
[root@node06 redis]# make && make install #編譯安裝后,無(wú)需進(jìn)行初始化
[root@node06 redis]# redis-server #啟動(dòng)查看需要優(yōu)化的項(xiàng)
#在前面幾個(gè)節(jié)點(diǎn)的優(yōu)化配置就是從此命令執(zhí)行后的提示信息獲得的
#接下里就優(yōu)化這些提示的配置咯!
[root@node06 redis]# echo "512" > /proc/sys/net/core/somaxconn
[root@node06 redis]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
[root@node06 redis]# sysctl -p
vm.overcommit_memory = 1
[root@node06 redis]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[root@node06 redis]# vim redis.conf #編輯當(dāng)前目錄下的模板配置文件以下幾項(xiàng)
bind 0.0.0.0
port 6379
daemonize yes #開啟后臺(tái)守護(hù)進(jìn)程,以便后臺(tái)運(yùn)行
cluster-enabled yes #開啟群集
cluster-node-timeout 5000 #群集節(jié)點(diǎn)間的超時(shí)時(shí)間,單位是毫秒
appendonly yes #是否開啟同步到磁盤
appendfilename "appendonly-6379.aof" #aof日志的名字
#編輯完成后,保存退出即可
[root@node06 redis]# mkdir -p /usr/local/redis-cluster/{6379..6382}
#以上是打算運(yùn)行幾個(gè)Redis實(shí)例,就創(chuàng)建幾個(gè)目錄即可,這里我以實(shí)例的端口號(hào)給目錄命名(暫時(shí)打算運(yùn)行4個(gè)Redis實(shí)例)
#以下是將修改后的配置文件復(fù)制到指定的目錄下一份
[root@node06 redis]# cp redis.conf /usr/local/redis-cluster/6379/
[root@node06 redis]# cp redis.conf /usr/local/redis-cluster/6380/
[root@node06 redis]# cp redis.conf /usr/local/redis-cluster/6381/
[root@node06 redis]# cp redis.conf /usr/local/redis-cluster/6382/
#然后下面將復(fù)制過(guò)去的各個(gè)配置文件中改為與Redis實(shí)例對(duì)應(yīng)的端口號(hào)
[root@node06 redis]# cd /usr/local/redis-cluster/
[root@node06 redis-cluster]# sed -i s/6379/6380/g 6380/redis.conf
[root@node06 redis-cluster]# sed -i s/6379/6381/g 6381/redis.conf
[root@node06 redis-cluster]# sed -i s/6379/6382/g 6382/redis.conf
[root@node06 redis-cluster]# cd 6379 #切換到6379目錄
[root@node06 6379]# redis-server redis.conf #啟動(dòng)該目錄下的配置文件
101582:C 04 Nov 23:37:04.988 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
101582:C 04 Nov 23:37:04.988 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=101582, just started
101582:C 04 Nov 23:37:04.988 # Configuration loaded
#接下來(lái)就是依次啟動(dòng)各個(gè)實(shí)例
[root@node06 6379]# cd ../6380
[root@node06 6380]# redis-server redis.conf
[root@node06 6380]# cd ../6381
[root@node06 6381]# redis-server redis.conf
[root@node06 6381]# cd ../6382
[root@node06 6382]# redis-server redis.conf
[root@node06 6382]# netstat -anpt | grep redis #查看Redis相關(guān)端口的監(jiān)聽情況
上述查看Redis端口監(jiān)聽情況的返回信息如下:
[root@node01 ~]# yum -y install rpm-build openssl openssl-devel #安裝依賴
[root@node01 ~]# ls | egrep "gem|ruby" #將下面的兩個(gè)包上傳至主機(jī)node01
redis-3.3.0.gem
ruby-2.3.1.tar.gz
[root@node01 ~]# tar zxf ruby-2.3.1.tar.gz -C /usr/src #解包
[root@node01 ~]# cd /usr/src/ruby-2.3.1/ #進(jìn)入解壓后的目錄
[root@node01 ruby-2.3.1]# ./configure --prefix=/usr/local/ruby && make && make install #編譯安裝,時(shí)間較長(zhǎng)
#下面是對(duì)生成的命令做軟連接
[root@node01 ruby-2.3.1]# ln -sf /usr/local/ruby/bin/* /usr/local/bin/
[root@node01 ruby-2.3.1]# ln -sf /usr/local/redis/src/redis-trib.rb /usr/local/bin/
[root@node01 ruby-2.3.1]# cd #回到 .gem文件所在目錄
[root@node01 ~]# gem install redis-3.3.0.gem #執(zhí)行此命令
Successfully installed redis-3.3.0
Parsing documentation for redis-3.3.0
Installing ri documentation for redis-3.3.0
Done installing documentation for redis after 0 seconds
1 gem installed
#返回上述信息則表示成功
[root@node01 ~]# redis-cli -p 6379 #登錄到本地Redis實(shí)例
#以下是將參與群集的各個(gè)節(jié)點(diǎn)添加到群集中
127.0.0.1:6379> CLUSTER MEET 192.168.20.3 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.20.4 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.20.5 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.20.6 6379
OK
127.0.0.1:6379> CLUSTER MEET 192.168.20.7 6379
OK
127.0.0.1:6379> set a b #雖然節(jié)點(diǎn)添加完成,但是由于沒有分配hash槽,所以無(wú)法添加數(shù)據(jù)
(error) CLUSTERDOWN Hash slot not served
127.0.0.1:6379> CLUSTER INFO #查看群集的狀態(tài)
cluster_state:fail #是失敗的
192.168.20.3:6379> exit
#接下來(lái)為群集中的節(jié)點(diǎn)分配槽點(diǎn)
#必須小心分配,一旦分配錯(cuò)誤,很麻煩
#雖然可以將命令中的“add”換為“del”,但是我沒有成功
#一定要將0至16383完全分配出去,最好是等份分配
#只需給作為master的節(jié)點(diǎn)分配即可,我這里node01至node03為master
[root@node01 ~]# redis-cli -h 192.168.20.2 -p 6379 cluster addslots {0..5461}
OK
[root@node01 ~]# redis-cli -h 192.168.20.3 -p 6379 cluster addslots {5462..10922}
OK
[root@node01 ~]# redis-cli -h 192.168.20.4 -p 6379 cluster addslots {10923..16383}
OK
[root@node01 ~]# redis-cli -p 6379 -c #進(jìn)入群集,需要加“-c”選項(xiàng)
127.0.0.1:6379> CLUSTER NODES #查看群集中的節(jié)點(diǎn)信息
#接下來(lái)是將各個(gè)slave從節(jié)點(diǎn)與master進(jìn)行綁定
#node04作為node01的從節(jié)點(diǎn),node05作為node02的從節(jié)點(diǎn),node06的6379實(shí)例作為node03的從節(jié)點(diǎn)
#需要配置哪個(gè)從節(jié)點(diǎn),就需要登錄到哪個(gè)實(shí)例
127.0.0.1:6379> CLUSTER NODES #可以先執(zhí)行此命令,查看相應(yīng)節(jié)點(diǎn)的ID,以便接下來(lái)指定
[root@node01 ~]# redis-cli -h 192.168.20.5 -p 6379 #登錄到node04
192.168.20.5:6379> CLUSTER REPLICATE 5cd3d0eec161a7bcc785202397fd8363074ae9c2
#上面指定的是node01節(jié)點(diǎn)的ID
OK
192.168.20.5:6379> exit #退出實(shí)例
[root@node01 ~]# redis-cli -h 192.168.20.6 -p 6379 #登錄到node05
192.168.20.6:6379> CLUSTER REPLICATE e2de936c380eb2239f0a349dcbfba5daa74fa1d7
#上述指定的是node02的節(jié)點(diǎn)ID
OK
192.168.20.6:6379> exit #退出實(shí)例
[root@node01 ~]# redis-cli -h 192.168.20.7 -p 6379 #登錄到node06的6379實(shí)例
192.168.20.7:6379> CLUSTER REPLICATE dd03b02213df3a91608d1f4ae8080c37f4790d7c
#上述是指定node03的節(jié)點(diǎn)ID
OK
192.168.20.7:6379> exit
配置至此,可再次查看群集的節(jié)點(diǎn)信息,會(huì)發(fā)現(xiàn)主從之間都對(duì)應(yīng)上了,如下:
至此,群集即可正常讀寫數(shù)據(jù)了,如下:
[root@node01 ~]# redis-cli -h 192.168.20.2 -p 6379 -c #登錄到群集
192.168.20.2:6379> set b c
OK
[root@node01 ~]# redis-trib.rb check 127.0.0.1:6379 #檢查群集的狀態(tài)
上述命令返回的信息如下:
[root@node01 ~]# redis-trib.rb add-node 192.168.20.7:6380 192.168.20.2:6379
#在添加節(jié)點(diǎn)時(shí),不添加其他配置,默認(rèn)加入群集后,角色是master
返回的提示信息如下則表示成功:
由于一個(gè)群集若要正常運(yùn)行,必須將所有的槽點(diǎn)分配出去,所以當(dāng)有新的節(jié)點(diǎn)加入后,需要重新給新加入的節(jié)點(diǎn)分配槽點(diǎn),如下:
[root@node01 ~]# redis-trib.rb check 127.0.0.1:6379 #執(zhí)行此命令進(jìn)行確認(rèn)新加入的節(jié)點(diǎn)時(shí)master
[root@node01 ~]# redis-trib.rb reshard 192.168.20.2:6379 #指定群集地址及端口
How many slots do you want to move (from 1 to 16384)? 4096
#若是四個(gè)master,那么平均值為4096,所以這里輸入4096
What is the receiving node ID? 010752fb2527317a938fcb5b4e73822db805b3a1
#指定接收的節(jié)點(diǎn),也就是新加入的node06主機(jī)上6380的那個(gè)實(shí)例的ID
Source node #1:all #指定從哪個(gè)節(jié)點(diǎn)的槽點(diǎn)分配,這里輸入“all”選擇所有節(jié)點(diǎn)
Do you want to proceed with the proposed reshard plan (yes/no)? yes #輸入“yes”進(jìn)行確認(rèn)
至此,新的節(jié)點(diǎn)就添加完成了,并且分配了相應(yīng)的槽點(diǎn),但是...還沒有從節(jié)點(diǎn),所以接下來(lái)為新加入的master分配一個(gè)從節(jié)點(diǎn)。
分配從節(jié)點(diǎn)的方式有兩種,一種是不指定為哪個(gè)master的從節(jié)點(diǎn),自動(dòng)綁定到?jīng)]有從節(jié)點(diǎn)的master上,一種是直接指定綁定到哪個(gè)master上,這里將這兩種方式都寫下來(lái)。
#方式一:
[root@node01 ~]# redis-trib.rb add-node --slave 192.168.20.7:6381 192.168.20.7:6380
#將node06上的6381實(shí)例以slave的身份加入到群集
#注意,返回的信息不可有紅色字樣,那就說(shuō)明有錯(cuò)誤
[root@node01 ~]# redis-trib.rb check 192.168.20.2:6379
#查看確認(rèn)新加入的slave是否與node06的6380master實(shí)例綁定
#方式二:
[root@node01 ~]# redis-trib.rb add-node --slave --master-id 010752fb2527317a938fcb5b4e73822db805b3a1 192.168.20.7:6382 192.168.20.2:6380
#上述命令指定的ID就是6380實(shí)例的master的ID,直接指定為6380的slave節(jié)點(diǎn)
[root@node01 ~]# redis-trib.rb check 192.168.20.2:6379
#查看群集狀態(tài),可以看到master6380有兩個(gè)slave了,都是上面新加入的slave
刪除主節(jié)點(diǎn)的操作其實(shí)就是把添加主節(jié)點(diǎn)的操作反了過(guò)了,需要先將要?jiǎng)h除的主節(jié)點(diǎn)上的槽點(diǎn)分配給其他master,然后才可以執(zhí)行刪除操作,并且刪除主節(jié)點(diǎn)后,該master對(duì)應(yīng)的slave也將會(huì)隨著slots槽進(jìn)行轉(zhuǎn)移到新的master上。
這里以移除node06上的6380實(shí)例為例。
#移除6380實(shí)例上的槽點(diǎn)
[root@node01 ~]# redis-trib.rb reshard 192.168.20.2:6379 #指定群集監(jiān)聽地址
How many slots do you want to move (from 1 to 16384)? 4096 #輸入要?jiǎng)h除多少槽
What is the receiving node ID? 5cd3d0eec161a7bcc785202397fd8363074ae9c2
#這里指定的是刪除主節(jié)點(diǎn)后,主節(jié)點(diǎn)上的槽分配給誰(shuí)?這里寫了node02的6379實(shí)例的ID
Source node #1:010752fb2527317a938fcb5b4e73822db805b3a1
#這里指定的是要?jiǎng)h除哪個(gè)主節(jié)點(diǎn)?指定的ID是node06上6380實(shí)例的ID
Source node #2:done #輸入done表示結(jié)束
Do you want to proceed with the proposed reshard plan (yes/no)? yes
#輸入“yes”表示確認(rèn)
#移除槽點(diǎn)后,接下來(lái)將6380實(shí)例從群集中移除,如下:
[root@node01 ~]# redis-trib.rb del-node 192.168.20.2:6379 010752fb2527317a938fcb5b4e73822db805b3a1
#上面指定的是6380實(shí)例的ID
至此,6380實(shí)例就被徹底移除群集了,并且原本與之對(duì)應(yīng)的slave也隨著槽點(diǎn)轉(zhuǎn)移到node02也一起成為了node02的slave?,F(xiàn)在查看群集信息,node02的master應(yīng)該是對(duì)應(yīng)了三個(gè)slave。
關(guān)于Redis群集部署應(yīng)該怎么做就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過(guò)小編可以保證其準(zhǔn)確性是絕對(duì)沒問(wèn)題的。希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
網(wǎng)站名稱:Redis群集部署應(yīng)該怎么做
本文URL:http://aaarwkj.com/article44/psohhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站排名、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)