经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
Akka-CQRS(2)- 安装部署cassandra cluster,ubuntu-16.04.1-LTS and MacOS mojave
来源:cnblogs  作者:雪川大虫  时间:2019/2/12 9:34:24  对本文有异议

 对于akka-cluster这样的分布式软件系统来说,选择配套的数据库类型也是比较讲究的,最好也是分布式的,如cassandra,能保证良好的HA特性。前面的例子里示范akka-persistence时已经使用了cassandra作为journal和snapshot-store。一直以来基本上都在一部macbookpro上开发、测试akka-cluster相关软件。这次在腾讯云上租了两台8G,50G的服务器,安装了ubuntu 16.04.1 LTS操作系统,想着可以在一个真正的环境下试试cassandra cluster的安装部署和实际使用。先是试着在ubuntu上安装部署:

在ubuntu上安装cassandra,跟着下面的步骤做:

  1. echo "deb http://www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
  2. curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
  3. sudo apt-get update
  4. sudo apt-get install cassandra

我安装的是cassandra v3.11.3版本,所以用了debian 311x main来注明。安装完毕后可以用status看看cassandra是不是已经启动,start,stop cassandra可以用下面的命令:

  1. sudo service cassandra status //检查运行状态
  2. sudo service cassandra start //启动cassandra
  3. sudo service cassandra stop //停止cassandra

现在我们可以用 sudo service cassandra start  启动cassandra

然后开启cqlsh, 输入:

use system;    

describe table local

注意显示的system.local表列名:

  1. CREATE TABLE system.local (
  2. key text PRIMARY KEY,
  3. bootstrapped text,
  4. broadcast_address inet,
  5. cluster_name text,
  6. cql_version text,
  7. data_center text,
  8. gossip_generation int,
  9. host_id uuid,
  10. listen_address inet,
  11. native_protocol_version text,
  12. partitioner text,
  13. rack text,
  14. release_version text,
  15. rpc_address inet,
  16. schema_version uuid,
  17. thrift_version text,
  18. tokens set<text>,
  19. truncated_at map<uuid, blob>
  20. ...

列名里包括了配置文件cassandra.yaml中的许多配置如cluster_name,listen_address,rpc_address等。在安装cassandra时已经存放了cassandra.yaml的初始值。所以必须记住如果修改cassandra.yaml里涉及这些配置后必须把所有system表删掉让cassandra自己根据新的.yaml文件配置重新创建这些system表。

我尝试建一个两个节点node的cluster:

配置cluster:

  1. server1 172.27.0.8
  2. server2 172.27.0.7

用server1做seednode。配置cluster需要修改cassandra.yaml文件,具体路径如下:

sudo nano /etc/cassandra/cassandra.yaml

需要修改文件里的配置参数:

  1. cluster_name : 统一集群名称
  2. seed_provider : seed节点地址清单(以,号分割)
  3. listen_address : 集群节点之间使用gossip协议通讯地址
  4. rpc_address : 客户端连接地址
  5. endpoint_snitch : 节点所属数据中心、机架

在修改cassandra.yaml文件之前先停了cassandra: sudo service cassandra stop

下面是server1的设置:

  1. cluster_name: 'TestPOS Cluster'
  2. listen_address: 172.27.0.8
  3. rpc_address: 172.27.0.8
  4. - seeds: 172.27.0.8
  5. endpoint_snitch: SimpleSnitch

切记!!!修改完毕在启动cassandra之前必须首先删除cassandra的系统数据表system*:

  1. sudo rm -rf /var/lib/cassandra/data/system/*

然后启动cassandra:  sudo service cassandra start

好了,现在可以用nodetool命令来检查这个节点的启动状态:sudo nodetool status

结果显示server1已经成功启动了。

下面开始配置server2:

在修改cassandra.yaml文件之前先停了cassandra: sudo service cassandra stop

  1. cluster_name: 'TestPOS Cluster'
  2. listen_address: 172.27.0.7
  3. rpc_address: 172.27.0.7
  4. - seeds: 172.27.0.8
  5. endpoint_snitch: SimpleSnitch

删除cassandra的系统数据表system*:

sudo rm -rf /var/lib/cassandra/data/system/*

然后启动:  sudo service cassandra start

现在可以用nodetool命令来检查这个集群中所有节点的启动状态:sudo nodetool status

很遗憾,只能看到server2一个节点。

这种现象说明server1,server2之间没有沟通。它们应该是通过各自的7000端口交流的,估计是租赁的虚拟服务器没有开启这个端口。在server1上用 nc -vc 172.27.0.7 7000  得到证实。尝试用iptables, ufw等防火墙指令都无法解决问题,看来要留给网络管理部门了。

做了些调研,下面是cassandra需要使用的端口说明:

  1. 7199 JMX monitoring port
  2. 1024 - 65355 Random port required by JMX. Starting with Java 7u4 a specific port can be specified using the com.sun.management.jmxremote.rmi.port property.
  3. 7000 Inter-node cluster
  4. 7001 SSL inter-node cluster
  5. 9042 CQL Native Transport Port
  6. 9160 Thrift

另外,如果需要完整卸载cassandra, 可以用 : sudo apt-get purge cassandra

。。。

再试试用两部macbookpro来构建一个2-node-cluster:

手头刚好有两部macbookpro,可以试试在mac上安装部署cassandra cluster。 

用homebrew下载和安装cassandra 特别容易:

  1. brew update
  2. brew install cassandra

brew info cassandra可以获取cassandra安装情况如版本等

直接用 nodetool status来检查cassandra是否已经启动

start,stop命令如下:

  1. brew services start cassandra
  2. brew services stop cassandra
  3. 或者
  4. launchctl load ~/Library/LaunchAgents/homebrew.mxcl.cassandra.plist
  5. launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.cassandra.plist

两部macbookpro IP地址: 用mac1当作seednode

  1. mac1 192.168.1.30
  2. mac2 192.168.1.24

下面是brew安装后cassandra的一些重要文件路径:

  • Properties: /usr/local/etc/cassandra
  • Logs: /usr/local/var/log/cassandra
  • Data: /usr/local/var/lib/cassandra/data

配置mac1:

brew services stop cassandra

sudo nano /usr/local/etc/cassandra/cassandra.yaml

  1. cluster_name: 'TestPOS Cluster'
  2. listen_address: 192.168.1.30
  3. rpc_address: 192.168.1.30
  4. - seeds: 192.168.1.30
  5. endpoint_snitch: SimpleSnitch

同样,谨记要清除system表: sudo rm -rf /usr/local/var/lib/cassandra/data/system*

brew services start cassandra

nodetool status    显示节点mac1已经启动

配置mac2:

brew services stop cassandra

sudo nano /usr/local/etc/cassandra/cassandra.yaml

  1. cluster_name: 'TestPOS Cluster'
  2. listen_address: 192.168.1.24
  3. rpc_address: 192.168.1.24
  4. - seeds: 192.168.1.30
  5. endpoint_snitch: SimpleSnitch

同样,谨记要清除system表: sudo rm -rf /usr/local/var/lib/cassandra/data/system*

brew services start cassandra

用: nc -vc 192.168.1.30 7000 检查mac1的7000端口,果然是开启的

nodetool status    显示mac1,mac2两个节点都已经启动了

当前的endpoint_snitch使用了SimpleSnitch。但在生产环节里需要配置:

endpoint_snitch: GossipingPropertyFileSnitch

然后在/usr/local/etc/cassandra/cassandra-rackdc.properties 文件里定义本节点的物理位置(数据中心,机架)

最后还要删除/usr/local/etc/cassandra/cassandra-topology.properties 文件

 

原文链接:http://www.cnblogs.com/tiger-xc/p/10362389.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号