Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
CassandraÑо¿±¨¸æ
 
  2855  次浏览      30
2019-9-11
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁËcassandra°²×°»·¾³ÅäÖ㬴¼¯ÈºµÄ¹ý³Ì£¬CQLµÄʹÓÃÒÔ¼°µÈ£¬Ï£ÍûÄܶÔÄúÓÐËù°ïÖú¡£

1»ù±¾°²×°

1.1ÔÚ»ùÓÚRHELµÄϵͳÖа²×°Cassandra

1.1.1±ØÒªÌõ¼þ

YUM°ü¹ÜÀíÆ÷

Root»òsudoȨÏÞ

JRE6»òÕßJRE7

JNA(Java native Access)£¨Éú²ú»·¾³ÐèÒª£©

1.1.2²½Öè

°²×°ÅäÖÃJRE(ÂÔ)

Ìí¼ÓÈí¼þ°ü²Ö¿âµ½YUMµÄÈí¼þ¿â

½«ÒÔÏÂÄÚÈÝÌí¼Ó½ø/etc/yum.repos.d/datastax.repoÎļþ¼´¿É£º

[datastax]
name = DataStax Repo for ApacheCassandra
baseurl =http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0

°²×°2.0°æ×îеÄÈí¼þ°ü

$ sudo yuminstall dsc20

°²×°JNA

$ sudo yuminstall jna

¾­¹ýÉÏÊö²½Öè¼´°²×°ºÃÁËCassandra£¬Ëæºó±ã¿É¶ÔÆä½øÐÐÅäÖá£ÒÔ´Ë·½Ê½°²×°µÄCassandra»á´´½¨Ò»¸öÃûΪcassandraµÄÓû§£¬cassandraÒÔ´ËÓû§Æô¶¯·þÎñ¡£

1.2ÔÚÈÎÒâ»ùÓÚLinuxµÄϵͳÖа²×°Cassandra

1.2.1±ØÒªÌõ¼þ

JRE6»òÕßJRE7

JNA(Java native Access) £¨Éú²ú»·¾³ÐèÒª£©

1.2.2²½Öè

°²×°ÅäÖÃJRE(ÂÔ)

ÏÂÔØCassandra¶þ½øÖÆ tarball

ÓÉÒ³ÃæÊÖ¹¤ÏÂÔØ¶ÔÓ¦°æ±¾µÄCassandra£¬»òÕßͨ¹ý curl -OLhttp://downloads.datastax.com /community/dsc.tar.gz ÃüÁî×Ô¶¯ÏÂÔØ×îеÄDataStaxCommunity£¬Ò²¿ÉÓÉÒ³ÃæÊÖ¹¤ÏÂÔØ¶ÔÓ¦°æ±¾¡£

½âѹtarball

tar ¨Cxzvf dsc-cassandra-2.0.0-bin.tar.gz

¸ù¾ÝÏÂÔØµÄ°æ±¾Ò²¿ÉÄÜÊÇ£ºtar ¨Cxzvf apache-cassandra-2.0.0-bin.tar.gz

°²×°ÅäÖÃJNA

2 ÏÂÔØjna.jar¡£

2 ½«ÏÂÔØµÄjna.jarÌí¼Ó½øCassandra°²×°Ä¿Â¼µÄlibĿ¼Ï»ò½«ÆäÌí¼Ó½øCLASSPATH»·¾³±äÁ¿ÖÐ

2 ÔÚ/etc/security/limits.confÎļþÖмÓÈëÈçÏÂÐУº

$USER soft memlock unlimited

$USER hard memlock unlimited

ÆäÖÐ$USERΪÔËÐÐcassandraµÄÓû§

´´½¨Êý¾ÝĿ¼ºÍÈÕ־Ŀ¼²¢Ö¸¶¨¸øÓÃÓÚÔËÐÐcassandra·þÎñµÄ¾ßÓÐÏàÓ¦¶ÁдȨÏÞµÄÓû§

$ sudo mkdir/var/lib/cassandra
$ sudo mkdir/var/log/cassandra
$ sudo chown-R $USER: $GROUP /var/lib/cassandra
$ sudo chown-R $USER: $GROUP /var/log/Cassandra

CassandraÅäÖÃÎļþÖÐĬÈÏʹÓÃÉÏÊöĿ¼·Ö±ð×÷ΪÊý¾ÝĿ¼ºÍÈÕ־Ŀ¼£¬¿É´´½¨²»Í¬µÄĿ¼£¬¸³Óè¶ÔÓ¦µÄȨÏÞ£¬²¢ÔÚÅäÖÃÎļþÖÐÖØÐÂÖ¸¶¨ÒԸıäĬÈÏÐÐΪ¡£

ÖÁ´ËÒѰ²×°ºÃÁËCassandra£¬Ëæºó±ã¿É¶ÔÆä½øÐÐÅäÖá£

2¼òµ¥ÅäÖÃ

CassandraµÄÖ÷ÅäÖÃÎļþΪcassandra.yaml£¬ÆäλÖÃËæCassandra°²×°·½Ê½²»Í¬¶ø²»Í¬¡£

¶ÔÓÚCassandraPackage°²×°£º/etc/cassandra/conf

¶ÔÓÚCassandraBinary°²×°£º<install_location>/conf

¶ÔÓÚDataStaxEnterprise Packaged°²×°£º/etc/dse/cassandra

¶ÔÓÚDataStaxEnterpriseBinary°²×°£º<install_location>/resources/cassandra/conf

ÅäÖÃÎļþÖеÄÅäÖòÎÊý±»·ÖΪÈçϼ¸¸ö×é

Initialization properties£º¿ØÖƼ¯ÈºÄڵĽڵãÈçºÎÅäÖ㬰üÀ¨½Úµã¼äͨѶ£¬Êý¾Ý·ÖÇø¼°¸´ÖƲ¼Öá£

Global row and key caches properties£ºÓÃÓÚ»º´æ±íµÄ²ÎÊýµÄÅäÖòÎÊý¡£

Performance tuning properties£ºµ÷ÕûÐÔÄܺÍϵͳ×ÊÔ´µÄÀûÓ㬰üÀ¨ÄÚ´æ¡¢´ÅÅÌI/O¡¢CPU¡¢¶ÁºÍд¡£

Binary and RPC protocol timeout properties£ºÓÃÓÚ¶þ½øÖÆÐ­ÒéµÄ³¬Ê±ÉèÖá£

Remote procedure call tuning£¨RPC£©properties£ºÓÃÓÚÅäÖú͵÷ÕûRPCs£¨¿Í»§¶ËÁ¬½Ó£©

Fault detection properties£ºÓÃÓÚ´¦ÀíÔËÐÐÇé¿ö½Ï²î»òÕßʧ°ÜµÄ½Úµã¡£

Automatic backup properties£ºÓÃÓÚ×Ô¶¯»¯±¸·Ý¡£

Security properties£ºÓÃÓÚ·þÎñÆ÷¶ËºÍ¿Í»§¶ËµÄ°²È«ÉèÖÃ

ÿ¸ö×é°ü¶¼º¬Èô¸É¾ßÌåµÄ²ÎÊý

ÀýÈ磬¶ÔÓÚа²×°µÄCassandra¿ÉÄÜ»áÐÞ¸ÄÅäÖÃÎļþÖеÄÏÂÃæ¼¸¸ö²ÎÊý

data_file_directories£ºÊý¾ÝĿ¼£¬¶ÔÓÚ°ü·½Ê½£¨Èçdeb»òrpm£©°²×°µÄCassandra£¬¸ÃĿ¼»áÔÚ°²×°¹ý³ÌÖÐ×Ô¶¯´´½¨²¢¾ßÓÐÕýÈ·µÄȨÏÞ£¬Ä¬ÈÏλÖÃΪ/var/lib/cassandra/data¡£

commitlog_directory£ºcommit logĿ¼£¬¶ÔÓÚ°ü·½Ê½°²×°µÄCassandra£¬¸ÃĿ¼»áÔÚ°²×°¹ý³ÌÖÐ×Ô¶¯´´½¨²¢¾ßÓÐÕýÈ·µÄȨÏÞ£¬Ä¬ÈÏλÖÃΪ/var/lib/cassandra/commitlog¡£

saved_caches_directory£º±£´æµÄ»º´æÄ¿Â¼£¬¶ÔÓÚ°ü·½Ê½°²×°µÄCassandra£¬¸ÃĿ¼»áÔÚ°²×°¹ý³ÌÖÐ×Ô¶¯´´½¨²¢¾ßÓÐÕýÈ·µÄȨÏÞ£¬Ä¬ÈÏλÖÃΪ/var/lib/cassandra/saved_caches¡£

Èç¹ûÒÔ¶þ½øÖÆ·½Ê½»òÔ´Â뷽ʽ°²×°CassandraÐè×ÔÐд´½¨ÏàӦĿ¼£¬¸³ÓèÕýÈ·µÄȨÏÞ¡£ÓÖ»òÕß²»ÏëʹÓÃĬÈϵÄλÖã¬Ò²¿ÉÒÔ×ÔÐд´½¨ÐµÄĿ¼£¬¸³ÓèÕýÈ·µÄȨÏÞ£¬²¢ÔÚÅäÖÃÎļþÖÐÖ¸¶¨¡£±ÈÈ磺

data_file_directories:/data/cassandra/data
commitlog_directory:/data/cassandra/commitlog
saved_caches_directory:/data/cassandra/saved_caches

ÁíÍ⣬¶ÔÓÚ°ü·½Ê½°²×°µÄCassandra£¬»¹»áÔÚ°²×°¹ý³ÌÖÐ×Ô¶¯´´½¨ /var/log/cassandra Ŀ¼²¢¸³ÓèÕýÈ·µÄȨÏÞ¡£ ĬÈÏÇé¿öÏÂCassandra½«ÆäÈÕ־д½ø¸ÃĿ¼µÄsystem.logÎļþÖС£¿Éͨ¹ýÐÞ¸Älog4j-server.properiesÎļþ £¨Óëcassandra.yamlλÓÚͬһĿ¼£©ÖеÄlog4j.appender.R.FileÀ´¸Ä±äĬÈÏÐÐΪ£¬ ±ÈÈ磺log4j.appender.R.File=/data/cassandra/system.log

»¹¿ÉÄÜÒªÐÞ¸ÄJVM¼¶±ðµÄ²ÎÊý£¬¸Ã²¿·ÖµÄ²ÎÊý¿ÉÔÚcassandra-env.sh Îļþ£¨ Óëcassandra.yamlλÓÚͬһĿ¼£©ÖÐÉèÖá£

3Æô¶¯¼°¼òµ¥Ê¹ÓÃ

3.1Æô¶¯Cassandra

¶ÔÓÚ¶þ½øÖưü°²×°·½Ê½

Ö´ÐÐbin/cassandra¨Cf£¬Ç°Ì¨Æô¶¯cassandra£¬cassandra»á½«ÈÕÖ¾Êä³öµ½±ê×¼Êä³öÖС£ÈôûÔÚÊä³öÖп´µ½¡°error¡±¡¢¡°fatal¡±»òÕßÀàËÆ¡°java stack trace¡±µÄÄÚÈݱíÃ÷cassandra¿ÉÕý³£¹¤×÷¡£¿Éͨ¹ý¡°Control-C¡°Í£Ö¹casandra¡£

Ö´ÐÐbin/cassandra£¬ºǫ́Æô¶¯cassandra¡£

¿Éͨ¹ýkill»òpkillÃüÁîÍ£Ö¹cassandra

¶ÔÓÚYUM°²×°·½Ê½

Ö´ÐÐsudoservice Cassandra startÆô¶¯cassandra

Ö´ÐÐsudoservice Cassandra stop Í£Ö¹cassandra

3.2ʹÓÃcqlsh

Ö´ÐÐbin/cqlsh£¬³öÏÖÈçÏÂÌáʾÔò±íÃ÷Á¬½Ó³É¹¦£¨Ðèpython2.7£©£º

Connected toTest Cluster at localhost:9160.

[cqlsh 4.0.0 |Cassandra 2.0.0 | CQL spec 3.1.0 | Thrift protocol 19.37.0]

Use HELP forhelp.

¿ÉÔÚcqlshÃüÁîÌáʾ·ûÏÂÊäÈëhelp»ò£¿»ñµÃ°ïÖú£¬ÊäÈëexit»òquitÍ˳öcqlsh£¬ÃüÁîĬÈÏÒÔ¡°;¡±½áÊø¡£

²é¿´keyspace

DESCRIBEkeyspaces;

´´½¨keyspace

CREATEKEYSPACE mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy','replication_factor' : 2 };

Çл»keyspace

USE mykeyspace;

´´½¨±í

CREATE TABLEusers (
user_id int PRIMARY KEY,
fname text,
lname text
);

²é¿´±í

DESCRIBETABLES;

²åÈëÊý¾Ý

INSERT INTOusers (user_id, fname, lname)
VALUES (1745, 'john', 'smith');
INSERT INTOusers (user_id, fname, lname)
VALUES (1744, 'john', 'doe');
INSERT INTOusers (user_id, fname, lname)
VALUES (1746, 'john', 'smith');

²éѯÊý¾Ý

SELECT * FROMusers;

½¨Á¢Ë÷ÒýºóʹÓÃWHERE´Ó¾ä²éÕÒ

CREATE INDEXON users (lname);¡¢
SELECT * FROMusers WHERE lname = 'smith';

ɾ³ý±í

DROP TABLEusers;

ÖÁ´ËÒѾ­ÓµÓÐÁ˵¥½ÚµãµÄCassandra£¬ÇÒÄܹ»Í¨¹ýcqlshÁ¬½ÓÖÁcassandra²¢Ê¹ÓÃCQLÖ´ÐвÙ×÷¡£ÏÂÃæ¶ÔCassandra×÷½øÒ»²½½éÉÜ¡£

4´î½¨¼¯Èº

4.1µ¥Êý¾ÝÖÐÐļ¯Èº

4.1.1ǰÖù¤×÷

ÔÚÿ¸ö½ÚµãÉÏ×°ÅäCassandra

Ϊ¼¯ÈºÈ·¶¨Ãû³Æ

»ñȡÿ¸ö½ÚµãµÄIP

È·¶¨ÓÃÀ´×öÖÖ×ӵĽڵ㣨Cassandraͨ¹ýÖÖ×Ó½ÚµãÀ´ÕÒµ½±Ë´Ë²¢Á˽⻷µÄÍØÆË£©

È·¶¨snitch£¨ÓÃÓÚÈ·¶¨Ïò/´ÓÄĸöÊý¾ÝÖÐÐĺÍÍø¼ÜдÈë/¶ÁÈ¡Êý¾Ý¡£Óв»Í¬µÄÀàÐÍ¿ÉÑ¡£©

4.1.2¾ßÌåÅäÖÃ

1.¼Ù¶¨Ê¹ÓÃÒÔÏÂÒѾ­°²×°ÁËCassandraµÄ½ÚµãÅäÖü¯Èº(×ÊÔ´ÓÐÏÞ£¬ÕâÀïÖ»ÓÃÁ½Ì¨»úÆ÷À´ËµÃ÷¹ý³Ì¡£ÕæÊµ»·¾³ÏÂ×îºÃÊÇÓжą̀»úÆ÷£¬ÇÒÒ»¸ö¼¯ÈºÖÐ×îºÃÓÐÒ»¸öÒÔÉϵÄÖÖ×Ó)

node0192.168.83.35 (seed)

node1192.168.83.37

2.¼Ù¶¨½ÚµãËùÔÚ»úÆ÷ÓзÀ»ðǽ£¬×¢Ò⿪·ÅCassandraËùʹÓõĶ˿Ú

3.ÈôCassandraÕýÔËÐÐÔòÏȹرգ¬ºóÇå³ýÊý¾Ý¡£

$ sudo servicecassandra stop

»òÕߣ¨¸ù¾Ý°²×°·½Ê½¶ø²»Í¬£©

$ ps auwx |grep cassandra
$ sudo kill <pid>

4.Çå³ýÊý¾Ý

$ sudo rm -rf/var/lib/cassandra/*

5.ÐÞ¸Äcassandra.yamlÎļþÖеÄÏàÓ¦ÄÚÈÝ

cluster_name:'MyDemoCluster'
num_tokens:256
seed_provider:
- class_name:org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "192.168.83.35"
listen_address:192.168.83.35
rpc_address:0.0.0.0
endpoint_snitch:SimpleSnitch

ÈôÊǽ¨Á¢È«ÐµĻ¹²»°üº¬Êý¾ÝµÄ¼¯ÈºÔò¼ÓÉÏauto_bootstrap:false

6.Ê£Óà½ÚµãµÄÅäÖÃÓë³ýÁËlisten_addressÓ¦µ±Îª×ÔÉíIPÍ⣬ÆäËûÅäÖÃÓëÉÏÊöÏàͬ

7.ÏÈÆô¶¯Öð¸öÆô¶¯seed½Úµã£¬ÔÙÖð¸öÆô¶¯Ê£Óà½Úµã

$ sudo servicecassandra start

»òÕß

$ cd<install_location>
$ bin/Cassandra

8.ʹÓÃnodetoolstatusÃüÁî²é¿´¼¯ÈºÊÇ·ñ³É¹¦ÔËÐÐ

4.2¶àÊý¾ÝÖÐÐļ¯Èº

ÕâÀÊý¾ÝÖÐÐÄÖ¸µÄ¾ÍÊÇÒ»×é½Úµã£¬Óë¸´ÖÆ×éÊÇͬÒå´Ê¡£¶àÊý¾ÝÖÐÐļ¯ÈºÖУ¬Êý¾Ý¿ÉÒÔÔÚ²»Í¬Êý¾ÝÖÐÐļä×Ô¶¯¡¢Í¸Ã÷¸´ÖÆ¡£

4.2.1ǰÖù¤×÷

Óëµ¥½Úµã¼¯ÈºÅäÖûù±¾Ïàͬ£¬²»Í¬µÄÊÇ»¹ÐèҪȷ¶¨Êý¾ÝÖÐÐĺÍÍø¼ÜµÄÃüÃû¡£

4.2.2¾ßÌåÅäÖÃ

1.¼Ù¶¨ÔÚÒÔÏÂÒѾ­°²×°ÁËCassandraµÄ½ÚµãÅäÖü¯Èº

node0 192.168.83.35(seed1)
node1 192.168.83.36
node2 192.168.83.37
node3 192.180.83.35(seed2)
node4 192.180.83.36
node5 192.168.83.37

2.ÈôÈç·À»ðǽ£¬ÔòÏÈ¿ª·ÅÏàÓ¦¶Ë¿Ú£¨Í¬ÉÏ£©

3.ÈôCassandraÕýÔËÐÐÔòÏȹرգ¨Í¬ÉÏ£©

4.Çå³ýÊý¾Ý£¨Í¬ÉÏ£©

5.ÐÞ¸Äcassandra.yamlÎļþÖеÄÏàÓ¦ÄÚÈÝ

¡­Í¬ÉÏ¡­

endpoint_snitch:PropertyFileSnitch

ÈôÊǽ¨Á¢È«ÐµĻ¹²»°üº¬Êý¾ÝµÄ¼¯ÈºÔò¼ÓÉÏauto_bootstrap:false

6.Ê£Óà½ÚµãµÄÅäÖÃÓë³ýÁËlisten_addressÓ¦µ±Îª×ÔÉíIPÍ⣬ÆäËûÅäÖÃÓëÉÏÊöÏàͬ

7.²½Öè5ÖÐÖ¸¶¨endpoint_snitchΪPropertyFileSnitchËùÒÔÒª±à¼­¶ÔÓ¦µÄcassandra-topologies.propertiesÅäÖÃÎļþ£¨Èôendpoint_snitchÖ¸¶¨ÎªGossipingPropertyFileSnitchÔòÒª±à¼­cassandra-rackdc.properties£¬Ö¸¶¨ÎªYamlFileNetworkTopologySnitchÔòÒª±à¼­cassandra-topology.yaml£©

# CassandraNode IP=Data Center:Rack
192.168.83.35=DC1:RAC1
192.168.83.36=DC2:RAC1
192.168.83.37=DC1:RAC1
192.180.83.35 =DC2:RAC1
192.180.83.36=DC1:RAC1
192.168.83.37=DC2:RAC1

Ö®ºó»¹ÒªÎªÎ»ÖõĽڵãÉèÖÃÒ»¸öĬÈϵÄÊý¾ÝÖÐÐĺÍÍø¼ÜÃû

# default forunknown nodes
default=DC1:RAC1

8.Öð¸öÆô¶¯ÖÖ×ӽڵ㣬֮ºóÖð¸öÆô¶¯Ê£Óà½Úµã£¨Í¬ÉÏ£©

9.ÑéÖ¤»·ÊÇ·ñ³É¹¦Æô¶¯£¨Í¬ÉÏ£©

5ʹÓÃCQL

CQL:CassandraQuery Language

¼¤»îCQL£ºcqlsh¡¢DataStaxJava Driver¡¢Thrift·½·¨ set_cql_version¡¢PythonÇý¶¯ÖеÄconnect()µ÷Óá£

ʹÓÃcqlsh

bin/cqlsh hostport ¨Cu username ¨Cp password

´´½¨keyspace

keyspaceΪ±íÃüÃû¿Õ¼ä£¬Ö¸Ã÷½ÚµãÖÐÊý¾ÝÈçºÎ¸´ÖÆ£¬Ò»°ãÒ»¸öÓ¦ÓöÔÓ¦Ò»¸ö keyspace¡£cassandraÖеĸ´ÖÆ¿ØÖÆÒÔµ¥¸ökeyspaceΪ»ù´¡¡£

CREATEKEYSPACE demodb WITH REPLICATION =
{'class' : 'SimpleStrategy','replication_factor': 3};

classÖ¸Ã÷¸´ÖƲßÂÔ£¬replication_factorÖ¸Ã÷¸´ÖƵķÝÊý

ʹÓÃkeyspace

USE demodb;

¸üÐÂkeyspace

ALTER KEYSPACEdemodb WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 2};
ALTER KEYSPACEdemodb WITH REPLICATION ={'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2': 2};

Ö®ºóÔÚÿ¸öÊÜÓ°ÏìµÄ½ÚµãÖ´ÐÐnodetoolrepair demodb

´´½¨±í

use demodb
CREATE TABLEusers (
user_name varchar,
password varchar,
gender varchar,
session_token varchar,
state varchar,
birth_year bigint,
PRIMARY KEY (user_name));

ʹÓø´ºÏprimary key´´½¨±í

CREATE TABLEemp (
empID int,
deptID int,
first_name varchar,
last_name varchar,
PRIMARY KEY (empID, deptID));

²åÈëÊý¾Ý

INSERT INTOemp (empID, deptID, first_name, last_name) VALUES (104, 15, 'jane', 'smith');

²éѯ±í£¨ÒÔϵͳ±íΪÀý£©

systemÊÇCassandraµÄϵͳ¿â£¬µ±Ç°º¬schema_keyspaces¡¢local¡¢ peers¡¢schema_columnsºÍschema_columnfamilies¼¸¸ö±í£¬·Ö±ð°üº¬keyspaceÐÅÏ¢£¬±¾µØ½ÚµãÐÅÏ¢¡¢¼¯Èº½ÚµãÐÅÏ¢¡¢columnsÐÅÏ¢ºÍcolumnfamiliesÐÅÏ¢

use system

SELECT * from schema_keyspaces;»ñÈ¡µ½µ±Ç°½ÚµãÖеÄeyspace

SELECT * FROMpeers»ñÈ¡½ÚµãËùÔÚ¼¯ÈºÐÅÏ¢

ÌáÈ¡²¢ÅÅÐò²éѯ½á¹û

SELECT * FROMemp WHERE empID IN (103,104) ORDER BY deptID DESC;

ʹÓÃkeyspaceÏÞ¶¨·û

¾­³£Ê¹ÓÃUSE keyspacenameÀ´Çл»keyspace¿ÉÄܲ»·½±ã£¬¿ÉʹÓÃkeyspaceÏÞ¶¨·ûÖ¸¶¨±íËùÊôµÄkeyspace£¬Èç

SELECT * fromsystem.schema_keyspaces;

¿ÉÔÚALTER TABLEC¡¢REATE TABLE¡¢DELETE¡¢INSERT¡¢ SELECT¡¢TRUNCATE¡¢UPDATEÖÐʹÓÃ

Ö¸¶¨columnµÄ¹ýÆÚʱ¼ä

INSERT INTOemp (empID, deptID, first_name, last_name) VALUES (105, 17, 'jane', 'smith')USING TTL 60;

ÆäÖÐUSING TTL 60Ö¸Ã÷¸ÃÌõÊý¾Ý60Ãëºó¹ýÆÚ£¬½ìʱ»á±»×Ô¶¯É¾³ý¡£ÁíÍâÖ¸¶¨ÁËTTLµÄÊý¾Ýcolumns»áÔÚcompactionºÍrepair²Ù×÷Öб»×Ô¶¯É¾³ý¡£Ö¸¶¨TTL»áÓÐ8×Ö½Ú¶îÍ⿪Ïú¡£

²éѯ¹ýÆÚʱ¼ä

SELECT TTL(last_name)from emp;

¸üйýÆÚʱ¼ä

INSERT INTOemp (empID, deptID, first_name, last_name) VALUES (105, 17, 'miaomiao', 'han')USING TTL 3600;Ò²¼´£¬ÒÔеÄTTLÖØ²åÒ»±éÊý¾Ý¼´¿É¡££¨Ö¸¶¨²åÈëµÄÕûÌõÊý¾ÝµÄ¹ýÆÚʱ¼ä£©

»òÕßUPDATA emp USINGTTL 3600 SET last_name= 'han' where empid=105 and deptid=17; £¨Ö¸¶¨setÖ¸Ã÷µÄÊý¾ÝµÄ¹ýÆÚʱ¼ä£©

²éѯдÈëʱ¼ä

SELECTWRITETIME(first_name) from emp;¿É²éµÄ¸ÃÊý¾ÝºÎʱ±»²åÈë¡£

Ìí¼Ócolumns

ALTER TABLEemp ADD address varchar;

¸ü¸ÄcolumnÊý¾ÝÀàÐÍ

ALTER TABLEemp ALTER address TYPE text;

ÒÆ³ýÊý¾Ý

2 Ö¸¶¨¹ýÆÚʱ¼ä£¨Í¬ÉÏ£©

2 ɾ³ýtable»òkeyspace

DROP TABLE table_name

DROP KEYSPACE keyspace_name;

2 ɾ³ýcolumnsºÍrows

DELETE last_name FROM emp WHEREempid=104 and deptid=15;

DELETE FROM emp WHERE empid=104 anddeptid=15;

ʹÓÃcollectionÀàÐÍ

2 setÀàÐÍ

CREATE TABLE users (
user_id text PRIMARY KEY,
first_name text,
last_name text,
emails set<text>
);
n INSERT INTO users (user_id, first_name, last_name, emails) VALUES('frodo','Frodo', 'Baggins', {'f@baggins.com', 'baggins@gmail.com'});
n UPDATE users SET emails = emails + {'fb@friendsofmordor.org'} WHEREuser_id = 'frodo';
n UPDATE users SET emails = emails - {'fb@friendsofmordor.org'} WHEREuser_id = 'frodo';
n UPDATE users SET emails = {} WHERE user_id = 'frodo';
n DELETE emails FROM users WHERE user_id = 'frodo';

2 listÀàÐÍ

n ALTER TABLE users ADD top_places list<text>;
n UPDATE users SET top_places = [ 'rivendell', 'rohan' ] WHERE user_id= 'frodo';
n UPDATE users SET top_places = [ 'the shire' ] + top_places WHEREuser_id = 'frodo';
n UPDATE users SET top_places = top_places + [ 'mordor' ] WHEREuser_id = 'frodo';
n UPDATE users SET top_places[2] = 'riddermark' WHERE user_id ='frodo';
n DELETE top_places[3] FROM users WHERE user_id = 'frodo';
n UPDATE users SET top_places = top_places - ['rivendell'] WHEREuser_id = 'frodo';

2 mapÀàÐÍ

n ALTER TABLE users ADD todo map<timestamp, text>;
n UPDATE users SET todo =
{ '2012-9-24' : 'entermordor',
'2012-10-2 12:00' : 'throwring into mount doom' }
WHERE user_id = 'frodo';
n UPDATE users SET todo['2012-10-2 12:00'] = 'throw my precious intomount doom'WHERE user_id = 'frodo';
n INSERT INTO users (user_id,todo) VALUES ('miaohan', { '2013-9-22 12:01' : 'birthday wishes to Bilbo', '2013-10-1 18:00' : 'Check into Inn of Prancing Pony' });
n DELETE todo['2012-9-24'] FROM users WHERE user_id = 'frodo';
n UPDATE users USING TTL 60 SET todo['2012-10-1'] = 'find water' WHEREuser_id = 'frodo';

×¢£»¿ÉΪÉÏÊöÈýÖÖ¼¯ºÏÀàÐ͵Äÿ¸öÔªËØÉèÖõ¥¶ÀµÄ¹ýÆÚʱ¼ä¡£

´´½¨ºÍʹÓÃË÷Òý

CREATE INDEXlast_name_key ON users(last_name);
SELECT * FROMusers WHERE last_name = 'Baggins'£¨Ðè´´½¨ÁËË÷Òý²ÅÄÜÔÚWHEREÖÐʹÓøÃÁнøÐвéѯ£¬ÔÝÎÞ¶àÁÐË÷Òý£¬ÐèÖðÁзֱð½¨Á¢Ë÷Òý£©

ÇáÁ¿¼¶ÊÂÎñ

ʹÓÃIF´Ó¾äʵÏÖ

n INSERT INTO emp(empid,deptid,address,first_name,last_name) VALUES(102,14,'luoyang','Jane Doe','li') IF NOT EXISTS;
n UPDATE emp SET address = 'luoyang' WHERE empid = 103 and deptid = 16IF last_name='zhang';

ʹÓÃcounter

ÓÃÓÚ¼ÇÂ¼ÌØ¶¨Ê±¼ä»ò´¦ÀíµÄ´ÎÊý¡£¶ÔÓ¦µÄcolumnÐèʹÓÃcounterÊý¾ÝÀàÐÍ£¬¸ÃÀàÊý¾ÝÒ»°ã´æ´¢ÓÚרÃŵıíÖУ¬ÇÒʹÓÃUPDATEÔØÈë²¢Ôö¼õcounterÖµ£¬²»Ê¹ÓÃINSERT²åÈëcounterÖµ¡£Ö»ÄÜÔÚÔ­ÊýÖµµÄ»ù´¡ÉÏÔö¼õ£¬²»ÄÜΪֱ½ÓÖ¸¶¨Ò»¸öÊýÖµ¡£

CREATEKEYSPACE counterks WITH REPLICATION = { 'class' : 'SimpleStrategy','replication_factor' : 3 };
CREATE TABLEcounterks.page_view_counts
(counter_valuecounter,
url_name varchar,
page_name varchar,
PRIMARY KEY (url_name, page_name)
);
UPDATEcounterks.page_view_counts
SET counter_value = counter_value + 1
WHERE url_name='www.datastax.com' ANDpage_name='home';

ÈôÔ­À´²»´æÔÚWHEREÌõ¼þÖÐÖ¸¶¨µÄÄÚÈÝ£¬¸ÃÌõÓï¾ä»á½«±íÖеÄurl_nameÖµÖÃΪ'www.datastax.com'½«page_nameÖÃΪ¡¯home¡¯,½«counter_valueÖ¸¶¨ÎªÄ¬Èϳõʼֵ0¼Ó1¡£ÈôWHEREÌõ¼þÖÐÖ¸¶¨µÄÄÚÈÝ´æÔÚ£¬Ôò½«counter_valueÖÃΪԭÀ´µÄcounter_value¼Ó1

UPDATEcounterks.page_view_counts
SET counter_value = counter_value + 2
WHERE url_name='www.baidu.com' ANDpage_name='map';

 

6°²È«

Èý·½Ã氲ȫ²ßÂÔ

Client-to-node/node-to-node¼ÓÃÜ£¨SSL£©£º¼ÓÃÜ´«ÊäµÄÊý¾Ý

»ùÓڵǼÕË»§/ÃÜÂëµÄÈÏÖ¤£ºÈ·¶¨Ë­¿ÉÒÔʹÓÃÊý¾Ý¿â

¶ÔÏóÊÚȨ¹ÜÀí£ºÈ·¶¨Óû§¿ÉÔÚÔÚÊý¾Ý¿âÉϸÉʲô

6.1 SSL¼ÓÃÜ

6.1.1Client-to-node

×¼±¸Ö¤Êé

Ϊÿ¸ö½Úµã²úÉú˽Կ/¹«Ô¿¶Ô

keytool-genkey -alias cassandra_vms00780 -keystore ~/keys/.keystore

µ¼³ö¹«Ô¿²¿·Öµ½µ¥¶ÀµÄÖ¤ÊéÎļþ£¬²¢¿½±´¸ÃÎļþµ½ÆäËûËùÓнڵã

keytool-export -alias cassandra_vms00780 -file ~keys/cassandra_vms00780.cer -keystore ~/keys/.keystore

½«Ã¿¸ö½ÚµãµÄÖ¤ÊéÌí¼Óµ½ËùÓнڵãµÄÐÅÈοâÖÐ

keytool-import -v -trustcacerts -alias cassandra_vms00780 -file cassandra_vms00780.cer¨Ckeystore ~/keys/ .truststore

±£Ö¤½«.keystoreºÍtruststoreÎļþ·Ö·¢µ½ËùÓнڵã

È·ÈÏ.keystoreÎļþÖ»¶ÔCassandradaemon¿É¶Á

±à¼­ÅäÖÃÎļþ

ÅäÖÃcassandra.yamlÎļþÖÐclient_encryption_options²¿·ÖµÄ²ÎÊý

client_encryption_options:
enabled: true
keystore: ~keys/.keystore## .keystore file·¾¶
keystore_password:<keystore password> ## ²úÉúkeystoreʱÓõÄÃÜÂë
truststore: ~keys/.truststore
truststore_password:<truststore password>
require_client_auth:<true or false>

6.1.2node-to-node

×¼±¸Ö¤Êé

ͬÉÏ

±à¼­ÅäÖÃÎļþ

ÅäÖÃcassandra.yamlÎļþÖÐserver_encryption_options²¿·ÖµÄ²ÎÊý

server_encryption_options:
internode_encryption: <internode_option:all/none/dc/rack>
keystore: ~keys/.keystore
keystore_password: <keystore password>
truststore:~keys/.truststore
truststore_password: <truststorepassword>
require_client_auth: <true or false>

6.1.3ÔÚcqlshÖÐʹÓÃSSL

¿ÉÔÚÖ÷Ŀ¼ÒÀ¾ÝÑùÀýÎļþcqlshrc.sample´´½¨.cqlshrcÎļþ

[authentication]
username = cassandra
password = cassandra
[connection]
hostname = localhost
port = 9160
factory =cqlshlib.ssl.ssl_transport_factory
[ssl]
certfile =~/keys/cassandra.cer
validate = true
[certfiles]
192.168.1.3 =~/keys/cassandra01.cert
192.168.1.4 =~/keys/cassandra02.cert

6.2ÄÚ²¿ÈÏÖ¤

»ùÓÚCassandra¿ØÖƵĵǼÕË»§ºÍÃÜÂë

ÈÏÖ¤ÓõĵǼÃûºÍ¾­bcryptÉ¢ÁеÄÃÜÂë´æ´¢ÓÚ system_auth.credentials±íÖÐ

6.2.1ÅäÖÃ

µÚÒ»²½

ÈôҪʹÓûùÓÚÓû§Ãû/ÃÜÂëµÄÈÏÖ¤»úÖÆ£¬ÐèÒªÏÈÅäÖà cassandra.yamlÎļþÖÐauthenticatorµÄֵΪ PasswordAuthenticator£¨¸Ã²ÎÊýĬÈÏֵΪAllowAllAuthenticator£¬¼´£¬²»½øÐÐÈκÎÈÏÖ¤£©¡£ÕâÑùcassandra »áÔÚsystem_auth.user´´½¨Ò»¸ö³¬¼¶Óû§£¬ Óû§ÃûºÍÃÜÂë¾ùΪcassandra¡£Ö®ºó£¬ ÅäÖÃsystem_authÕâ¸ökeyspaceµÄ replication factorΪ½Ï´óµÄÖµ £¨Ïê¼ûµÚ5ÕÂʹÓô´½¨¡¢¸üÐÂkeyspace²¿·ÖµÄÄÚÈÝ£©

ÈÏÖ¤Óï¾ä

ALTER USER

ALTER USERuser_name WITH PASSWORD 'password' (NOSUPERUSER| SUPERUSER)

×¢£ºSUPERUSER¿É¸ü¸ÄÆäËûÓû§µÄÃÜÂëºÍSUPERUSER״̬ (NOSUPERUSER»ò SUPERUSER)£¬µ«²»Äܸıä×Ô¼ºµÄSUPERUSER״̬¡£ÆÕͨÓû§Ö»Äܸü¸Ä×Ô¼ºµÄÃÜÂë¡£

CREATE USER

CREATE USERuser_name WITH PASSWORD 'password' (NOSUPERUSER| SUPERUSER)

Ö»ÓÐSUPERUSER¿É´´½¨Óû§£¬´´½¨µÄÓû§Ä¬ÈÏΪNOSUPERUSER

DROP USER

DROP USER user_name

Ö»ÓÐSUPERUSER¿Éɾ³ýÓû§£¬Óû§²»ÄÜ×Ô¼ºÉ¾³ý×Ô¼º¡£

LIST USERS

LIST USERS£¨ÎªÊ²Ã´Ã»Óнá¹û£¿£¿£¿£©

ÁгöÓû§

¸ü¸ÄĬÈÏSUPERUSER

ʹÓÃĬÈÏSUPERUSERÒ²¼´cassandraµÇ¼

./cqlsh -ucassandra -p Cassandra

н¨ÁíÒ»SUPERUSER£¬Ö®ºóɾ³ýÔ­cassandraSUPERUSER

create userus_yanzhaozhang with password 'cassandra' superuser;
drop usercassandra;

ÖØÆôcassandra£¬Ê¹ÓÃеÄSUPERUSERµÇ¼£¬Ö´ÐкóÐø²Ù×÷¡£

6.2.2ʹÓÃcqlshµÇ¼

ÈôʹÓÃcqlshµÇ¼£¬¿É½«ÈÏÖ¤ÐÅÏ¢´æ´¢ÓÚ.cqlshrcÎı¾Îļþ£¬·ÅÖÃÔÚÓû§Ö÷Ŀ¼ÖУ¬ÒÔÃâÖØ¸´Â¼ÈëµÇ¼ÐÅÏ¢¡£×¢Òâ¶Ô¸ÃÎı¾ÎļþÉèÖöÔÓ¦µÄȨÏÞÒÔ·ÀÐÅϢй¶¡£

[authentication]
username = example_username
password = example_password

6.3ÄÚ²¿ÊÚȨ

¶ÔÏóȨÏÞ¹ÜÀí»ùÓÚÄÚ²¿ÊÚȨ£¬Óë¹ØÏµÐÍÊý¾Ý¿âGRANT/REVOKEÓï·¨ÀàËÆ¡£

Ê×ÏÈÒªÅäÖÃcassandra.yamlÖÐauthorizerµÄֵΪCassandraAuthorizer (ĬÈÏΪAllowAllAuthorizer£¬ ÔÊÐíÈκÎÓû§µÄÈκζ¯×÷)£¬É趨Ϊ¸ÃÖµºó»á½«ÊÚȨÐÅÏ¢´æ´¢ÔÚ system_auth.permissions±íÖС£

Ö®ºó£¬ÅäÖÃsystem_authÕâ¸ökeyspaceµÄreplicationfactorΪ½Ï´óµÄÖµ¡£

ͨ¹ýÉèÖÃpermissions_validity_in_msÑ¡Ïîµ÷ÕûȨÏÞÓÐЧÆÚ¡£

Óï·¨

GRANTpermission_name PERMISSION

| ( GRANT ALLPERMISSIONS ) ON resource TO user_name

REVOKE (permission_name PERMISSION )

| ( REVOKE ALLPERMISSIONS )

ON resourceFROM user_name

LISTpermission_name PERMISSION

| ( LIST ALLPERMISSIONS )

ON resource OF user_name

NORECURSIVE

ÆäÖÐpermission_nameΪ

ALL

ALTER

AUTHORIZE

CREATE

DROP

MODIFY

SELECT

resourceΪ

ALL KEYSPACES

KEYSPACE keyspace_name

TABLE keyspace_name.table_name

6.4ÅäÖ÷À»ðǽ¶Ë¿Ú·ÃÎÊ

ÐèÔÚ·À»ðǽ²ßÂÔÖпª·Åһ϶˿Ú

¹«¹²¶Ë¿Ú

n 22 ssh¶Ë¿Ú

n 8888 OpsCenter website¶Ë¿Ú

Cassandra½Úµã¼ä¶Ë¿Ú

n 1024+ JMX reconnection/loopback¶Ë¿Ú

n 7000 Cassand¼¯ÈºÄÚ½Úµã¼äͨѶ¶Ë¿Ú

n 7199 Cassandra JMX ¼à¿Ø¶Ë¿Ú

n 9160 Cassandra¿Í»§¶Ë¶Ë¿Ú

Cassandra OpsCenter ¶Ë¿Ú

n 61620 OpsCenter¼à¿Ø¶Ë¿Ú

n 61621 OpsCenter´úÀí¶Ë¿Ú

7¼Ü¹¹

7.1¹£¸Å

µã¶Ôµã·Ö²¼Ê½ÏµÍ³£¬¼¯ÈºÖи÷½ÚµãƽµÈ£¬Êý¾Ý·Ö²¼ÓÚ¼¯ÈºÖи÷½Úµã£¬¸÷½Úµã¼äÿÃë½»»»Ò»´ÎÐÅÏ¢¡£Ã¿¸ö½ÚµãµÄcommit log²¶»ñд²Ù×÷À´È·±£Êý¾Ý³Ö¾ÃÐÔ¡£Êý¾ÝÏȱ»Ð´Èëmemtable-ÄÚ´æÖеÄÊý¾Ý½á¹¹£¬´ý¸Ã½á¹¹ÂúºóÊý¾Ý±»Ð´ÈëSSTable-Ó²ÅÌÖеÄÊý¾ÝÎļþ¡£ËùÓеÄдÄÚÈݱ»×Ô¶¯ÔÚ¼¯ÈºÖзÖÇø²¢¸´ÖÆ¡£

CassandraÊý¾Ý¿âÃæÏòÐС£ÊÚȨÓû§¿ÉÁ¬½ÓÖÁÈÎÒâÊý¾ÝÖÐÐĵÄÈÎÒâ½Úµã£¬²¢Í¨¹ýÀàËÆSQLµÄCQL²éѯÊý¾Ý¡£¼¯ÈºÖУ¬Ò»¸öÓ¦ÓÃÒ»°ã°üº¬Ò»¸ökeyspace£¬Ò»¸ökeyspaceÖаüº¬¶à¸ö±í¡£

¿Í»§¶ËÁ¬½Óµ½Ä³Ò»½Úµã·¢Æð¶Á»òдÇëÇóʱ£¬¸Ã½Úµã³äµ±¿Í»§¶ËÓ¦ÓÃÓëÓµÓÐÏàÓ¦Êý¾ÝµÄ½Úµã¼äµÄЭµ÷Õß(coordinator£©ÒÔ¸ù¾Ý¼¯ÈºÅäÖÃÈ·¶¨»·ÖеÄÄĸö½Úµãµ±»ñÈ¡Õâ¸öÇëÇó¡£

¹Ø¼ü´Ê

Gossip£ºµã¶ÔµãͨÐÅЭÒ飬ÓÃÒÔCassandra¼¯ÈºÖнڵã¼ä½»»»Î»ÖúÍ״̬ÐÅÏ¢¡£

Partitioner£º¾ö¶¨ÈçºÎÔÚ¼¯ÈºÖеĽڵã¼ä·Ö·¢Êý¾Ý£¬Ò²¼´ÔÚÄĸö½Úµã·ÅÖÃÊý¾ÝµÄµÚÒ»¸öreplica¡£

Replica placement strategy£º¾ö¶¨ÔÚÄÄЩ½Úµã·ÅÖÃÊý¾ÝµÄÆäËûreplica¡£CassandraÔÚ¼¯ÈºÖеĶà¸ö½Úµã´æ´¢Êý¾ÝµÄ¶à·Ý¿½±´-replicasÀ´È·±£¿É¿¿ºÍÈÝ´í¡£

Snitch£º¶¨ÒåÁ˸´ÖƲßÂÔÓÃÀ´·ÅÖÃreplicasºÍ·ÓÉÇëÇóËùʹÓõÄÍØÆËÐÅÏ¢

cassandra.yamlÎļþ£ºCassandraÖ÷ÅäÖÃÎļþ

system:CassandraµÄϵͳkeyspace£¬´æ·Åtable¡¢keyspaceµÄÊôÐÔÐÅÏ¢µÈ¡£¶øÊôÐÔÐÅÏ¢¿Éͨ¹ýCQL»òÆäËûÇý¶¯ÉèÖá£

7.2½Úµã¼äͨÐÅ

CassandraʹÓõã¶ÔµãͨѶЭÒégossipÔÚ¼¯ÈºÖеĽڵã¼ä½»»»Î»ÖúÍ״̬ÐÅÏ¢¡£gossip½ø³ÌÿÃëÔËÐÐÒ»´Î£¬ÓëÖÁ¶à3¸öÆäËû½Úµã½»»»ÐÅÏ¢£¬ÕâÑùËùÓнڵã¿ÉºÜ¿ìÁ˽⼯ȺÖÐµÄÆäËû½ÚµãÐÅÏ¢¡£

ÅäÖÃgossip£¨ÔÚcassandra.ymalÖÐÉèÖã©

cluster_name:½ÚµãËùÊô¼¯ÈºÃû£¬¼¯ÈºÖÐÿ¸ö½ÚµãÓ¦Ïàͬ¡£

listen_address£º¹©ÆäËû½ÚµãÁ¬½ÓÖÁ¸Ã½ÚµãµÄIPµØÖ·»òÖ÷»úÃû£¬µ±ÓÉlocalhostÉèΪ¹«¹²µØÖ·¡£

seed_provider£º¶ººÅ·Ö¸ôµÄIPµØÖ·£¨ÖÖ×ÓÁÐ±í£©£¬gossipͨ¹ýÖÖ×Ó½Úµãѧϰ»·µÄÍØÆË£¬¼¯ÈºÖи÷½ÚµãÖÖ×ÓÁÐ±íµ±Ïàͬ¡£¶àÊý¾ÝÖÐÐļ¯ÈºÖÐÿ¸öÊý¾ÝÖÐÐĵÄÖÖ×ÓÁÐ±íµ±ÖÁÉÙ°üº¬Ò»¸ö¸ÃÖÐÐÄÄڵĽڵ㡣

storage_port£º½Úµã¼äͨѶ¶Ë¿Ú£¬¼¯ÈºÖи÷½Úµãµ±Ò»Ö¡£

initial_token£ºÓÃÓÚsingle-node-per-token½á¹¹£¬½ÚµãÔÚ»·¿Õ¼äÖ»ÓµÓÐÒ»¶ÎÁ¬ÐøµÄtoken·¶Î§¡£

num_tokens£ºÓÃÓÚvirtual nodes£¬¶¨ÒåÁ˽ڵãÔÚ»·¿Õ¼äËùÓµÓеÄËæ»ú·ÖÅäµÄtokenÊýÄ¿¡£

ʧ°Ü¼ì²âÓë»Ö¸´

gossip¿É¼ì²âÆäËû½ÚµãÊÇ·ñÕý³£ÒÔ±ÜÃ⽫ÇëÇó·ÓÉÖÁ²»¿É´ï»òÕßÐÔÄܲîµÄ½Úµã£¨ºóÕßÐèÅäÖÃΪdynamic snitch·½¿É£©¡£

¿Éͨ¹ýÅäÖÃphi_convict_thresholdÀ´µ÷Õûʧ°Ü¼ì²âµÄÃô¸Ð¶È¡£

¶ÔÓÚʧ°ÜµÄ½Úµã£¬ÆäËû½Úµã»áͨ¹ýgossip¶¨ÆÚÓëÖ®ÁªÏµÒԲ鿴ÊÇ·ñ»Ö¸´¶ø·Ç¼òµ¥½«Ö®ÒƳý¡£ÈôÐèÇ¿ÖÆÌí¼Ó»òÒÆ³ý¼¯ÈºÖнڵãÐèʹÓÃnodetool¹¤¾ß¡£

Ò»µ©Ä³½Úµã±»±ê¼ÇΪʧ°Ü£¬Æä´í¹ýµÄд²Ù×÷»áÓÐÆäËûreplicas´æ´¢Ò»¶Îʱ¼ä£¨Ð迪Æôhinted handoff£¬Èô½Úµãʧ°ÜµÄʱ¼ä³¬¹ýÁËmax_hint_window_in_ms£¬´í¹ýµÄд²»ÔÙ±»´æ´¢¡££©DownµôµÄ½Úµã¾­¹ýÒ»¶Îʱ¼ä»Ö¸´ºóÐèÖ´ÐÐrepair²Ù×÷£¬Ò»°ãÔÚËùÓнڵãÔËÐÐnodetool repairÒÔÈ·±£Êý¾ÝÒ»Ö¡£

7.3Êý¾Ý¸´Öƺͷַ¢

CassandraÖзַ¢¡¢¸´ÖÆÍ¬Ê±½øÐС£Cassandra±»Éè¼ÆÎªµã¶Ôµãϵͳ£¬»á´´½¨Êý¾ÝµÄ¶à¸ö¸±±¾´æ´¢ÔÚ¼¯ÈºÖеÄÒ»×é½ÚµãÖС£CassandraÖÐÊý¾Ý±»×é֯Ϊ±í£¬ÓÉprimary key±êʶ£¬primary key¾ö¶¨Êý¾Ý½«±»´æ´¢ÔÚÄĸö½Úµã¡£

ÐèÖ¸¶¨µÄÄÚÈÝ

Virtual nodes£ºÖ¸¶¨Êý¾ÝÓëÎïÀí½ÚµãµÄËùÊô¹ØÏµ

Partitioner£ºÔÚ¼¯ÈºÄÚ»®·ÖÊý¾Ý

Replicationstrategy£º¾ö¶¨ÈçºÎ´¦ÀíÿÐÐÊý¾ÝµÄreplicas

Snitch£º¶¨Òåreplicationstrategy·ÅÖÃÊý¾ÝµÄreplicasʱʹÓõÄÍØÆËÐÅÏ¢

Ò»ÖÂÐÔ¹þÏ£

±íÖÐÿÐÐÊý¾ÝÓÉprimary key±êʶ£¬CassandraΪÿ¸öprimarykey·ÖÅäÒ»¸öhashÖµ£¬¼¯ÈºÖÐÿ¸ö½ÚµãÓµÓÐÒ»¸ö»ò¶à¸öhashÖµÇø¼ä¡£ÕâÑù±ã¿É¸ù¾Ýprimary key¶ÔÓ¦µÄhashÖµ½«¸ÃÌõÊý¾Ý·ÅÔÚ°üº¬¸ÃhashÖµµÄhashÖµÇø¼ä¶ÔÓ¦µÄ½ÚµãÖС£

ÐéÄâ½Úµã

ʹÓÃÐéÄâ½ÓµçÊÓÊý¾ÝÔÚ¼¯ÈºÖеķֲ¼

Èô²»Ê¹ÓÃÐéÄâ½ÚµãÔòÐèÊÖ¹¤Îª¼¯ÈºÖÐÿ¸ö½Úµã¼ÆËãºÍ·ÖÅäÒ»¸ötoken¡£Ã¿¸ötoken¾ö¶¨Á˽ڵãÔÚ»·ÖеÄλÖÃÒÔ¼°½ÚµãÓ¦µ±³Ðµ£µÄÒ»¶ÎÁ¬ÐøµÄÊý¾ÝhashÖµµÄ·¶Î§¡£ÈçÉÏͼÉϰ벿·Ö£¬Ã¿¸ö½Úµã·ÖÅäÁËÒ»¸öµ¥¶ÀµÄtoken´ú±í»·ÖеÄÒ»¸öλÖã¬Ã¿¸ö½Úµã´æ´¢½«row keyÓ³ÉäΪhashÖµÖ®ºóÂäÔڸýڵãÓ¦µ±³Ðµ£µÄΨһµÄÒ»¶ÎÁ¬ÐøµÄhashÖµ·¶Î§ÄÚµÄÊý¾Ý¡£Ã¿¸ö½ÚµãÒ²°üº¬À´×ÔÆäËû½ÚµãµÄrowµÄ¸±±¾¡£¶øÊÇÓÃÐéÄâ½ÚµãÔÊÐíÿ¸ö½ÚµãÓµÓжà¸ö½ÏСµÄ²»Á¬ÐøµÄhashÖµ·¶Î§¡£ÈçÉÏͼÖÐϰ벿·Ö£¬¼¯ÈºÖеĽڵãÊÇÓÃÁËÐéÄâ½Úµã£¬ÐéÄâ½ÚµãËæ»úÑ¡ÔñÇÒ²»Á¬Ðø¡£Êý¾ÝµÄ´æ·ÅλÖÃÒ²ÓÉrow keyÓ³Éä¶øµÃµÄhashֵȷ¶¨£¬µ«ÊÇÊÇÂäÔÚ¸üСµÄ·ÖÇø·¶Î§ÄÚ¡£

ʹÓÃÐéÄâ½ÚµãµÄºÃ´¦

ÎÞÐèΪÿ¸ö½Úµã¼ÆËã¡¢·ÖÅätoken

Ìí¼ÓÒÆ³ý½ÚµãºóÎÞÐèÖØÐÂÆ½ºâ¼¯Èº¸ºÔØ

ÖØ½¨ËÀµôµÄ½Úµã¸ü¿ì

¸ÄÉÆÁËÔÚͬһ¼¯ÈºÊ¹ÓÃÒìÖÖ»úÆ÷

Êý¾Ý¸´ÖÆ

CassandraÔÚ¶à¸ö½ÚµãÖдæ·ÅreplicasÒÔ±£Ö¤¿É¿¿ÐÔºÍÈÝ´íÐÔ¡£ replicationstrategy¾ö¶¨·ÅÖÃreplicasµÄ½Úµã¡£ replicasµÄ×ÜÊýÓɸ´ÖÆÒò×Ó- replication factorÈ·¶¨£¬±ÈÈçÒò×ÓΪ2´ú±íÿÐÐÓÐÁ½·Ý¿½±´£¬Ã¿·Ý¿½±´´æ´¢ÔÚ²»Í¬µÄ½ÚµãÖС£ËùÓеÄreplicasÎÞÖ÷´ÓÖ®·Ö¡£replication factorͨ³£²»Äܳ¬¹ý¼¯ÈºÖнڵã×ÜÊý¡£È»¶ø£¬¿ÉÏÖÔö¼Óreplication factoÖ®ºóÔÚ½«½ÚµãÔöÖÁÆÚÍûµÄÊýÁ¿¡£ µ±replication facto³¬¹ý×ܽáµãÊýʱ£¬Ð´²Ù×÷±»¾Ü¾ø£¬µ«¶Á²Ù×÷¿É½øÐУ¬Ö»ÒªÂú×ãÆÚÍûµÄÒ»ÖÂÐÔ¼¶±ð¡£

µ±Ç°ÓÐÁ½ÖÖ¿ÉÓõĸ´ÖƲßÂÔ£º

SimpleStrategy£º½öÓÃÓÚµ¥Êý¾ÝÖÐÐÄ£¬½«µÚÒ»¸öreplica·ÅÔÚÓÉ partitionerÈ·¶¨µÄ½ÚµãÖУ¬ÆäÓàµÄreplicas·ÅÔÚÉÏÊö½Úµã˳ʱÕë·½ÏòµÄºóÐø½ÚµãÖС£

NetworkTopologyStrategy£º¿ÉÓÃÓڽϸ´ÔӵĶàÊý¾ÝÖÐÐÄ¡£¿ÉÒÔÖ¸¶¨ÔÚÿ¸öÊý¾ÝÖÐÐÄ·Ö±ð´æ´¢¶àÉÙ·Ýreplicas¡£ÔÚÿ¸öÊý¾ÝÖÐÐÄ·ÅÖÃreplicasµÄ·½Ê½ÀàËÆÓÚSimpleStrategy£¬µ«ÇãÏòÓÚ½«replicas·ÅÔÚ²»Í¬rack£¬ÒòΪͬһrackµÄ½ÚµãÇãÏòÓÚͬʱʧ°Ü¡£ÅäÖÃÿ¸öÊý¾ÝÖÐÐÄ·Ö±ð·ÅÖöàÉÙreplicasʱҪ¿¼ÂÇÁ½¸öÖ÷Òª·½Ã棺(1)¿ÉÂú×ã±¾µØ¶Á¶ø·Ç¿çÊý¾ÝÖÐÐĶÁ£»(2)ʧ°Ü³¡¾°¡£Á½ÖÖ³£ÓõÄÅäÖ÷½Ê½Îª(1)ÿ¸öÊý¾ÝÖÐÐÄÁ½·Ýreplicas£¬(2)ÿ¸öÊý¾ÝÖÐÐÄ3·Ýreplicas¡£µ±È»£¬ÓÃÓÚÌØÊâÄ¿µÄµÄ·Ç¶Ô³ÆÅäÖÃÒ²ÊÇ¿ÉÒԵ쬱ÈÈçÔÚ¶Á²Ù×÷½ÏƵ·±µÄÊý¾ÝÖÐÐÄÅäÖÃ3·Ýreplicas¶øÔÚÓÃÓÚ·ÖÎöµÄÊý¾ÝÖÐÐÄÅäÖÃÒ»·Ýreplicas¡£

¸´ÖƲßÂÔÔÚ´´½¨keyspaceʱָ¶¨£¬Èç

CREATEKEYSPACE Excelsior WITH REPLICATION = { 'class' : 'SimpleStrategy','replication_factor' : 3 };

CREATEKEYSPACE "Excalibur" WITH REPLICATION = {'class' :'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2};

ÆäÖÐdc1¡¢dc2ÕâЩÊý¾ÝÖÐÐÄÃû³ÆÒªÓësnitchÖÐÅäÖõÄÃû³ÆÒ»Ö¡£

7.4Partitioners

ÔÚCassandraÖУ¬tableµÄÿÐÐÓÉΨһµÄprimarykey±êʶ£¬partitionerʵ¼ÊÉÏΪһhashº¯ÊýÓÃÒÔ¼ÆËãprimary keyµÄtoken¡£CassandraÒÀ¾ÝÕâ¸ötokenÖµÔÚ¼¯ÈºÖзÅÖöÔÓ¦µÄÐС£

ÈýÖÖpartitioner(ÔÚcassandra.yamlÖÐÉèÖÃ)

Murmur3Partitioner£ºµ±Ç°µÄĬÈÏÖµ£¬ÒÀ¾ÝMurmurHash¹þÏ£ÖµÔÚ¼¯ÈºÖоùÔÈ·Ö²¼Êý¾Ý¡£

RandomPartitioner£ºÒÀ¾ÝMD5¹þÏ£ÖµÔÚ¼¯ÈºÖоùÔÈ·Ö²¼Êý¾Ý¡£

ByteOrderedPartitioner£ºÒÀ¾ÝÐÐkeyµÄ×Ö½Ú´Ó×ÖÃæÉÏÔÚ¼¯ÈºÖÐ˳Ðò·Ö²¼Êý¾Ý¡££¨²»ÍƼöʹÓã©

Murmur3PartitionerºÍRandomPartitionerʹÓÃtokenÏòÿ¸ö½ÚµãÖ¸ÅɵÈÁ¿µÄÊý¾Ý´Ó¶ø½« keyspaceÖеıí¾ùÔÈ·Ö²¼ÔÚ»·ÖУ¬¼´Ê¹²»Í¬µÄ±íʹÓò»Í¬µÄprimary key¡£¶ÁдÇëÇó¾ù±»¾ùÔȵķֲ¼¡£ ByteOrderedPartitionerÔÊÐíͨ¹ýprimary key˳ÐòɨÃ裨¿Éͨ¹ýindex´ïµ½Í¬ÑùÄ¿µÄ£©£¬µ«ÒÑÒýÆðÈçÏÂÎÊÌâ(1)½Ï¸´ÔӵĸºÔؾùºâ£¬(2)˳ÐòµÄдÒ×µ¼ÖÂÈȵ㣬(3)¶à±í²»¾ùÔȵĸºÔؾùºâ¡£

×¢Ò⣺ÈôʹÓÃÐéÄâ½Úµã(vnodes)ÔòÎÞÐèÊÖ¹¤¼ÆËãtokens¡£ Èô²»Ê¹ÓÃÐéÄâ½ÚµãÔò±ØÐëÊÖ¹¤¼ÆËãtokens ½«ËùµÃµÄÖµÖ¸Åɸøcassandra.ymalÖ÷ÅäÖÃÎļþÖеÄinitial_token²ÎÊý¡£

7.5Snitches

Ìá¹©ÍøÂçÍØÆËÐÅÏ¢£¬ÓÃÒÔÈ·¶¨Ïò/´ÓÄĸöÊý¾ÝÖÐÐÄ»òÕßÍø¼ÜдÈë/¶ÁÈ¡Êý¾Ý¡£

×¢Ò⣺(1)ËùÓнڵãÐèÓÃÏàͬµÄsnitch;(2)¼¯ÈºÖÐÒѲåÈëÊý¾ÝºóÓɸü¸ÄÁËsnitchÔòÐèÔËÐÐÒ»´Îfullrepair¡£

Dynamic snitching

¼à¿Ø´Ó²»Í¬replica¶Á²Ù×÷µÄÐÔÄÜ£¬Ñ¡ÔñÐÔÄÜ×îºÃµÄreplica¡£dynamic snitchĬÈÏ¿ªÆô£¬ËùÓÐÆäËûsnitch»áĬÈÏʹÓÃdynamic snitch ²ã¡£

SimpleSnitch

ĬÈÏÖµ£¬ÓÃÓÚµ¥Êý¾ÝÖÐÐIJ¿Ê𣬲»Ê¹ÓÃÊý¾ÝÖÐÐĺÍÍø¼ÜÐÅÏ¢¡£Ê¹ÓøÃֵʱkeyspace¸´ÖƲßÂÔÖÐΨһÐèÖ¸¶¨µÄÊÇreplication factor

RackInferringSnitch

¸ù¾ÝÊý¾ÝÖÐÐĺÍÍø¼ÜÈ·¶¨½ÚµãλÖ㬶øÊý¾ÝÖÐÐļ°Íø¼ÜÐÅÏ¢ÓÖÓнڵãµÄIPµØÖ·Òþº¬Ö¸Ê¾¡£

PropertyFileSnitch

¸ù¾ÝÊý¾ÝÖÐÐĺÍÍø¼ÜÈ·¶¨½ÚµãλÖ㬶øÍøÂçÍØÆËÐÅÏ¢ÓÖÓÉÓû§¶¨ÒåµÄÅäÖÃÎļþ cassandra-topology.properties »ñÈ¡¡£ ÔÚ½ÚµãIPµØÖ·¸ñʽ²»Í³Ò»ÎÞ·¨Òþº¬Ö¸Ê¾Êý¾ÝÖÐÐļ°Íø¼ÜÐÅÏ¢»òÕ߸´Ôӵĸ´ÖÆ×éÖÐʹÓøÃÖµ¡£Ðè×¢ÒâµÄÊÇ£º( 1)ÅäÖÃÎļþÖÐÊý¾ÝÖÐÐÄÃûÐèÓëkeyspaceÖи´ÖƲßÂÔÖÐÖ¸¶¨µÄÊý¾ÝÖÐÐÄÃû³ÆÒ»Ö£» (2)ÅäÖÃÎļþÖÐÐè°üº¬¼¯ÈºÖÐÈÎÒ»½Úµã£» £¨3£©¼¯ÈºÖи÷½ÚµãÄÚcassandra-topology.propertiesÅäÖÃÎļþÐèÏàͬ¡£

GossipingPropertyFileSnitch

ÔÚcassandra-rackdc.propertiesÅäÖÃÎļþÖж¨Òå±¾½ÚµãËùÊôµÄÊý¾ÝÖÐÐĺÍÍø¼Ü£¬ ÀûÓÃgossipЭÒéÓëÆäËû½Úµã½»»»¸ÃÐÅÏ¢¡£Èô´ÓPropertyFileSnitchÇÐÖÁ¸ÃÖµ£¬ÔòÐèÖð½ÚµãÖð´Î¸üÐÂֵΪ GossipingPropertyFileSnitchÒÔÈ·±£gossipÓÐʱ¼ä´«²¥ÐÅÏ¢¡£

EC2Snitch

ÓÃÓÚ²¿ÊðÔÚAmazon EC2ÖÐÇÒËùÓнڵãÔÚµ¥¸öÇøÓòÖеļ¯Èº¡£

EC2MultiRegionSnitch

ÓÃÓÚ²¿ÊðÔÚAmazonEC2ÖУ¬ÇÒ½Úµã¿ç¶à¸öÇøÓòµÄ¼¯Èº¡£

7.6¿Í»§¶ËÇëÇó

clientÁ¬½ÓÖÁ½Úµã²¢·¢³öread/writeÇëÇóʱ£¬ ¸Ãnode³äµ±client¶ËÓ¦ÓÃÓë°üº¬ÇëÇóÊý¾ÝµÄ½Úµã (»òreplica)Ö®¼äµÄЭµ÷Õߣ¬ËüÀûÓÃÅäÖõÄpartitionerºÍreplicaplacement²ßÂÔÈ·¶¨ÄǸö½Úµãµ±»ñÈ¡ÇëÇó¡£

7.6.1дÇëÇó

Эµ÷Õß(coordinator)½«writeÇëÇó·¢Ë͵½ÓµÓжÔÓ¦rowµÄËùÓÐreplica½Úµã£¬ Ö»Òª½Úµã¿ÉÓñã»ñÈ¡²¢Ö´ÐÐдÇëÇó¡£Ð´Ò»ÖÂÐÔ¼¶±ð(write consistency level)È·¶¨ÒªÓжàÉÙ¸ö replica½Úµã±ØÐë·µ»Ø³É¹¦µÄÈ·ÈÏÐÅÏ¢¡£³É¹¦Òâζ×ÅÊý¾Ý±»ÕýȷдÈëÁË commit log¸ömemtable¡£

ÉÏÀýΪµ¥Êý¾ÝÖÐÐÄ£¬11¸ö½Úµã£¬¸´ÖÆÒò×ÓΪ3£¬Ð´Ò»ÖÂÐԵȼ¶ÎªONEµÄдÇé¿ö¡£

7.6.2¶àÊý¾ÝÖÐÐĵÄдÇëÇó

»ù±¾Í¬ÉÏ£¬µ«»áÔÚ¸÷Êý¾ÝÖÐÐÄ·Ö±ðÑ¡ÔñÒ»¸öЭµ÷ÕßÒÔ ´¦Àí¸ÃÊý¾ÝÖÐÐÄÄÚµÄдÇëÇó¡£ÓëclientÖ±½ÓÁ¬½ÓµÄ coordinator½ÚµãÖ»Ð轫дÇëÇó·¢Ë͵½Ô¶³ÌÊý¾ÝÖÐÐĵÄcoordinatorÒ»¸ö½Úµã¼´¿É£¬ Ê£ÓàµÄÓɸÃcoordinatorÍê³É¡£ÈôÒ»ÖÂÐÔ¼¶±ðÉèÖÃΪONE»òÕßLOCAL_QUORUMÔò½öÓëÖ±½ÓЭµ÷ÕßλÓÚͬһÊý¾ÝÖÐÐĵĽڵãÐè·µ»Ø³É¹¦È·ÈÏ¡£

ÉÏÀýΪ˫µ¥Êý¾ÝÖÐÐÄ£¬¸÷11¸ö½Úµã£¬¸´ÖÆÒò×ÓΪ6£¬Ð´Ò»ÖÂÐԵȼ¶ÎªONEµÄдÇé¿ö¡£

7.6.3¶ÁÇëÇó

Ö±½Ó¶ÁÇëÇó

ºǫ́¶ÁÐÞ¸´ÇëÇó

ÓëÖ±½Ó¶ÁÇëÇóÁªÏµµÄreplicaÊýÄ¿ÓÉÒ»ÖÂÐÔ¼¶±ðÈ·¶¨¡£ºǫ́¶ÁÐÞ¸´ÇëÇó±»·¢Ë͵½Ã»ÓÐÊÕµ½Ö±½Ó¶ÁÇëÇóµÄ¶îÍâµÄreplica£¬ÒÔÈ·±£ÇëÇóµÄrowÔÚËùÓÐreplicaÉÏÒ»Ö¡£

Эµ÷ÕßÊ×ÏÈÓëÒ»ÖÂÐÔ¼¶±ðÈ·¶¨µÄËùÓÐreplicaÁªÏµ£¬±»ÁªÏµµÄ½Úµã·µ»ØÇëÇóµÄÊý¾Ý£¬Èô¶à¸ö½Úµã±»ÁªÏµ£¬ÔòÀ´×Ô¸÷replicaµÄrow»áÔÚÄÚ´æÖÐ×÷±È½Ï£¬Èô²»Ò»Ö£¬ÔòЭµ÷ÕßʹÓú¬×îÐÂÊý¾ÝµÄreplicaÏòclient·µ»Ø½á¹û¡£

ͬʱ£¬Ð­µ÷ÕßÔÚºǫ́ÁªÏµºÍ±È½ÏÀ´×ÔÆäÓàÓµÓжÔÓ¦rowµÄreplicaµÄÊý¾Ý£¬Èô²»Ò»Ö£¬»áÏò¹ýʱµÄreplica·¢Ð´ÇëÇóÓÃ×îеÄÊý¾Ý½øÐиüС£ÕâÒ»¹ý³Ì½Ðread repair¡£

ÉÏÀýΪµ¥Êý¾ÝÖÐÐÄ£¬11¸ö½Úµã£¬¸´ÖÆÒò×ÓΪ3£¬Ò»ÖÂÐÔ¼¶±ðΪQUORUMµÄ¶ÁÇé¿ö¡£

8Êý¾Ý¿âÄÚ²¿

8.1Êý¾Ý¹ÜÀí

ʹÓÃÀàËÆLog-StructuredMerge TreeµÄ´æ´¢½á¹¹£¬¶ø·ÇµäÐ͵ĹØÏµÐÍÊý¾Ý¿âʹÓõÄB-Tree½á¹¹¡£´æ´¢ÒýÇæÁ¬ÐøµÄ½«Êý¾ÝÒÔ×·¼ÓµÄģʽдÎï´ÅÅ̲¢³ÖÐø´æ´¢Êý¾Ý¡£½Úµã¼ä/ÄڵIJÙ×÷²¢ÐÐÔËÐС£Òò²»Ê¹ÓÃB-Tree¹ÊÎÞÐèЭͬ¿ØÖÆ£¬ÔÚдʱ²»±ØÖ´ÐиüС£CassandraÔÚSSDÖÐÐÔÄܱíÏÖ¼«¼Ñ¡£

¸ßÍÌÍÂÁ¿ºÍµÍÑÓ³Ù

²Ù×÷²¢ÐÐÔËÐУ¬ÍÌÍÂÁ¿ºÍÑÓ³ÙÏ໥¶ÀÁ¢¡£log-structuredÉè¼Æ±ÜÃâѯÅÌ¿ªÏú¡£È¥³ýon-diskÊý¾ÝÐ޸ģ¬Ê¡Ê±ÇÒÑÓ³¤SSDÊÙÃü¡£ÎÞon-diskÐ͵ÄÊý¾ÝÐ޸ĹÊÎÞÐèËø¶¨Ð´ÇëÇóÕâÑùµÄЭͬ¿ØÖÆ¡£ÎÞÖ÷¡¢´Ó£¬ÔÚËùÓнڵãÔËÐÐͬÑùµÄ´úÂë¡£

µ¥¶ÀµÄ±íĿ¼

/var/lib/cassandra/data/ks1/cf1 /ks1-cf1-ja-1-Data.db

ÆäÖÐ/var/lib/cassandra/data/Ϊcassandra.yamlÖÐÖ¸¶¨µÄÊý¾ÝÎļþĿ¼¡£ks1ΪkeyspaceÃûcf1/ΪcolumnfamiliesÃû¡£ÕâÑù¿É½«±íÁ¬½ÓÖÁÑ¡¶¨µÄÄ¿±êλÖÃÒÔ±ãÓÚ½«»îÔ¾µÄ±íÒÆµ½¸ü¿ìµÄ´æ´¢½éÖÊ£¬»òÕß½«±í·Ö²»µ½¶à¸ö¿ÉÓõĴ洢É豸ÒÔ¾ùºâ¸ºÔØ

8.2¹ØÓÚд

¸´ÖƵĽÇÉ«

ͨ¹ýÔÚ¶à¸öͬ¼¶½Úµã´´½¨Êý¾ÝµÄ¶à¸ö¸±±¾±£Ö¤¿É¿¿ÐÔºÍÈÝ´í¡£±íÊǷǹØÏµÐ͵ģ¬ÎÞÐè¹ý¶à¶îÍ⹤×÷À´Î¬»¤¹ØÁªµÄ±íµÄÍêÕûÐÔ£¬Òò´Ëд²Ù×÷½Ï¹ØÏµÐÍÊý¾Ý¿â¿ìºÜ¶à¡£

д¹ý³Ì

ÏȽ«Êý¾Ýд½øÄÚ´æÖеÄÊý¾Ý½á¹¹memtable£¬Í¬Ê±×·¼Óµ½´ÅÅÌÖеÄcommitlogÖС£±íʹÓõÄÔ½¶à£¬¶ÔÓ¦µÄmemtableÓ¦Ô½´ó£¬cassandra¶¯Ì¬µÄΪmemtable·ÖÅäÄڴ棬Ҳ¿É×Ô¼ºÊÖ¹¤Ö¸¶¨¡£memtableÄÚÈݳ¬³öÖ¸¶¨ÈÝÁ¿ºómemtableÊý¾Ý£¨°üÀ¨Ë÷Òý£©±»·Å½ø½«±»Ë¢Èë´ÅÅ̵ĶÓÁУ¬¿Éͨ¹ýmemtable_flush_queue_sizeÅäÖöÓÁг¤¶È¡£Èô½«±»Ë¢Èë´ÅÅ̵ÄÊý¾Ý³¬³öÁ˶ÓÁг¤¶È£¬cassandra»áËø¶¨Ð´¡£memtable±íÖеÄÊý¾ÝÓÉÁ¬ÐøµÄI/OË¢½ø´ÅÅÌÖеÄSSTable£¬Ö®ºócommit log±»Çå¿Õ¡£Ã¿¸ö±íÓжÀÁ¢µÄmemtableºÍSSTable¡£

8.3¹ØÓÚ¸üС¢É¾³ýºÍhinted handoff writes

¸üУ¨cassandraÖвåÈëÖØ¸´µÄprimarykeyÒ²±»¿´×öÊǸüвÙ×÷£©

²»Ö±½ÓÔÚ´ÅÅÌÖÐÔ­µØ¸üжøÊÇÏÈÔÚmemtable½øÐÐËùÓеĸüС£×îºó¸üÐÂÄÚÈݱ»Ë¢Èë´ÅÅÌ´æ´¢ÔÚеÄSSTableÖУ¬½öµ±columnµÄʱ¼ä´Á±È¼È´æµÄcolumn¸üÐÂʱ²Å¸²¸ÇÔ­À´µÄÊý¾Ý¡£

ɾ³ý

²»»áÁ¢¼´´Ó´ÅÅÌÒÆ³ýɾ³ýµÄÊý¾Ý

±»É¾³ýµÄÊý¾Ý»á±»tombstone±ê¼ÇÒÔÖ¸¶¨Æä״̬£¬Ëü»á´æÔÚÒ»¶¨µÄʱ¼ä £¨ÓÉgc_grace_secondsÖ¸¶¨£©£¬³¬³ö¸Ãʱ¼äºócompaction½ø³ÌÓÀ¾Ãɾ³ý¸Ãcolumn¡£

Èô²»ÀýÐÐÐÔµÄÖ´Ðнڵãrepair²Ù×÷£¬±»É¾³ýµÄcolumn¿ÉÄÜÖØÐ³öÏÖ

Èôɾ³ýÆÚ¼ä½Úµãdownµô£¬±»±ê¼ÇΪtombstoneµÄcolumn»á·¢ËÍÐźŸøCassandraʹÆäÖØ·¢É¾³ýÇëÇó¸ø¸Ãreplica½Úµã¡£ÈôreplicaÔÚgc_grace_secondsÆÚ¼ä¸´»î£¬»á×îÖÕÊܵ½É¾³ýÇëÇó£¬ÈôreplicaÔÚgc_grace_secondsÖ®ºó¸´»î£¬½Úµã¿ÉÄÜ´í¹ýɾ³ýÇëÇ󣬶øÔÚ½Úµã»Ö¸´ºóÁ¢¼´É¾³ýÊý¾Ý¡£Ð趨ÆÚÖ´ÐнڵãÐÞ¸´²Ù×÷À´±ÜÃâɾ³ýÊý¾ÝÖØÏÖ¡£

hinted handoff writes

ÔÚ²»ÒªÇóÒ»ÖÂÐÔʱȷ±£Ð´µÄ¸ß¿ÉÓã¬ÔÚcassandra.yamlÖпªÆô¸Ã¹¦ÄÜ¡£Ö´ÐÐwrite²Ù×÷ʱÈôÓµÓжÔÓ¦rowµÄreplica downµôÁË»òÕßÎÞ»ØÓ¦£¬ÔòЭµ÷Õß»áÔÚ±¾µØµÄsystem.hints±íÖд洢һ¸öhint£¬Ö¸Ê¾¸Ãд²Ù×÷ÐèÔÚ²»¿ÉÓõÄreplica»Ö¸´ºóÖØÐÂÖ´ÐС£Ä¬ÈÏhints±£´æ3Сʱ£¬¿Éͨ¹ýmax_hint_window_in_ms¸Ä±ä¸ÃÖµ¡£

ÌáʾµÄwrite²»¼ÆÈëconsistencylevelÖеÄONE£¬QUORUM»òALL£¬µ«¼ÆÈëANY¡£ ANYÒ»ÖÂÐÔ¼¶±ð¿ÉÈ·±£cassandraÔÚËùÓÐreplica²»¿ÉÓÃʱÈԿɽÓÊÜwrite£¬²¢ÇÒÔÚÊʵ±µÄreplica¿ÉÓÃÇÒÊÕµ½hintÖØ·Åºó¸Ãwrite²Ù×÷¿É¶Á¡£

ÒÆ³ý½Úµãºó½Úµã¶ÔÓ¦µÄhints×Ô¶¯ÒƳý£¬É¾³ý±íºó¶ÔÓ¦µÄhintsÒ²»á±»ÒƳý¡£

ÈÔÐ趨ÆÚÖ´ÐÐrepair£¨±ÜÃâÓ²¼þ¹ÊÕÏÔì³ÉµÄÊý¾Ý¶ªÊ§£©

8.4¹ØÓÚ¶Á

´ÓSSD²¢ÐÐËæ»ú¶ÁÈ¡£¬ÑÓʱ¼«µÍ£¨²»ÍƼöcassandraʹÓÃתÅÌʽӲÅÌ£©¡£ ÒÔpartition key¶Á/д£¬Ïû³ýÁ˹ØÏµÐÍÊý¾Ý¿âÖи´ÔӵIJéѯ¡£

¶ÁSSTable

Ê×Ïȼì²éBloom filter£¬Ã¿¸öSSTable¶¼ÓÐÒ»¸öBloomfilter £¬ÓÃÒÔÔÚ½øÐÐÈκδÅÅÌI/Oǰ¼ì²éÇëÇóµÄ partition key¶ÔÓ¦µÄÊý¾ÝÔÚSSTableÖдæÔڵĿÉÄÜÐÔ¡£ ÈôÊý¾ÝºÜ¿ÉÄÜ´æÔÚ£¬Ôò¼ì²é Partition key cache(Cassandra ±ípartition indexµÄ»º´æ)£¬Ö®ºó¸ù¾ÝindexÌõÄ¿ÊÇ·ñÔÚcacheÖÐÕÒµ½¶øÖ´Ðв»Í¬²½Ö裺

ÕÒµ½

´Ócompression offset mapÖвéÕÒÓµÓжÔÓ¦Êý¾ÝµÄѹËõ¿ì¡£

´Ó´ÅÅÌÈ¡³öѹËõµÄÊý¾Ý£¬·µ»Ø½á¹û¼¯¡£

δÕÒµ½

ËÑË÷Partition summary£¨partition indexµÄÑù±¾¼¯£©È·¶¨indexÌõÄ¿ÔÚ´ÅÅÌÖеĽüËÆÎ»Öá£

´Ó´ÅÅÌÖÐSSTableÄÚÈ¡³öindexÌõÄ¿¡£

´Ócompression offset mapÖвéÕÒÓµÓжÔÓ¦Êý¾ÝµÄѹËõ¿ì¡£

´Ó´ÅÅÌÈ¡³öѹËõµÄÊý¾Ý£¬·µ»Ø½á¹û¼¯¡£

»Ø¹Ë²åÈë/¸üÐÂÊý¾Ý

¶ÁµÄ¹ý³Ì

ÓÉinsert/update¹ý³Ì¿ÉÖª£¬readÇëÇóµ½´ïijһ½Úµãºó£¬±ØÐë½áºÏËùÓаüº¬ÇëÇóµÄrowÖеÄcolumnµÄSSTableÒÔ¼°memtableÀ´²úÉúÇëÇóµÄÊý¾Ý¡£

ÀýÈ磬Ҫ¸üаüº¬Óû§Êý¾ÝµÄij¸örowÖеÄemail ÁУ¬cassandra²¢²»ÖØÐ´Õû¸örowµ½ÐµÄÊý¾ÝÎļþ£¬¶ø½ö½ö½«ÐµÄemailд½øÐµÄÊý¾ÝÎļþ£¬usernameµÈÈÔ´¦ÓھɵÄÊý¾ÝÎļþÖС£ÉÏͼÖкìÏß±íʾCassandraÐèÒªÕûºÏµÄrowµÄƬ¶ÎÓÃÒÔ²úÉúÓû§ÇëÇóµÄ½á¹û¡£Îª½ÚÊ¡CPUºÍ´ÅÅÌI/O£¬Cassandra»á»º´æºÏ²¢ºóµÄ½á¹û£¬ÇÒ¿ÉÖ±½ÓÔÚ¸ÃcacheÖиüÐÂrow¶ø²»ÓÃÖØÐºϲ¢¡£

8.5¹ØÓÚÊÂÎñºÍЭͬ¿ØÖÆ

²»Ö§³ÖRDBMSÖоßÓлعöºÍËø¶¨»úÖÆµÄACIDÊÂÎñ£¬µ«ÌṩÁËÒ»¶¨³Ì¶ÈµÄÔ­×ÓÐÔ£¨Ðм¶£©¡¢¸ôÀëÐÔ£¨Ðм¶£©¡¢³Ö¾ÃÐÔºÍeventual/tunable ÀàÐ͵ÄÒ»ÖÂÐÔ£¨Òò²»Ö§³ÖÁ¬½ÓºÍÍâ¼ü£¬¹Ê²»ÌṩACID³¡¾°ÏµÄÒ»ÖÂÐÔ£©¡£

Ô­×ÓÐÔ

row-level£¬¶ÔÒ»¸örowµÄ²åÈë/¸üб»µ±×öÒ»¸öÔ­×Ó²Ù×÷¡£²»Ö§³ÖҪô¶¼×öҪô¶¼²»×öµÄ¶àÐвåÈë/¸üС£²»Ö§³ÖÔÚÒ»¸öreplicaÉÏwrite³É¹¦¶øÔÚÆäËûreplicaÉÏwriteʧ°ÜµÄ»Ø¹ö¡£ÓÃʱ¼ä´ÁÈ·¶¨columnµÄ×îиüС£Èô¶à¸ösessionͬʱ¸üÐÂͬÑùµÄcolumnÔòʹÓÃ×î½üµÄ¸üС£

Ò»ÖÂÐÔ

l TuneableÒ»ÖÂÐÔ

ÌṩpartitionÈÝ´í¡£Óû§¿ÉÒÔÒÔµ¥¸ö²Ù×÷Ϊ»ù´¡¾ö¶¨Ðè¶àÉÙ¸ö½Úµã½ÓÊÕDML²Ù×÷»òÏìÓ¦SELECT²Ù×÷¡£

l LinearizableÒ»ÖÂÐÔ

l ÇáÁ¿ÊÂÎñ(compare-and-set)µÄһϵÁиôÀë¼¶±ð¡£ ÔÚtuneableÒ»ÖÂÐÔ²»×ãÒÔÂú×ãÒªÇóʱʹÓ㬠ÈçÖ´ÐÐÎÞ¼ä¶ÏµÄÏà¼Ì²Ù×÷»òͬʱ/²»Í¬Ê±ÔËÐÐÒ»¸ö²Ù×÷²úÉúͬÑùµÄ½á¹û¡£ Cassandra2.0ʹÓÃÀàËÆ2-phase commit µÄPaxos consensusЭÒéʵÏÖ LinearizableÒ»ÖÂÐÔ¡£ £¨ÎªÖ§³Ö¸ÃÒ»ÖÂÐÔÒýÈëÁËSERIALÀàÐ͵Äconsistency level¼°ÔÚCQLÖÐʹÓÃÁË´øIF´Ó¾äµÄÇáÁ¿ÊÂÎñ£©

¸ôÀëÐÔ

Cassandra2.0¿ªÊ¼Ö§³Örow-levelµÄ¸ôÀëÐÔ¡£¶ÔÐеÄд²Ù×÷ÔÚÍê³É֮ǰ¶ÔÆäËûÓû§²»¿É¼û¡£

³Ö¾ÃÐÔ

ͬʱ½«Êý¾ÝдÈëÄÚ´æÖеÄmemtable¼°´ÅÅÌÖеÄcommit log¡£·þÎñÆ÷¹ÊÕÏʱÈômemtableÉÐδˢÈë´ÅÅÌ£¬ÔÚ¹ÊÕϻָ´ºó¿ÉÖØ·Åcommit log»Ö¸´¶ªÊ§Êý¾Ý¡£ÕâÌṩÁ˱¾µØ³Ö¾ÃÐÔ¡£Êý¾ÝÔÚÆäËû½ÚµãµÄ¸±±¾¼ÓÇ¿Á˳־ÃÐÔ¡£

ÇáÁ¿ÊÂÎñ

Cassandra2.0ÖÐÒýÈ룬ÃÖ²¹TuneableÒ»ÖÂÐÔ¡£

n INSERT INTO emp(empid,deptid,address,first_name,last_name) VALUES(102,14,'luoyang','Jane Doe','li') IF NOT EXISTS;
n UPDATE emp SET address = 'luoyang' WHERE empid = 103 and deptid = 16IF last_name='zhang';

8.6ÅäÖÃÊý¾ÝÒ»ÖÂÐÔ

CassandraÖУ¬Ò»ÖÂÐÔ¼¶±ð¿ÉÅäÖã¬ÒÔÈ·¶¨ÇëÇóµÄÊý¾ÝÈçºÎÔÚ²»Í¬µÄreplica±£³ÖÒ»ÖÂÐÔ£¬´Ó¶øÆ½ºâÏìӦʱ¼äºÍÊý¾Ý¾«È·ÐÔ¡£

дһÖÂÐÔ

Ö¸Ã÷ÔÚ·µ»ØÈ·ÈÏÖÁ¿Í»§¶Ëǰ£¬write²Ù×÷±ØÐë³É¹¦µÄreplicaÊý¡£

l ANY£ºwriteÖÁÉÙÔÚÒ»¸öreplica³É¹¦¡£¼´Ê¹ËùÓÐreplica ¶¼downµô£¬ ÔÚдhinted handoffºówriteÈԳɹ¦¡£ÔÚreplica»Ö¸´ºó¸Ãwrite¿É¶Á¡£

l ONE£ºwrite±ØÐë³É¹¦Ð´ÈëÖÁÉÙÒ»¸ö replicaµÄcommit logºÍmemtable¡£

l TWO£ºÖÁÉÙÁ½¸ö

l THREE£ºÖÁÉÙÈý¸ö

l QUORUM£ºÖÁÉÙ(replication_factor/ 2) + 1¸ö

l LOCAL_QUORUM£ºÖÁÉÙ(replication_factor/ 2) + 1¸ö£¬ÇÒÓëЭµ÷Õß´¦ÓÚͬһÊý¾ÝÖÐÐÄ

l EACH_QUORUM£ºËùÓÐÊý¾ÝÖÐÐÄ£¬ÖÁÉÙ(replication_factor/ 2) + 1¸ö

l ALL£ºÈ«²¿

l SERIAL£ºÖÁÉÙ(replication_factor/ 2) + 1¸ö£¬ÓÃÓÚ´ï³ÉÇáÁ¿ÊÂÎñµÄlinearizable consistency

Ðè×¢ÒâµÄÊÇ£ºÊµ¼ÊÉÏwrite»¹Êǻᱻ·¢µ½ËùÓÐÏà¹ØµÄreplicaÖУ¬Ò»ÖÂÐÔ¼¶±ðÖ»ÊÇÈ·¶¨±ØÐèÒª·´À¡µÄreplicaÊý¡£

¶ÁÒ»ÖÂÐÔ

Ö¸Ã÷ÔÚ·µ»ØÊý¾ÝÖµ¿Í»§¶Ëǰ£¬ÐèÒªÏàÓ¦readÇëÇóµÄÏà¹ØreplicaÊý¡£Cassandra´ÓÕâЩÊýÁ¿µÄreplicaÖиù¾Ýʱ¼ä´Á¼ì²é×îеÄÊý¾Ý¡£¼¶±ðͬдһÖÂÐÔ¡£

¿Éͨ¹ýcqlshÃüÁîCONSISTENCYÉèÖÃkeyspaceµÄÒ»ÖÂÐÔ£¬Ò²¿É±à³ÌÉèÖÃÒ»ÖÂÐÔ¡£

9²Ù×÷

9.1¼à¿ØCassandra¼¯Èº

¹¤¾ß£ºnodetool utility¡¢DataStaxOpsCenter¡¢ JConsole

nodetool utility£ºCassandra·¢Ðа渽´øµÄÃüÁîÐй¤¾ß£¬ ÓÃÓÚ¼à¿ØºÍ³£¹æÊý¾Ý¿â²Ù×÷¡£Ò»Ð©³£ÓÃÃüÁîÈç status¡¢cfstats¡¢cfhistograms¡¢netstats¡¢tpstatsµÈ¡£

DataStax OpsCenter£ºÍ¼ÐÎÓû§½çÃæ¹¤¾ß£¬´ÓÖÐÑë¿ØÖÆÌ¨¼à¿ØºÍ¹ÜÀí¼¯ÈºÖÐËùÓнڵ㡣

JConsole£ºJMX¼æÈݹ¤¾ßÓÃÒÔ¼à¿ØjavaÓ¦ÓóÌÐò£¬ÌṩOverview¡¢ Memory¡¢Thread¡¢Classes¡¢VM summary¡¢Mbeans·½ÃæµÄÐÅÏ¢¡£

9.2µ÷ÕûBloom filters

Bloom filtersÓÃÒÔÔÚÖ´ÐÐI/Oǰȷ¶¨SSTableÊÇ·ñº¬Ìض¨µÄrow¡£ÓÃÓÚindexɨÃè¶ø²»ÓÃÓÚrangeɨÃ衣ͨ¹ýbloom_filter_fp_chance²ÎÊýÅäÖÃÆäÊôÐÔÖµ£¬·¶Î§Îª0ÖÁ1.0(¹Ø±Õ)£¬ÖµÔ½´óÔòʹÓõÄÄÚ´æÔ½ÉÙ£¬µ«Ò²Òâζ×ÅÈôSSTableÓɽ϶àË鯬Ôòµ¼Ö½ϸߵĴÅÅÌI/O¡£Ä¬ÈÏÖµÒÀÀµÓÚcompaction_strategyÀàÐÍ¡£ÖµµÄÉèÖÃÒÀÀµ¹¤×÷¸ººÉ£¬È磬ÈôÐèÔÚÒ»ÌØ¶¨±íÉÏÔËÐз±ÖصÄscanÔòÐ轫bloom_filter_fp_chanceÉèÖøßÒ»µã¡£

ͨ¹ýÈçÏÂÓï¾äÉèÖãº

ALTER TABLEaddamsFamily WITH bloom_filter_fp_chance = 0.1;

ÉèÖúúóÐèʹÓÃInitiatecompaction »òUpgrade SSTables·½Ê½Ö®Ò»ÖØÐ²úÉúBloom filter¡£

9.3Êý¾Ý»º´æ

Á½Ààcache£ºpartitionkey cacheºÍrow cache

partition key cache£ºCassandra±ípartition indexµÄcache

row cache£ºÒ»¸örowÊ״α»·ÃÎʺóÕû¸öro w(ºÏ²¢×Ô¶à¸ö¶ÔÓ¦µÄSSTable¼°memtable) ±»·ÅÔÚrow cacheÖÐÒÔ±ãÓÚºóÐø¶Ô¸ÄrowµÄ·ÃÎÊÄÜÖ±½ÓÓÉÄÚ´æ»ñÈ¡Êý¾Ý¡£

¶ÔÓÚºÜÉÙ·ÃÎʵÄarchive±íµ±½ûÓûº´æ¡£

¿ªÆôÓëÅäÖÃcache

¿ªÆô

CREATE TABLEusers (
userid text PRIMARY KEY,
first_name text,
last_name text,
)
WITH caching ='all';

ÅäÖÃ

ÔÚcassandra.yamlÖУ¬µ÷ÕûÏÂÁвÎÊý£»

l key_cache_keys_to_save
l key_cache_save_period
l key_cache_size_in_mb
l row_cache_keys_to_save
l row_cache_size_in_mb
l row_cache_save_period
l row_cache_provider

¹¤×÷Ô­Àí£º

µÚÒ»¸öread²Ù×÷Ö±½ÓÃüÖÐrowcache£¬´ÓÄÚ´æÈ¡³öÊý¾Ý¡£µÚ¶þ¸öread²Ù×÷ΪÃüÖÐ row cache£¬µ«ÃüÖÐpartition key cache£¬ ²¢ÓÉ´ËÕûºÏËùÓÐÏà¹ØµÄSSTable¼°memtableÖÐµÄÆ¬¶ÎΪÇëÇóµÄrow£¬·µ»Ørow²¢Ð´½ørow cache¡£

cacheʹÓÃÓÅ»¯½¨Òé

½«ºÜÉÙÇëÇóµÄÊý¾Ý»òrowºÜ³¤µÄÊý¾Ý·ÅÔÚcache½ÏС»ò²»Ê¹ÓÃcacheµÄ±íÖÐ

Óý϶àµÄ½Úµã²¿Êð¸÷½Úµã¸ºÔؽÏÇáµÄ¼¯Èº

Âß¼­ÉϽ«read³íÃܵÄÊý¾Ý·Ö¿ªÔÚÀëÉ¢µÄ±íÖÐ

9.4ÅäÖÃmemtableÍÌÍÂÁ¿

¿É¸ÄÉÆwriteÐÔÄÜ¡£CassandraÔÚcommit logspace threshold³¬³öʱ½«memtablesÄÚÈÝË¢½ø´ÅÅÌ´´½¨SSTable¡£ÔÚcassandra.ymalÖÐÅäÖÃcommit log space thresholdÀ´µ÷ÕûmemtableÍÌÍÂÁ¿¡£ÅäÖõÄÖµÒÀÀµÓÚÊý¾ÝºÍwrite¸ºÔØ¡£ÏÂÁÐÁ½ÖÖÇé¿ö¿É¿¼ÂÇÔö¼ÓÍÌÍÂÁ¿£º

write¸ºÔذüº¬´óÁ¿ÔÚСÊý¾Ý¼¯ÉϵĸüвÙ×÷

Îȶ¨³ÖÐøµÄд²Ù×÷

9.5CompactionÓëCompression

9.5.1Compaction

ÖÜÆÚÐԵĺǫ́½ø³Ì¡£CompactionÆÚ¼äCassandraͨ¹ý ÕûºÏrowƬ¶ÎºÏ²¢SSTable¡¢ÒƳý¹ýÆÚµÄtombstones¡¢Öؽ¨Ë÷ÒýµÈ£¬²¢ÔÚÐÂSSTableºÏ²¢Íê³ÉºóÒÆ³ý¾ÉµÄSSTable¡£

Á½ÀàCompaction

SizeTieredCompactionStrategy

ÊÕ¼¯³ß´çÏà½üµÄSSTableºÏ²¢ÎªÒ»¸ö½Ï´óµÄSSTable¡£

LeveledCompactionStrategy

´´½¨Ïà¶Ô½ÏСµÄSSTable£¬³ß´ç±»¹Ì¶¨Îª²»Í¬µÈ¼¶£¨L0¡¢L1¡¢L2¡­¡­£©£¬Í¬Ò»¼¶ÄÚSSTable´óСÏàͬ£¬Ã¿²îÒ»¸öµÈ¼¶³ß´ç²î10±¶¡£SSTable´Ó½ÏСµÄµÈ¼¶Ö𽥺ϲ¢ÖÁ½Ï¸ßµÄµÈ¼¶¡£

Compaction²Ù×÷»áÁÙʱÔö¼Ó´ÅÅÌI/O£¬µ«Íê³Éºó¿É¸ÄÉÆreadÐÔÄÜ¡£

¿ªÆôÓëÅäÖÃCompaction

ʹÓÃCQLÓï¾äCREATE/ALTER TABLE

l ALTER TABLE users WITH
compaction = { 'class' : 'LeveledCompactionStrategy', 'sstable_size_in_mb' : 10 }
l ALTER TABLE users
WITH compaction ={'class' : 'SizeTieredCompactionStrategy','min_threshold' : 6 }

¸ü¶àÊôÐԲμûCQL keyspace and table properties.

ÅäÖÃcassandra.yamlÎļþ

l snapshot_before_compaction
l in_memory_compaction_limit_in_mb
l multithreaded_compaction
l compaction_preheat_key_cache
l concurrent_compactors
l compaction_throughput_mb_per_sec

9.5.2Compression

ͨ¹ý¼õÉÙÊý¾ÝÌå»ýºÍ´ÅÅÌI/OÀ´×î´ó»¯´æ´¢ÄÜÁ¦¡£´ó´óÌáÉý¶ÁÐÔÄÜÇÒ ²»»áÏñ´«Í³¹ØÏµÐÍÊý¾Ý¿âÖеÄCompression²Ù×÷½µµÍwriteÐÔÄÜ¡£

ʲôʱºòÖ´ÐÐCompression

ÊÊÓÃÓÚÓµÓдóÁ¿µÄrowÇÒÿ¸örowÓëÆäËûrowÓÐÒ»ÑùµÄcolumn»ò¾¡¿ÉÄܶàÏàͬµÄcolumnµÄ±í¡£Ô½ÏàËÆÑ¹Ëõ±ÈÔ½¸ß£¬ÐÔÄÜÌáÉýÔ½Ã÷ÏÔ¡£row¾ßÓвîÒì½Ï´óµÄcolumn¼¯µÄ±í²»ÊÊÓÚCompression¡£ÈçDynamic±í¡£

ÅäÖúÃcompressionºóºóÐø´´½¨µÄSSTable±»Ñ¹Ëõ£¬ ֮ǰÒѾ­´æÔÚµÄSSTable²»±»Á¢¼´Ñ¹ËõÖ±µ½Õý³£µÄ Cassandracompaction½ø³Ì¿ªÊ¼¡£¿ÉʹÓÃnodetool upgradesstables ÃüÁîÇ¿ÖÆÑ¹Ëõ¼È´æµÄSSTable

ÅäÖÃCompression

½ûÓÃ

CREATE TABLEDogTypes (
block_id uuid,
species text,
alias text,
population varint,
PRIMARY KEY (block_id)
)
WITH compression = {'sstable_compression' : '' };

¿ªÆô

CREATE TABLEDogTypes (
block_id uuid,
species text,
alias text,
population varint,
PRIMARY KEY (block_id)
)
WITH compression = {'sstable_compression' : 'LZ4Compressor' };

µ÷Õû

ALTER TABLECatTypes
WITH compression = { 'sstable_compression' :'DeflateCompressor', 'chunk_length_kb' : 64 }

9.6µ÷ÕûJava×ÊÔ´

ÐÔÄÜϽµ»òÄÚ´æÏûºÄ¹ý¶àʱÐ迼Âǵ÷ÕûJava×ÊÔ´¡£ÓÐÁ½¸öÎļþÓÃÓÚCassandraÖл·¾³ÉèÖãº

comf/cassandra-env.sh£ºÅäÖÃJVM

bin¡¢cassandra-in.sh£ºÅäÖÃCassandra»·¾³±äÁ¿

µ÷ÕûHeap³ß´çʱMAX_HEAP_SIZEÓëHEAP_NEWSIZEҪͬʱÉèÖã¬Ç°ÕßÉèÖÃJVM×î´óheap³ß´ç£¬ºóÕßÉèÖÃÐÂÉú´úµÄ³ß´ç£¬ÐÂÉú´ú³ß´çÔ½´óÀ¬»ø»ØÊÕÔÝͣʱ¼äÔ½³¤£¬·´Ö®À¬»ø»ØÊÕÏûºÄÔ½´ó¡£

µ±Ç°Ä¬ÈÏÅäÖãº

heap´óС²¢·ÇÔ½´óÔ½ºÃ£ºÊ×ÏÈJava6´¦Àí8GBÒÔÉϵÄÀ¬»øÊÕ¼¯µÄÄÜÁ¦»áѸËÙËõ¼õ£»Æä´Î»á¼õÉÙ²Ù×÷ϵͳ»º´æÒ³ËùÄÜʹÓõÄÄÚ´æ¡£

Cassandra1.2ÒÔºó°æ±¾BloomfilterºÍcompression offset mapÊÇoff-heapµÄ£¬²»ËãÔÚJVMµÄheapÖ®ÄÚ¡£ Cassandra2.0ºópartition summaryÒ² ÊÇoff-heapµÄ¡£ÈôÔÚCassandraÖÐʹÓà JNA¿â£¬row cacheÒ²»áÉý¼¶Îªoff-heap¡£ ÕâЩ¿É°ï¼õÉÙheap´óС£¬ ÔöÇ¿JVM GCÐÔÄÜ£¬´Ó¶øÔö¼ÓCassandra¸ßЧ´¦Àíÿ¸ö½ÚµãÖÐÊý¾ÝµÄÄÜÁ¦¡£

ÈôGCƵ·¢·¢ÉúÇÒÔÚÊʶȵÄʱ¼äÍê³É±íÃ÷JVM GCѹÁ¦¹ý´ó£¬´ËʱÐè×÷³öÔö¼Ó½Úµã¡¢½µµÍcache´óС¡¢µ÷ÕûJVMÖÐÓйØGCµÄ²ÎÊýµÈ²¹¾È´ëÊ©¡£

JavaManagement Extensions (JMX)ÌṩÁ˹ÜÀíºÍ¼à¿ØJavaÓ¦ÓúͷþÎñµÄ¸÷ÖÖ¹¤¾ß¡£ ÈçJConsole,¡¢the nodetool utilityºÍ DataStax OpsCenterÕâЩJMX¼æÈݹ¤¾ß¡£

comf/cassandra-env.shÖÐÆäËûÏà¹Ø²ÎÊý

com.sun.management.jmxremote.port

com.sun.management.jmxremote.ssl

com.sun.management.jmxremote.authenticate

-Djava.rmi.server.hostname

9.7ÐÞ¸´ node

ʹÓÃnodetoolµÄrepairÃüÁÐÞ¸´Óë¸ø¶¨µÄÊý¾Ý ·¶Î§Ïà¹ØµÄreplica¼äµÄ²»Ò»ÖÂÐÔ¡£ÔÚÏÂÊôÇéÐÎÔËÐÐÐÞ¸´£º

¹æÂɵġ¢¼Æ»®µÄ¼¯ÈºÎ¬»¤²Ù×÷ÆÚ¼ä£¨³ý·ÇûÓÐÖ´Ðйýdelete£©

½Úµã»Ö¸´ºó

ÔÚ°üº¬½ÏÉÙ±»·ÃÎʵÄÊý¾ÝµÄ½ÚµãÉÏ

ÔÚdownµôµÄ½Úµã¸üÐÂÊý¾Ý

ÔËÐнڵãÐÞ¸´µÄ·½Õ룺

³£¹æÐÞ¸´²Ù×÷Ö´ÐдÎÊýÓÉgc_graceÖµÓ²ÐԹ涨¡£ÐèÔÚ¸Ãʱ¼äÄÚÔÚÿ¸ö½ÚµãÖÁÉÙÔËÐÐÒ»´ÎÐÞ¸´²Ù×÷¡£

ͬʱÔÚ¶àÓÚÒ»¸öµÄ½ÚµãÔËÐг£¹æÐÞ¸´Ê±Ðè½÷É÷£¬×îºÃÔڵͷåÆÚ¹æÂÉÔËÐÐÐÞ¸´¡£

ÔÚºÜÉÙdelete»òoverwriteÊý¾ÝµÄϵͳÖУ¬¿ÉÔö¼Ógc_graceµÄÖµ¡£

ÐÞ¸´²Ù×÷ÏûºÄ´ÅÅÌI/O£¬¿Éͨ¹ýÏÂÊö;¾¶¼õÇ᣺

ʹÓÃnodetoolµÄcompactionthrottlingÑ¡Ïî¡£

ʹÓÃnodetoolsnapshotÖ®ºó´ÓsnapshotÖ´ÐÐÐÞ¸´¡£

ÐÞ¸´²Ù×÷»áµ¼ÖÂoverstreaming£¨ÎÊÌâÔ´ ÓÚCassandraÄÚ²¿MerkletreesÊý¾Ý½á¹¹£©¡£ ±ÈÈçÖ»ÓÐÒ»¸öË𻵵Äpartitionµ«È´Ðè·¢ËͺܶàµÄstream£¬ ÇÒÈô½ÚµãÖдæÔÚµÄpartitionÔ½¶àÎÊÌâÔ½ÑÏ ÖØ¡£Õâ»áÒýÆð´ÅÅ̿ռäÀ˷ѺͲ» ±ØÒªµÄcompaction¡£¿ÉʹÓÃsubrange ÐÞ¸´À´¼õÇáoverstreaming¡£subrange repairÖ»ÐÞ¸´ÊôÓÚ½ÚµãµÄ²¿·ÖÊý¾Ý¡£

9.8Ìí¼Ó/ÒÆ³ý½Úµã»òÊý¾ÝÖÐÐÄ

Ôڼȴ漯ȺÖÐÌí¼Ó½Úµã

ÒÔʹÓÃvnodesµÄ½ÚµãΪÀý£¨ÍƼö´ËÖÖ·½Ê½£¬ÐéÄâ½ÚµãÏà¹ØÄÚÈݼûµÚ7½Ú£©

1. ÔÚнڵ㰲װCassandra£¬¹Ø±Õcassandra£¬Çå³ýÊý¾Ý¡£

2. ÔÚcassandra.yamlºÍcassandra-topology.propertiesÖÐÅäÖÃÈçÏÂÊôÐÔ£º

l cluster_name

l listern_address/broadcast_address

l endpoint_snitch

l num_tokens

l seed_provider

3. Öð¸öÆô¶¯Ð½ڵãÖеÄcassandra£¬²»Í¬½ÚµãµÄ³õʼ»¯Ö®¼ä±£³ÖÁ½·ÖÖӵļä¸ô¡£ ¿ÉÓÃnodetool netstats¼à¿ØÆô¶¯ºÍÊý¾ÝÁ÷´¦Àí

4. ´ýËùÓÐнڵãÔËÐÐÆðÀ´ºóÖð¸öÔÚÿ¸ö֮ǰÒÑ´æÔڵĽڵãÖ´ÐÐnodetool cleanupÀ´ÒƳý²»ÔÙÊôÓÚÕâЩ½ÚµãµÄkey¡£ÔÚÏÂÒ»¸ö½ÚµãÖ´ÐÐnodetool cleanupǰ±ØÐëµÈÉÏÒ»¸ö½ÚµãÖÐ µÄnodetool cleanup½áÊø¡£ÁíÍâcleanup²Ù×÷¿É¿¼ÂÇÔڵͷåÆÚ½øÐС£

Ïò¼È´æ¼¯ÈºÖÐÌí¼ÓÊý¾ÝÖÐÐÄ

ÒÔʹÓÃvnodesµÄ½Úµã¹¹³ÉµÄ¼¯ÈºÎªÀý

1. È·±£keyspaceʹÓÃNetworkTopologyStrategy¸´ÖƲßÂÔ

2. ¶ÔÓÚÿ¸öнڵãÔÚcassandra.yamlÖÐÉèÖÃÈçÏÂÊôÐÔ

l auto_bootstrap: false.

l ÉèÖÃÆäËûÓëËùÊô¼¯ÈºÆ¥ÅäµÄÊôÐÔ£¨²Î¼ûÉÏÒ»²¿·Ö£ºÔڼȴ漯ȺÖÐÌí¼Ó½Úµã£©

3. ¸ù¾ÝÉèÖõÄsnitchÀàÐÍÔÚ¸÷нڵãÅäÖöÔÓ¦µÄÖ¸Ã÷ÍøÂçÍØÆËµÄÅäÖÃÎļþ£¨ÎÞÐèÖØÆô£©

4. È·±£Ê¹ÓõĿͻ§¶Ë²»»á×Ô¶¯Ì½²âеĽڵ㡣

5. ÈôʹÓÃQUORUMÒ»ÖÂÐÔ¼¶±ð£¬Ðè¼ì²éLOCAL_QUORUM »òEACH_QUORUMÒ»ÖÂÐÔ¼¶±ðÊÇ·ñÂú×ã¶àÊý¾ÝÖÐÐĵÄÒªÇó

6. Öð¸öÔÚÿ¸ö½Úµã¿ªÆôcassandra¡£×¢Òâ³õʼ»¯Ê±¼ä¼ä¸ô¡£

7. ËùÓнڵãÔËÐÐÆðÀ´ºóÖ´ÐÐÏÂÁвÙ×÷

Ìæ»»ËÀµôµÄ½Úµã

ÒÔʹÓÃvnodesµÄ½Úµã¹¹³ÉµÄ¼¯ÈºÎªÀý

1. ÓÃnodetool statusÃüÁîÈ·ÈÏ»·ÖÐËÀµôµÄ½Úµã£¬´ÓÊä³öÖмǼ¸Ã½ÚµãµÄHOST ID¡£

2. Ìí¼Ó²¢Æô¶¯ÐµÄÌæ´ú½Úµã£¨²Î¼û£ºÔڼȴ漯ȺÖÐÌí¼Ó½Úµã£©

3. ʹÓÃnodetool removenodeÃüÁî¸ù¾Ý¼Ç¼µÄËÀÍö½ÚµãµÄHOST ID´Ó¼¯ÈºÖÐÒÆ³ýËÀµôµÄ½Úµã¡£

ÒÆ³ýÊý¾ÝÖÐÐÄ

1. È·ÈÏûÓÐclientÕýÔÚÏòÊý¾ÝÖÐÐÄÄÚµÄÈκνڵãдÊý¾Ý

2. ÔÚÊý¾ÝÖÐÐÄÄڵĸ÷½ÚµãÖÐÖ´ÐÐnodetool repairÒÔÈ·±£Êý¾Ý´Ó¸ÃÖÐÐĵõ½ÕýÈ·µÄ´«²¥¡£¸ü¸ÄËùÓеÄkeyspaceÊôÐÔÈ·±£²»ÔÙÒýÓü´½«ÒƳýµÄÊý¾ÝÖÐÐÄ¡£

3. ÔÚÊý¾ÝÖÐÐÄÄڵĸ÷½Úµã·Ö±ðÔËÐÐnodetool decommission

9±¸·Ý»Ö¸´

Cassandraͨ¹ýΪ´ÅÅÌÖеÄÊý¾ÝÎļþ£¨SSTableÎļþ£©´´½¨¿ìÕÕÀ´±¸·ÝÊý¾Ý¡£¿ÉΪµ¥¸ö±í¡¢µ¥¸ökeyspace¡¢ËùÓÐkeyspace´´½¨¿ìÕÕ¡£¿ÉÓò¢ÐÐSSH¹¤¾ßΪÕû¸ö¼¯Èº´´½¨¿ìÕÕ¡£´´½¨Ê±²»±£Ö¤ËùÓÐreplicaÒ»Ö£¬µ«ÔÚ»Ö¸´¿ìÕÕʱ CassandraÀûÓÃÄÚ½¨µÄÒ»ÖÂÐÔ»úÖÆ±£³ÖÒ»ÖÂÐÔ¡£´´½¨ÁËϵͳ·¶Î§µÄ¿ìÕÕºó¿É¿ªÆôÔöÁ¿±¸·ÝÖ»±¸·Ý×ÔÉϴοìÕÕÒÔÀ´±ä»¯Á˵ÄÊý¾Ý£¨Ã¿µ±Ò»¸öSSTable±»flushºó£¬Ò»¸ö¶ÔÓ¦µÄÓ²Á´½Ó±»¿½±´ÖÁÓë/snapshotͬ¼¶µÄ/backups×ÓĿ¼(ÐèʹÓÃJNA)£©¡£

ÈôÔÚCassandraÖÐʹÓÃÁËJNA£¬Ôò¿ìÕÕͨ¹ýÓ²Á´½Ó´´½¨¡£·ñÔò»áÒò½«Îļþ¿½±´ÖÁ²»Í¬µÄλÖöøÔö¼Ó´ÅÅÌI/O¡£

9.1´´½¨¿ìÕÕ

ÔÚÿ¸ö½ÚµãÖ´ÐÐnodetoolsnapshotÃüÁîΪ½Úµã´´½¨¿ìÕÕ¡£Ò²¿Éͨ¹ý²¢ÐÐSSH¹¤¾ß£¨Èçpssh£©ÔËÐÐnodetool snapshot´´½¨È«¾ÖµÄ¿ìÕÕ¡£

$ nodetool -h localhost -p 7199 snapshot demdb

Ö´ÐÐÃüÁîºóÊ×ÏȻὫÄÚ´æÖеÄÊý¾ÝË¢½ø´ÅÅÌ£¬Ö®ºóΪÿ¸ö keyspaceµÄSSTableÎļþ´´½¨Ó²Á´½Ó¡£ ¿ìÕÕµÄĬÈÏλÖÃΪ/var/lib/cassandra/data/<keyspace_name> /<table_name>/snapshots¡£ ÆäÖÐ/var/lib/cassandra/data²¿·ÖÒÀ¾ÝÊý¾ÝĿ¼ÉèÖöø²»Í¬¡£

Òª±£Ö¤¿Õ¼ä³ä×㣬´´½¨ºó¿É¿¼ÂÇÒÆÖÁÆäËûλÖá£

9.2ɾ³ý¿ìÕÕ

´´½¨ÐµĿìÕÕ²¢²»»á×Ô¶¯É¾³ý¾ÉµÄ¿ìÕÕ£¬ÐèÔÚ´´½¨Ð¿ìÕÕǰͨ¹ýnodetool clearsnapshotÃüÁîÒÆ³ý¾ÉµÄ¿ìÕÕ¡£

$ nodetool -h localhost -p 7199 clearsnapshot

ͬÑù¿Éͨ¹ý²¢ÐÐSSH¹¤¾ß£¨Èçpssh£©ÔËÐÐ nodetoolclearsnapshotÒ»´Îɾ³ýËùÓнڵãµÄ¿ìÕÕ¡£

9.3ÆôÓÃÔöÁ¿±¸·Ý

ĬÈϲ»¿ªÆô£¬¿Éͨ¹ýÔÚ¸÷½ÚµãµÄcassandra.yamlÅäÖÃÎļþÖÐÉèÖà incremental_backupsΪtrueÀ´¿ªÆôÔöÁ¿±¸·Ý¡£¿ªÆôºó»áΪÿ¸öеı»Ë¢ÈëµÄSSTable´´½¨Ò»¸öÓ²Á´½Ó²¢¿½±´ÖÁÊý¾ÝĿ¼µÄ/backups×ÓĿ¼¡£

Cassandra²»»á×Ô¶¯É¾³ýÔöÁ¿±¸·ÝÎļþ£¬´´½¨ÐµĿìÕÕǰÐèÊÖ¹¤ÒƳý¾ÉµÄÔöÁ¿±¸·ÝÎļþ¡£

9.4´Ó¿ìÕÕ»Ö¸´Êý¾Ý

ÐèËùÓеĿìÕÕÎļþ£¬ÈôʹÓÃÁËÔöÁ¿±¸·Ý»¹Ðè¿ìÕÕ´´½¨Ö®ºóËùÓеÄÔöÁ¿±¸·ÝÎļþ¡£Í¨³££¬ÔÚ´Ó¿ìÕÕ»Ö¸´Êý¾ÝǰÐèÏÈtruncate±í¡££¨Èô±¸·Ý·¢ÉúÔÚdeleteǰ¶ø»Ö¸´·¢ÉúÔÚdeleteºóÇÒûtruncate±íʱ£¬Ôò²»Äܵõ½×îԭʼµÄÊý¾Ý£¬ÒòΪֱµ½compaction²Ù×÷·¢Éúǰ±»±ê¼ÇΪtombstoneµÄÊý¾ÝÓëԭʼÊý¾Ý´¦ÓÚ²»Í¬µÄSSTableÖУ¬ËùÒÔ»Ö¸´°üº¬Ô­Ê¼Êý¾ÝµÄSSTable²»»áÒÆ³ý±»±ê¼Ç±»tombstoneµÄÊý¾Ý£¬ÕâЩÊý¾ÝÈÔÈ»ÏÔʾΪ½«±»É¾³ý£©¡£

¿ÉÒÔÓÃÈçÏ·½Ê½´Ó¿ìÕÕ»Ö¸´Êý¾Ý

ʹÓÃsstableloader¹¤¾ß

ÏÈ¿½±´snapshotĿ¼ÖеĿìÕÕÎļþÖÁÏàÓ¦Êý¾ÝĿ¼¡£Ö®ºóͨ¹ý JConsoleµ÷ÓÃcolumn family MBean ÖеÄJMX·½·¨loadNewSSTables()»òÕßʹÓÃnodetool refreshÃüÁî¶ø²»µ÷ÓÃÉÏÊö·½·¨¡£

ʹÓÃÖØÆô½ÚµãµÄ·½Ê½

1. Èô»Ö¸´µ¥½ÚµãÔòÏȹرոýڵ㣬Èô»Ö¸´Õû¸ö¼¯ÈºÔòÐèÏȹرÕËùÓнڵã

2. Çå³ý/var/lib/cassandra/commitlogÖеÄËùÓÐÎļþ

3. ɾ³ý<data_directory_location>/ <keyspace_name>/<table_name>ÖÐËùÓÐ*.dbÎļþ

4. ¿½±´×îÐÂ<data_directory_location> /<keyspace_name>/<table_name> /snapshots/ <snapshot_name> µÄ¿ìÕÕÎļþÖÁ<data_directory_location> / <keyspace_name> /<table_name> /snapshots/<snapshot_name>

5. ÈôʹÓÃÁËÔöÁ¿±¸·ÝÔò»¹Ð追±´<data_directory_location> /<keyspace_name>/<table_name> /backupsÖеÄÄÚÈÝÖÁ <data_directory_location> /<keyspace_name>/<table_name>

6. ÖØÆô½Úµã

7. ÔËÐÐnodetool repair

Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
   
2855 ´Îä¯ÀÀ       30