Akka-CQRS(2)- 安装部署cassandra cluster,ubuntu-16.04.1-LTS and MacOS mojave

对于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,跟着下面的步骤做: 复制代码 echo "deb http://www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add - sudo apt-get update sudo apt-get install cassandra 复制代码 我安装的是cassandra v3.11.3版本,所以用了debian 311x main来注明。安装完毕后可以用status看看cassandra是不是已经启动,start,stop cassandra可以用下面的命令: 复制代码 sudo service cassandra status //检查运行状态 sudo service cassandra start //启动cassandra sudo service cassandra stop //停止cassandra 复制代码 现在我们可以用 sudo service cassandra start 启动cassandra 然后开启cqlsh, 输入: use system; describe table local 注意显示的system.local表列名: 复制代码 CREATE TABLE system.local ( key text PRIMARY KEY, bootstrapped text, broadcast_address inet, cluster_name text, cql_version text, data_center text, gossip_generation int, host_id uuid, listen_address inet, native_protocol_version text, partitioner text, rack text, release_version text, rpc_address inet, schema_version uuid, thrift_version text, tokens set, truncated_at map ... 复制代码 列名里包括了配置文件cassandra.yaml中的许多配置如cluster_name,listen_address,rpc_address等。在安装cassandra时已经存放了cassandra.yaml的初始值。所以必须记住如果修改cassandra.yaml里涉及这些配置后必须把所有system表删掉让cassandra自己根据新的.yaml文件配置重新创建这些system表。 我尝试建一个两个节点node的cluster: 配置cluster: 复制代码 server1 172.27.0.8 server2 172.27.0.7 复制代码 用server1做seednode。配置cluster需要修改cassandra.yaml文件,具体路径如下: sudo nano /etc/cassandra/cassandra.yaml 需要修改文件里的配置参数: 复制代码 cluster_name : 统一集群名称 seed_provider : seed节点地址清单(以,号分割) listen_address : 集群节点之间使用gossip协议通讯地址 rpc_address : 客户端连接地址 endpoint_snitch : 节点所属数据中心、机架 复制代码 在修改cassandra.yaml文件之前先停了cassandra: sudo service cassandra stop 下面是server1的设置: 复制代码 cluster_name: 'TestPOS Cluster' listen_address: 172.27.0.8 rpc_address: 172.27.0.8 - seeds: 172.27.0.8 endpoint_snitch: SimpleSnitch 复制代码 切记!!!修改完毕在启动cassandra之前必须首先删除cassandra的系统数据表system*: 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 复制代码 cluster_name: 'TestPOS Cluster' listen_address: 172.27.0.7 rpc_address: 172.27.0.7 - seeds: 172.27.0.8 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需要使用的端口说明: 复制代码 7199 JMX monitoring port 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. 7000 Inter-node cluster 7001 SSL inter-node cluster 9042 CQL Native Transport Port 9160 Thrift 复制代码 另外,如果需要完整卸载cassandra, 可以用 : sudo apt-get purge cassandra 。。。 再试试用两部macbookpro来构建一个2-node-cluster: 手头刚好有两部macbookpro,可以试试在mac上安装部署cassandra cluster。 用homebrew下载和安装cassandra 特别容易: 复制代码 brew update brew install cassandra 复制代码 brew info cassandra可以获取cassandra安装情况如版本等 直接用 nodetool status来检查cassandra是否已经启动 start,stop命令如下: 复制代码 brew services start cassandra brew services stop cassandra 或者 launchctl load ~/Library/LaunchAgents/homebrew.mxcl.cassandra.plist launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.cassandra.plist 复制代码 两部macbookpro IP地址: 用mac1当作seednode 复制代码 mac1 192.168.1.30 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 复制代码 cluster_name: 'TestPOS Cluster' listen_address: 192.168.1.30 rpc_address: 192.168.1.30 - seeds: 192.168.1.30 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 复制代码 cluster_name: 'TestPOS Cluster' listen_address: 192.168.1.24 rpc_address: 192.168.1.24 - seeds: 192.168.1.30 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 文件 https://www.cnblogs.com/tiger-xc/p/10362389.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信