2012-06-13 33 views
6

Tôi mới làm quen với Cassandra và đã được giao nhiệm vụ đưa nó vào môi trường EC2 trên nhiều vùng sao cho toàn bộ vùng EC2 tiếp tục trên con đường vui vẻ của nó. Tôi đã đọc nhiều tài liệu như tôi có thể tìm thấy về Ec2MultiRegionSnitch và đã đến một điểm dừng chết. Tôi đang chạy cassandra 1.0.10.Làm thế nào để cấu hình Cassandra làm việc trên nhiều vùng EC2 với Ec2MultiRegionSnitch

vấn đề của tôi là như sau:

1) khi tôi bắt đầu bin/cassandra tôi nhận được lỗi: Không thể khởi động đăng ký MBean trong JMX. Mặc dù tôi có thể chạy vòng bin/nodetool -h trên bất kỳ nút nào và tôi nhận được màn hình mà bạn mong đợi từ một hệ thống lành mạnh. Tôi đã thêm thư viện mx4j vào triển khai cassandra của mình. Tôi có thể thử loại bỏ mà tôi cho là.

2) khi tôi sau đó bắt đầu bin/cassandra-cli -h tôi có thể tạo ra các keyspace như sau:

CREATE KEYSPACE mykeyspace 
    WITH placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy' 
    and strategy_options = {us-east-1:2,us-west-1:2}; 

3) Sau khi tôi chạy 'sử dụng mykeyspace' tôi có thể tạo ra một gia đình cột như sau:

CREATE COLUMN FAMILY people 
     WITH comparator=UTF8Type AND key_validation_class=UTF8Type AND 
     default_validation_class=UTF8Type AND column_metadata=[{column_name:FIRST_NAME,validation_class:UTF8Type}, 
     {column_name:LAST_NAME,validation_class:UTF8Type}, 
     {column_name:EMAIL,validation_class:UTF8Type}, 
     {column_name:LOGIN,validation_class:UTF8Type, index_type: KEYS}]; 

4) Sau khi thực hiện điều này, tôi có thể chạy bin/cassandra-cli -h trên bất kỳ 4 nút nào, chạy sử dụng mykeyspace; miêu tả; và mỗi nút mô tả chính xác mykeyspace bao gồm họ cột và danh sách hạt giống.

5) Nhưng khi tôi cố gắng để thực hiện một đơn giản:

set people['1']['FIRST_NAME'] = 'John'; 

tôi nhận được một vết đống như sau:

null 
    UnavailableException() 
     at org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:15206) 
     at org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:858) 
     at org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:830) 
     at org.apache.cassandra.cli.CliClient.executeSet(CliClient.java:901) 

cấu hình của tôi: EC2

Tôi đã thực hiện -ủy quyền cho các cổng 22, 7000, 7199 và 9160

Tôi có 4 nút trong cụm của tôi: một nút trong mỗi vùng sau: AvailabilityZones.

us-east-1:us-east-1a (initial_token: 0) 
    us-east-1:us-east-1c (initial_token: 85070591730234615865843651857942052864) 
    us-west-1:us-west-1a (initial_token: 1) 
    us-west-1:us-west-1c (initial_token: 85070591730234615865843651857942052865) 

Mỗi cá thể EC2 được liên kết với địa chỉ IP công khai.

Trong mỗi nút Tôi đã cấu hình cassandra.yaml như sau:

seeds: <set to the public ip address for the us-east-1a and us-west-1a nodes> 
    storage_port: 7000 
    listen_address: <private ip address of this node> 
    broadcast_address: <public ip address of this node> 
    rpc_address: 0.0.0.0 
    rpc_port: 9160 
    endpoint_snitch: Ec2MultiRegionSnitch 

Ngoài ra trong mỗi nút cassandra-env.sh Tôi đã bao gồm:

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<Node's local IP Address>" 

My Plea Hy vọng rằng tôi đã cung cấp cho ai đó đủ thông tin để giúp tôi làm việc này như một người muốn.

bổ sung thông tin Stack trace từ phát hành mx4j đầu tiên:

WARN 22:07:17,651 Could not start register mbean in JMX java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.apache.cassandra.utils.Mx4jTool.maybeLoad(Mx4jTool.java:66) 
    at org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:243) 
    at org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:356) 
    at org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:107) 
    Caused by: java.net.BindException: Cannot assign requested address 
    at java.net.PlainSocketImpl.socketBind(Native Method) 
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:353) 

My cassandra-topo.tính

aaa.aaa.aaa.aaa=us-east-1:us-east-1a 
    bbb.bbb.bbb.bbb=us-east-1:us-east-1c 

    ccc.ccc.ccc.ccc=us-west-1:us-west-1a 
    ddd.ddd.ddd.ddd=us-west-1:us-west-1c 

    default=us-east-1:us-east-1a 

nodetool ra chiếc nhẫn của tôi __

Address   DC   Rack  Status State Load   Owns Token          
                      85070591730234615865843651857942052865  
    aaa.aaa.aaa.aaa us-east  1a   Up  Normal 11.09 KB  50.00% 0           
    bbb.bbb.bbb.bbb us-west  1a   Up  Normal 6.68 KB   0.00% 1           
    ccc.ccc.ccc.ccc us-east  1c   Up  Normal 11.09 KB  50.00% 85070591730234615865843651857942052864  
    ddd.ddd.ddd.ddd us-west  1c   Up  Normal 15.5 KB   0.00% 85070591730234615865843651857942052865 

tôi khá chắc chắn tôi đã thêm khu vực vùng/sẵn có một cách chính xác. Ít nhất tôi nghĩ rằng tôi đã xuất hiện những gì xuất hiện trong tài liệu. (Hãy nhìn vào Ec2MultiRegionSnitch trong liên kết này) http://www.datastax.com/docs/1.0/cluster_architecture/replication

Tôi không nghĩ rằng tôi có thể liệt kê các khu vực ở phía tây và phía đông bởi vì có hai vùng phía tây (phía tây-1 của chúng tôi là khu vực California và chúng tôi-tây-2 là vùng Oregon). Vì vậy, tôi không nghĩ rằng chỉ cần đưa chúng tôi-tây thành công sẽ phân biệt khu vực.

+0

Bạn nên đính kèm lỗi/stacktrace cho vấn đề jmx đầu tiên mà bạn đang thấy. Dự đoán đầu tiên của tôi là các trung tâm dữ liệu của bạn không được đặt tên là 'us-east-1' và 'us-west-1'. Kiểm tra/đính kèm đầu ra của 'nodetool ring' để xem chúng là gì. – nickmbailey

+0

Tôi đã thêm thông tin bổ sung mà bạn yêu cầu ở cuối bài đăng gốc. – jspyeatt

Trả lời

6

Đoán của tôi trong nhận xét của tôi là đúng. Cài đặt sao chép và tên trung tâm dữ liệu của bạn không khớp. Đôi điều.

1) cassandra-topology.properties chỉ được sử dụng bởi PropertyFileSnitch. Tệp đó không liên quan khi sử dụng sn2 ec2. 2) Lý do mà báo cáo hiện đang báo cáo 'chúng tôi-tây' thay vì 'chúng tôi-tây-1' là do lỗi. https://issues.apache.org/jira/browse/CASSANDRA-4026. Nếu bạn đã thêm các nút trong 'us-west-2', chúng sẽ được báo cáo chính xác như vậy.

Vì vậy, các giải pháp ở đây là để cập nhật cài đặt sao chép của bạn:

CREATE KEYSPACE mykeyspace 
    WITH placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy' 
    and strategy_options = {us-east:2,us-west:2}; 

Ngoài ra, tôi tiếc là không biết những gì là sai với mx4j. Nó không phải là cần thiết bởi cassandra mặc dù vậy trừ khi bạn thực sự cần nó cho một cái gì đó bạn chỉ có thể loại bỏ nó.

+0

Đã xóa mọi thứ. Tôi đã chạy vào một số lỗi cassandra trong khi làm việc trên dự án này. – jspyeatt

Các vấn đề liên quan