zoukankan      html  css  js  c++  java
  • 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 安装过程新增了一个默认的cassandra组和用户,需要把我的username加到cassandra组里:

    sudo usermod -a -G cassandra myuser

    我安装的是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<text>,
        truncated_at map<uuid, blob>
    ...

    列名里包括了配置文件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 文件

  • 相关阅读:
    Java 泛型 泛型的约束与局限性
    Java 泛型 泛型方法
    Java 泛型 泛型数组
    Java 泛型 协变性、逆变性
    Java 泛型 协变式覆盖和泛型重载
    Java 泛型 泛型代码和虚拟机
    Insertion Sort List
    Remove Duplicates from Sorted List II
    String to Integer (atoi)
    SpringMvc源码入门
  • 原文地址:https://www.cnblogs.com/tiger-xc/p/10362389.html
Copyright © 2011-2022 走看看