cassandra數(shù)據(jù)庫(kù)遷移與擴(kuò)容
1、先下載cassandra的tgz包,我安裝的是3.9版本的cassandra,下載地址http://www.apache.org/dyn/closer.lua/cassandra/3.9/
2、下載之后解壓
tar zxvf apache-cassandra-3.9-bin.tar.gz
3、配置
進(jìn)入解壓后的cassandra目錄,在conf/cassandra.yaml中設(shè)置datafile,commitlog和saved_caches目錄,其默認(rèn)值分別為:$CASSANDRA_HOME/data/data, $CASSANDRA_HOME/data/commitlog, $CASSANDRA_HOME/data/saved_caches,可以根據(jù)自己要求設(shè)置
本人設(shè)置的是/var/lib/cassandra/data, /var/lib/cassandra/commitlog, /var/lib/cassandra/saved_caches。
新建設(shè)置的這三個(gè)目錄,并將其所有者改成普通用戶
sudo mkdir /var/lib/cassandra/data
sudo mkdir /var/lib/cassandra/commitlog
sudo mkdir /var/lib/cassandra/saved_caches
sudo chown -R ly:ly /var/lib/cassandra/data
sudo chown -R ly:ly /var/lib/cassandra/commitlog
sudo chown -R ly:ly /var/lib/cassandra/saved_caches
之后如果有需要可以配置cassandra的內(nèi)存,在conf下的cassandra-env.sh文件中,MAX_HEAP_SIZE表示最大申請(qǐng)內(nèi)存大小,HEAP_NEW_SIZE表示初始申請(qǐng)內(nèi)存大小,兩者不能單獨(dú)設(shè)置,否則cassandra出錯(cuò)
4、運(yùn)行
全部完成后可以啟動(dòng)cassandra了,在cassandra目錄下運(yùn)行
bin/cassandra
等待,輸入命令
ps -aux | grep cassandra
查看進(jìn)程,當(dāng)出現(xiàn)下圖中5012類似進(jìn)程時(shí),則cassandra啟動(dòng)完畢
圖999
5、啟動(dòng)cql
bin/cqlsh
啟動(dòng)cassandra的cql編輯器,可以使用cql語(yǔ)句操作數(shù)據(jù)庫(kù)(啟用cql的條件是系統(tǒng)安裝了2.7版本及以上的python,如果沒有則不能打開)
6、關(guān)閉cassandra,使用簡(jiǎn)單粗暴的kill命令
kill 5012
7、測(cè)試
使用java編寫簡(jiǎn)單的程序插入數(shù)據(jù)庫(kù),參見http://ju.outofmemory.cn/entry/210437(jdbc連接方式),http://blog.csdn.net/maosijunzi/article/details/42268061(Cassandra.Client方式)
在運(yùn)行時(shí)可能會(huì)出現(xiàn)錯(cuò)誤:
java.lang.ClassNotFoundException:com.google.common.util.concurrent.AsyncFunction
可能是因?yàn)橐蕾嚢蝗脑颍WC以下幾種jar包依賴:
cassandra-driver-core-*.jar
guaua-*.jar
metrics-core-*.jar
netty-all-*.Final.jar
slf4j-api-*.jar
cassandra數(shù)據(jù)庫(kù)遷移(介紹兩種方法)
第一種方式:copy命令
使用方法:適用于數(shù)據(jù)量小的情況下。
使用方式:copy mykeyspace.mytable to ‘/home/db.csv’
這樣就成功的把表mytable以csv的格式導(dǎo)出到了db.csv文件。
然后再另外一個(gè)集群中,建一個(gè)一模一樣的表,然后使用
copy app12345.mytable from ‘/home/db.csv’
就把數(shù)據(jù)導(dǎo)入到了新的庫(kù)中。
不過以上方式僅限于小數(shù)據(jù)量,當(dāng)數(shù)據(jù)量一大,這個(gè)過程會(huì)持續(xù)很久,而且文件也會(huì)很大。
第二種方式:sstableloader工具。
在cassandra的bin目錄下提供了一個(gè)sstableloader工具,這個(gè)工具專門用于把一個(gè)表的sstable文件導(dǎo)入到一個(gè)新的集群中。
假設(shè)你的表是mykeyspace.mytable。你的數(shù)據(jù)存一個(gè)10個(gè)節(jié)點(diǎn)組成的集群中,每個(gè)幾點(diǎn)的數(shù)據(jù)都存在/disk/data1和/disk/data2目錄下。
假設(shè)你的新集群的一個(gè)訪問地址是IP, 先在新集群建離相同名字的keyspace和表結(jié)構(gòu)。
接下來(lái)你只要在老集群的每個(gè)節(jié)點(diǎn)執(zhí)行下面的命令:
bin/sstableloader -d IP -u cassandra -pw cassandra -t 100 /disk/data1/mykeyspace/mytable
bin/sstableloader -d IP -u cassandra -pw cassandra -t 100 /disk/data2/mykeyspace/mytable
其中-u是 用戶名 -pw是密碼 -t是限制流量100M/bps
等所有節(jié)點(diǎn)執(zhí)行完畢,你的表數(shù)據(jù)就成功導(dǎo)入到了新的集群中,當(dāng)然只要你的機(jī)器io和網(wǎng)絡(luò)條件允許,你可以多個(gè)節(jié)點(diǎn)并發(fā)執(zhí)行。
#e#
cassandra如何擴(kuò)容和替換一個(gè)節(jié)點(diǎn)
增加一個(gè)節(jié)點(diǎn)和替換一個(gè)DOWN掉的節(jié)點(diǎn),步驟都是一樣的,只是啟動(dòng)參數(shù)不一樣。
第一:準(zhǔn)備一個(gè)新機(jī)器,cassandra的配置使用和集群中一個(gè)普通節(jié)點(diǎn)相同的配置。
第二:然后就可以啟動(dòng)了,增加一個(gè)節(jié)點(diǎn),只要bin/cassandra 啟動(dòng)就可以了。
如果是替換一個(gè)節(jié)點(diǎn)(假設(shè)DOWN掉的節(jié)點(diǎn)ip=192.168.1.101),啟動(dòng)的時(shí)候,可以使用bin/cassandra -Dcassandra.replace_address=192.168.1.101來(lái)啟動(dòng)(只是第一次這樣,以后就直接bin/cassandra啟動(dòng)就可以了)
第三:就是等待數(shù)據(jù)遷移,當(dāng)你在其它機(jī)器上使用nodetool status看到新節(jié)點(diǎn)的狀態(tài)變成UN狀態(tài)的時(shí)候,就表示遷移完成了。你也可以在新節(jié)點(diǎn)上通過nodetool netstats查看數(shù)據(jù)遷移的進(jìn)度。
注意:如果你的集群數(shù)據(jù)量很大,這個(gè)數(shù)據(jù)遷移的過程將會(huì)給集群帶來(lái)很大的負(fù)載。你需要在啟動(dòng)新節(jié)點(diǎn)之前做兩件事情:
1、關(guān)閉所有節(jié)點(diǎn)的壓縮。
nodetool disableautocompaction 關(guān)閉自動(dòng)壓縮
nodetool stop COMPACTION 停止正在執(zhí)行的壓縮。
當(dāng)新節(jié)點(diǎn)啟動(dòng)之后,也要執(zhí)行nodetool disableautocompaction。
在數(shù)據(jù)遷移完畢之后,再放開即可nodetool enableautocompaction
2、限制所有節(jié)點(diǎn)數(shù)據(jù)遷移流量
./nodetool setstreamthroughput 32
限制為32mbps 假設(shè)你的集群有10個(gè)機(jī)器,那么你的新節(jié)點(diǎn)的流量大約是32*10mbps。
你可以根據(jù)數(shù)據(jù)遷移的進(jìn)度,完成的節(jié)點(diǎn)個(gè)數(shù),慢慢調(diào)大這個(gè)值。
評(píng)論
查看更多