配置 Java 环境(不一定要 Java 11 的)
yum install java-11
- 使用 which 命令找到 java 位置(tips: which whereis locate find 的区别)
- 通过 ll 或者 ls -lrt 命令查看链接指向(我的地址:/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64/bin/java)
- 编辑文件 /etc/profile
- 重新载入
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 配置
安装python-pip包,在 epel 源里面使用 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