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.
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
Tôi đã thêm thông tin bổ sung mà bạn yêu cầu ở cuối bài đăng gốc. – jspyeatt