Cassandra 的安装与配置

193 阅读3分钟

配置 Java 环境(不一定要 Java 11 的)

yum install java-11

  1. 使用 which 命令找到 java 位置(tips: which whereis locate find 的区别)
  2. 通过 ll 或者 ls -lrt 命令查看链接指向(我的地址:/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64/bin/java)
  3. 编辑文件 /etc/profile
  4. 重新载入 source /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

安装软件

官网下载 Apache Cassandra 得到一个 tar.gz 包

解压(我放在/opt),配置文件在 conf 下,日志在 logs 下,软件在 bin 下。服务端是 cassandra,客户端是 cqlsh,端点检查软件是 nodetool。

添加组 groupadd cassandra

添加用户 useradd -d /home/cassandra -m -g cassandra -s /bin/bash cassandra

注意,添加用户时可能需要建文件夹 /home/cassandra

如果建文件夹,则需要管理权限

添加权限 chmod -R 775 /home/cassandra

修改归属 chown -R cassandra: /home/cassandra 这里是将所有权给了用户组

修改用户的密码 passwd cassandra

如果预分配了用户文件夹,新建用户可能会出现未复制文件的情况

将 /etc/skel 下的文件复制到用户文件夹下即可

注意检查软件所在文件夹的所有者,使用 chown -R user path 命令更改安装包拥有者

启动服务 bin/cassandra -f -R #启动 -f 前台启动 -R管理员身份启动

cqlsh 配置

  1. 安装 python-pip 包,在 epel 源里面
  2. 使用 pip 安装缺失的包,如 six

新的 pip 安装方法,上面的方法已过时,注意第一条命令是下载文件,应该找一个合适的文件夹

curl "https://bootstrap.pypa.io/pip/2.7/get-pip.py" -o "get-pip.py"
python get-pip.py
pip install six
pip install cassandra-driver
pip install futures

使用方法 bin/cqlsh $host $port -u $username -p $password 因为没有用户名和密码,所以后面省略

导出数据:/cqlsh 127.0.0.1 -e 'desc keyspace keyspace_name' -u user -p pwd > db.cql

导入数据:/cqlsh 192.168.198.51 -u cassandra -p cassandra -f db.cql

服务配置(开机启动)

添加环境变量

  • 用户:/home/cassandra/.bash_profile
  • 全局:/etc/profile
export PATH=$PATH:/usr/local/apache-cassandra-3.7/bin
export CQLSH_NO_BUNDLED=TRUE

添加到 systemctl

编辑 /usr/lib/systemd/system/cassandra.service

[Unit]
Description=Cassandra Server Service
After=network.service

[Service]
Type=simple
Environment=JAVA_HOME=/opt/jdk-11.0.14.1+1

PIDFile=/var/run/cassandra.pid
User=cassandra
Group=cassandra
ExecStart=/opt/apache-cassandra-4.0.3/bin/cassandra -f -p /var/run/cassandra.pid
StandardOutput=journal
StandardError=journal
LimitNOFILE=100000
LimitMEMLOCK=infinity
LimitNPROC=32768
LimitAS=infinity

[Install]
WantedBy=multi-user.target

systemctl daemon-reload 更新,之后直接启动服务并加入开机启动即可

journalctl -u cassandra journalctl -xe 查看日志

数据库配置

集群名 cluster_name:

文件位置 data_file_directories: commitlog_directory: saved_caches_directory:

seeds 节点相当于主要的服务器,要改

启用用户名和密码验证

# 修改前
authenticator: AllowAllAuthenticator
# 修改后
authenticator: PasswordAuthenticator

放行端口 7199/tcp 7000/tcp 7001/tcp 9160/tcp 9042/tcp

7199 - JMX(8080 pre Cassandra 0.8.xx) 7000 - 节点间通信(如果启用了 TLS,则不使用) 7001 - TLS 节点间通信(使用 TLS 时使用) 9160 - Thrift 客户端 API 9042 - CQL 本地传输端口

firewall-cmd --permanent --zone=public --add-port=7199/tcp
firewall-cmd --permanent --zone=public --add-port=7000/tcp
firewall-cmd --permanent --zone=public --add-port=7001/tcp
firewall-cmd --permanent --zone=public --add-port=9160/tcp
firewall-cmd --permanent --zone=public --add-port=9042/tcp
firewall-cmd --reload

网络配置说明

在Cassandra的配置文件里面存在以下的address:

  • listen_address
  • broadcast_address
  • listen_on_broadcast_address
  • rpc_address
  • broadcast_rpc_address

官方文档翻译如下

  • listen_address

默认是localhost。

该配置是为了告诉集群中其他节点如何连接到该节点上。一个集群中该节点的address必须唯一,因为该地址就像一个独一无二的身份id,只有知道该连接,Cassandra集群才可以建立连接

可以设置为空。Cassandra通过InetAddress.getLocalHost()可以从系统获取本地地址。
如果Cassandra找不到正确的地址,你可以指定IP地址或者主机名称。
如果是单节点集群,你可以使用默认配置(localhost)。
永远不要指定0.0.0.0,总是错的。

  • broadcast_address

默认是被注释掉的。默认值1.2.3.4

广播地址,用来向其他Cassandra节点发送广播

如果设置为空,将采用与listen_address一样的地址

  • listen_on_broadcast_address

默认是注释掉的。默认值false

当使用多个物理网络接口时,把该项设置为true,监听除了listen_address之外的broadcast_address,从而运行节点可以在两个接口中通信

  • rpc_address

默认值localhost

Thrift RPC 服务和本地传输服务都会使用该地址,简单的可以理解为client与Cassandra服务端通信的地址

如果不设置该项,将会采用listen_address的设置
该配置可以设置为0.0.0.0,但是如果这样设置了,你必须设置broadcast_rpc_address为其他地址

  • broadcast_rpc_address

默认注释掉。默认值1.2.3.4

rpc地址广播到驱动和其他节点上。该节点不能被设置为0.0.0.0。
如果该配置设置为空将会默认使用rpc_address的地址。
如果rpc_address设置为0.0.0.0,该配置必须设置一个地址。

公司的配置

参数设置:基本都是加个零

read_request_timeout_in_ms: 60000
range_request_timeout_in_ms: 120000
write_request_timeout_in_ms: 30000
counter_write_request_timeout_in_ms: 80000
cas_contention_timeout_in_ms: 10000
truncate_request_timeout_in_ms: 600000
request_timeout_in_ms: 100000