对于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需要使用的端口说明:

 JMX monitoring port
- Random port required by JMX. Starting with Java 7u4 a specific port can be specified using the com.sun.management.jmxremote.rmi.port property.
Inter-node cluster
SSL inter-node cluster
CQL Native Transport Port
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 文件

Akka-CQRS(2)- 安装部署cassandra cluster,ubuntu-16.04.1-LTS and MacOS mojave的更多相关文章

  1. 安装Hadoop及Spark(Ubuntu 16.04)

    安装Hadoop及Spark(Ubuntu 16.04) 安装JDK 下载jdk(以jdk-8u91-linux-x64.tar.gz为例) 新建文件夹 sudo mkdir /usr/lib/jvm ...

  2. Ubuntu 16.04.2 LTS 安装 jdk1.6 和 tomcat6 (一)

    java和tomcat环境配置已经有很多教程和文章,最近项目需要配置Ubuntu 16.04.2下的古老的java6和tomcat 6,遇到小坑,特记录和分享. 网上的教程不是太新,就是太老,还有一些 ...

  3. Ubuntu 16.04.3 LTS u盘-安裝教程(填坑)

    Ubuntu 16.04.3 LTS 下载地址: https://www.ubuntu.com/download/desktop 下载u盘后文件为iso,可以选择UltraISO制作U盘启动,也可以直 ...

  4. Alienware-15-R3 装Ubuntu 16.04.3 LTS

    前言:Alienware-15-R3默认安装的系统是win10.现在卸载win0,装Ubuntu 16.04.3 LTS. 一.下载Ubuntu 16.04.3 LTS镜像文件,下载地址:https: ...

  5. Ubuntu 16.04.4 LTS环境中php7.0使用mysqli失败,数据库无法访问

    环境: Ubuntu 16.04.4 LTS php7.0 输入命令php -m,显示如下,发现没有mysqli模块 输入命令sudo apt install php-mysql,安装mysql模块, ...

  6. Ubuntu 16.04.4 LTS设置root用户登陆图形界面

    普通用户登陆真是太憋屈,这也不能那也不能,root用户登录就可以肆无忌惮了 本方法采用nano编辑器,ubantu版本Ubuntu 16.04.4 LTS,其他版本应该也一样,下面进入正题 1.终端登 ...

  7. MySQL5.7的安装(CentOS 7 & Ubuntu 16.04)

    CentOS 通过 yum 安装MySQL5.7 Yum Repository 下载地址:https://dev.mysql.com/downloads/repo/yum/ 选择相应的版本进行下载:R ...

  8. Ubuntu 16.04.2 LTS 安装 jdk1.6 和 tomcat6 (二)

    上一篇记录和分享了jdk1.6 在Ubuntu 16.04.2 环境下的安装配置,本文开始安装和配置tomcat 6     2 安装tomcat   http://tomcat.apache.org ...

  9. 在VMWare虚拟机中安装Ubuntu 16.04.1 LTS

    一.需要的准备 安装好VMWare虚拟机(傻瓜式安装,一直next就可以,请支持正版),将Ubuntu的系统镜像下载好,目前最新的LTS版本为16.04.1. 我把虚拟机和Ubuntu镜像传到了百度云 ...

随机推荐

  1. appium三种等待时间

    1.强制等待(固定等待) 2.隐式等待 是appium中webdriver中自带的休眠方法,设置的是全局等待时间(在全局等待时间内之间的响应操作都会立即结束等待,然后进行操作) 3.显式等待

  2. laravel -查询近7月走势图案例

    // 获取7月前的时间$time = date('Y-m',strtotime("-0 year -7 month -0 day" ));$where['created_at'] ...

  3. 设计模式之装饰者模式-java实例

    设计模式之装饰者模式 需求场景 我们有了别人提供的产品,但是别人提供的产品对我们来说还不够完善,我们需要对这个产品的功能进行补强,此时可以考虑使用装饰者模式. 我们已经有了产品,而且这个产品的功能非常 ...

  4. python ftp 传输文件

    # -*- coding: utf-8 -*- # 本地bytes 数据上报服务器同时创建文件from ftplib import FTP import time, _io from constant ...

  5. Django学习笔记(进阶篇)

    Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html

  6. 服务管理之NFS

    目录 NFS简介 1.1 nfs特点 1.4 nfs的应用场景 4. nfs管理 NFS简介 1.1 nfs特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的 ...

  7. JS生成URL二维码

    需求:项目中需要在UI界面有一个二维码,扫码后可以跳转到二维码包含的URL. 解决方案:在前端用js生成一个包含URL等信息的二维码. 实现: 方案一. <!DOCTYPE HTML PUBLI ...

  8. 第二阶段第五次spring会议

    昨天我对软件加上了写便签时自动加上时间的功能. 今天我将对初始页面进行加工和修改. 我用两个小动物作为按钮分别进入动物便签界面和植物便签界面,可以让用户自由选择. 明天我将尝试对软件进行添加搜索引擎的 ...

  9. "tsc.exe"已退出,代码1

    公司开发新项目要用到ABP,于是到处在网上找些资料学习,在官网下好了模板(http://aspnetboilerplate.com/Templates),拿下来后用vs(博主用的是vs2013)编译后 ...

  10. 解决使用Mybatis 传入多参数使用map封装遇到的 “坑”问题

    好久没来写些东西了,今天 我分享一下自己遇到的一个“小 坑”,这也许对您来说不是个问题,但是我还是希望对没有遇到过这类问题的朋友给个小小的帮助吧 是这样的,需求:需要实现根据多条件 且分页展示数据 1 ...