james分布式版本部署一
前言
服务器系统:Ubuntu 20.04.6 LTS
总项目地址
官方文档
3.8.2项目地址
james3.8.2下载地址
当前安装james3.8.2版本
基础环境
James 3.8.2需要 Java 运行时环境,Java 版本 11。
1 | sudo apt update |
在运行 James 之前,应将环境变量 JAVA_HOME 设置为 JRE 主目录,如果不确定可以先查看一下。
设置JAVA_HOME
1 | echo $JAVA_HOME |
我这里执行上面的命令并无结果输出,也就是没有设置这个环境变量。
1 | root@mail-test:/# java -version |
1 | root@mail-test:/# mvn -v |
可以看出这台测试服务器之前安装过java 11.0.26,maven 3.6.3,所以需要先找出之前的安装路径。
1 | sudo update-alternatives --config java |
1 | root@mail-test:/# update-alternatives --config java |
打开 /etc/environment 文件进行编辑
1 | sudo nano /etc/environment |
mac系统,编辑完成后按control+x键退出编辑,按y键保存,如果没有退出,再敲一下回车键
或者
1 | vim /etc/environment |
在文件末尾添加以下行,注意不要把路径直接指向bin目录
1 | JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" |
保存并退出编辑器
1 | root@mail-test:/usr/lib/jvm/java-11-openjdk-amd64/bin# nano /etc/environment |
使更改生效
1 | source /etc/environment |
通过以下命令来验证 JAVA_HOME 是否设置正确
1 | root@mail-test:/usr/lib/jvm/java-11-openjdk-amd64/bin# echo $JAVA_HOME |
为了确保系统能够找到 Java 可执行文件,还需要将 JAVA_HOME/bin 添加到 PATH 环境变量中
打开 ~/.bashrc 或 ~/.bash_profile 文件进行编辑
1 | nano ~/.bashrc |
在文件末尾添加以下行
1 | export PATH=$JAVA_HOME/bin:$PATH |
使更改生效
1 | source ~/.bashrc |
安装Libc6
先验证是否安装了
1 | root@mail-test:/# dpkg -l | grep libc6 |
这台服务器已经安装了,所以跳过,如果没有安装需要先安装一下,例如
1 | sudo apt-get install libc6-i386 libc6-dev-i386 |
更新系统和安装必要的软件包
1 | sudo apt update |
安装中间件-Docker(方式一)
安装Docker
添加 Docker 的官方 GPG 密钥,使用 GPG 密钥来验证软件包的完整性
1 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg |
添加 Docker 的 APT 软件源 将 Docker 的官方仓库添加到 APT 源列表
1 | echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
更新软件包索引并安装 Docker 从 Docker 的官方仓库安装 Docker 引擎
1 | sudo apt update |
验证 Docker 是否安装成功 运行以下命令,检查 Docker 是否正常工作
1 | # 显示 Docker 的版本 |
(可选)允许非root用户运行
默认情况下,Docker 需要 root 权限。如果希望普通用户也能使用 Docker,可以将用户添加到 docker 用户组
将当前用户添加到 docker 组
1 | sudo usermod -aG docker $USER |
重新登录或运行以下命令使更改生效
1 | newgrp docker |
验证是否无需 sudo 即可运行 Docker
1 | docker run hello-world |
设置 Docker 开机自启
1 | sudo systemctl enable docker |
(可选)安装DockerCompose
Docker Compose 是用于定义和运行多容器 Docker 应用的工具。
下载 Docker Compose 二进制文件
1 | sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
设置权限
1 | sudo chmod +x /usr/local/bin/docker-compose |
验证安装
1 | docker-compose --version |
安装中间件
在 Docker 上为 James 环境创建自己的用户网络
1 | root@mail-test:/home/james# docker network create --driver bridge james |
安装cassandra:3.11.10
1 | docker run -d --network james -p 9042:9042 --name=cassandra cassandra:3.11.10 |
安装opensearch:2.1.0
1 | docker run -d --network james -p 9200:9200 --name=opensearch --env 'discovery.type=single-node' opensearchproject/opensearch:2.1.0 |
安装rabbitmq:3.9.18
1 | docker run -d --network james -p 5672:5672 -p 15672:15672 --name=rabbitmq rabbitmq:3.9.18-management |
安装延时插件-项目有用到
下载插件
1 | wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez |
拷贝插件到docker容器中,其中a0f2970be979为容器id
1 | docker cp rabbitmq_delayed_message_exchange-3.9.0.ez a0f2970be979:/plugins/ |
进入docker容器
1 | docker exec -it a0f2970be979 /bin/bash |
启用插件
1 | rabbitmq-plugins enable rabbitmq_delayed_message_exchange |
安装zenko/cloudserver:8.2.6
1 | docker run -d --network james --env 'REMOTE_MANAGEMENT_DISABLE=1' --env 'SCALITY_ACCESS_KEY_ID=accessKey1' --env 'SCALITY_SECRET_ACCESS_KEY=secretKey1' --name=s3 zenko/cloudserver:8.2.6 |
安装TIka
1 | docker run -d --name tika -p 9998:9998 apache/tika |
在 James 所在的服务器上,使用 curl 测试是否可以访问 Tika 服务
1 | curl http://<docker-host-ip>:9998/tika |
1 | root@mail-test:/home/james# curl http://127.0.0.1:9998/tika |
安装中间件-手动(方式二)
安装opensearch:2.1.0
下载
1 | wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.1.0/opensearch-2.1.0-linux-x64.tar.gz |
解压
1 | root@mail-test:/data/runTime/opensearch# tar -xzf opensearch-2.1.0-linux-x64.tar.gz |
配置
1 | cd opensearch-2.1.0 |
编辑 config/opensearch.yml
1 | #下面3个是集群配置,按默认的或者按这个配置 |
开机自启(方式一)
1 | sudo nano /etc/systemd/system/opensearch.service |
添加以下内容
1 | [Unit] |
如果不想指定特定的用户和组,但仍然希望以非 root 用户运行 OpenSearch,可以采取以下方法:
方法 1:使用系统默认用户
大多数 Linux 系统都有一个默认的普通用户(例如 nobody 或 daemon),可以直接使用这些用户
方法 2:不指定用户(不推荐)
如果坚持不指定用户,可以直接删除 User 和 Group 配置
1 | [Service] |
保存并退出,然后启用并启动服务
1 | sudo systemctl daemon-reload |
这一步执行失败了
1 | root@mail-test:/data/runTime/opensearch/opensearch-2.1.0# sudo systemctl start opensearch |
先确定路径是否有问题
1 | root@mail-test:/data/runTime/opensearch/opensearch-2.1.0# ls -l /data/runTime/opensearch/opensearch-2.1.0/bin/opensearch |
确保用户和组权限
1 | sudo chown -R nobody:nogroup /data/runTime/opensearch/opensearch-2.1.0 |
再次尝试启动服务
1 | sudo systemctl start opensearch |
如果启动失败,查看详细日志
1 | sudo journalctl -u opensearch.service -f |
1 | root@mail-test:/data/runTime/opensearch/opensearch-2.1.0# sudo journalctl -u opensearch.service -f |
存在多个 ExecStart= 配置项,而 systemd 不允许在非 Type=oneshot 的服务中定义多个 ExecStart,返回前面步骤把配置文件中多多已经删掉了
在修改服务文件后,需要重新加载 systemd 配置
1 | sudo systemctl daemon-reload |
再次启动后启动成功
直接启动(方式二)
opensearch根目录执行
1 | ./bin/opensearch -d |
验证安装
1 | curl -X GET "localhost:9200" |
成功示例
1 | root@mail-test:/data/runTime/opensearch/opensearch-2.1.0# curl -X GET "localhost:9200" |
OpenSearchDashboards(可选)
OpenSearch Dashboards 是 OpenSearch 的可视化工具
1 | root@mail-test:/data/runTime/opensearch/opensearch-2.1.0# cd ../../ |
编辑 config/opensearch_dashboards.yml
1 | server.uuid: "4caaa2ac-c82f-4b5e-9831-6a30c96e4b10" |
在 OpenSearch Dashboards 2.0.1 版本中,server.uuid 必须是真正符合 RFC 4122 UUID 标准的字符串,而不能是任意字符串
这里千万注意 opensearch.hosts: [“http://localhost:9200"] # OpenSearch 集群地址
默认是https,如果没配证书,这里记得用http
开放权限
1 | sudo chown -R nobody:nogroup /data/runTime/opensearch-dashboards-210/opensearch-dashboards-2.1.0/data |
OpenSearchDashboards自启(可选)
在 /etc/systemd/system/ 目录下创建一个新的服务文件,例如 opensearch-dashboards.service
1 | sudo nano /etc/systemd/system/opensearch-dashboards.service |
编写服务文件内容
1 | [Unit] |
确保服务文件的权限正确
1 | sudo chmod 644 /etc/systemd/system/opensearch-dashboards.service |
重新加载 systemd 配置
1 | sudo systemctl daemon-reload |
启用开机自启
1 | sudo systemctl enable opensearch-dashboards |
列出所有开机自启项目,按下箭头可以往下加载
1 | systemctl list-unit-files --type=service --state=enabled |
启动 OpenSearch Dashboards 服务
1 | sudo systemctl start opensearch-dashboards |
验证
1 | http://<服务器IP>:5601 |
或者
1 | curl -X GET "localhost:5601" |
如果页面正常加载,说明 OpenSearch Dashboards 已成功启动,如果不能访问看看端口是否打开
如果防火墙端口已开,但是还是无法访问
确保端口 5601 没有被其他进程占用
1 | sudo lsof -i :5601 |
检查 OpenSearch 集群状态
1 | curl -X GET "localhost:9200/_cluster/health?pretty" |
查看日志
如果根目录下没有logs文件夹则运行下面命令
1 | sudo journalctl -u opensearch-dashboards.service --since "2 hours ago" --no-pager |
访问 http://<服务器IP>:5601 页面提示 OpenSearch Dashboards server is not ready yet
返回看配置那一步
安装rabbitmq:3.8.2
前置环境
我这里之前安装了1次,没成功,卸载并清理残留
1 | sudo apt-get remove --purge erlang |
导入MQ的GPGKey
1 | # 从 rabbitmq.com 导入签名密钥 |
添加APT 仓库
RabbitMQ 官方仓库依托于 Cloudsmith,现在分为 Erlang 和 RabbitMQ 两个仓库,需要分别添加
1 | # 添加 RabbitMQ Erlang 仓库 |
更新软件包索引
1 | sudo apt-get update |
查找可用版本
1 | apt-cache madison rabbitmq-server |
示例
1 | root@mail-test:/data/runTime/rabbitmq# apt-cache madison rabbitmq-server |
安装指定版本
1 | # 假设仓库中显示的 3.9.18 版本号带有 -1(或其他后缀) |
如果提示需要安装依赖 Erlang,也可以直接安装依赖,这里执行没有提示
1 | sudo apt-get install rabbitmq-server=3.9.18-1 erlang-base erlang-crypto erlang-public-key erlang-ssl |
启动并验证
1 | sudo systemctl status rabbitmq-server |
开机自启
列出所有开机自启项目,按下箭头可以往下加载
1 | systemctl list-unit-files --type=service --state=enabled |
发现rabbitmq自动设置了开机启动,如果列表里面没有,则用下面的命令设置一下
1 | sudo systemctl enable rabbitmq-server |
检查状态
1 | sudo systemctl status rabbitmq-server |
启用RabbitMQ管理插件
1 | sudo rabbitmq-plugins enable rabbitmq_management |
启用插件后,你可以通过浏览器访问RabbitMQ的管理界面,默认的用户名和密码是guest/guest
guest 用户是一个特殊的默认用户,它的默认配置是仅允许通过 localhost 登录,最好新增账号
1 | http://<your-server-ip>:15672/ |
如果登陆 rabbitmq网页提示 User can only log in via localhost
1 | rabbitmqctl set_permissions -p / <username> ".*" ".*" ".*" |
1 | root@mail-test:/data/runTime/rabbitmq# sudo rabbitmqctl add_user xen q12345678 |
这将允许用户
开放端口
tcp:5672,15672
安装延时消息插件,项目有用到
下载插件
1 | wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez |
rabbitmq安装目录通常是
1 | /usr/lib/rabbitmq/lib/rabbitmq_server-<VERSION>/ |
那么这里应该就是
1 | /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.2/ |
如果找不到,对于从官方仓库或本地 .deb 文件安装的 RabbitMQ 包可以执行下面语句
1 | dpkg -L rabbitmq-server |
启用插件
1 | root@mail-test:/data/runTime/rabbitmq# ls |
查看是否启用成功
1 | rabbitmq_delayed_message_exchange |
创建用户(可选)
可以通过以下命令创建一个新的RabbitMQ用户
1 | sudo rabbitmqctl add_user <username> <password> |
安装TIka
无版本限制
下载
1 | wget https://dlcdn.apache.org/tika/2.9.3/tika-server-standard-2.9.3.jar |
1 | root@mail-test:/data/runTime# mkdir tika |
如果404
则先到 Tika 官方下载页面 查看当前最新可用版本,然后使用对应的下载链接,或者替换链接中的版本号
1 | wget https://dlcdn.apache.org/tika/2.9.3/tika-server-standard-2.9.3.jar |
开机自启
1 | sudo nano /etc/systemd/system/tika.service |
写入以下内容
1 | [Unit] |
加载并启动服务
1 | sudo systemctl daemon-reload |
检查服务状态
1 | systemctl status tika |
安装cassandra 4.0.10
添加 Cassandra 官方仓库
导入 GPG 密钥,此命令会从 Apache 官方下载 Cassandra 的密钥并添加到系统的密钥管理中。
1 | wget -q -O - https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - |
添加 Cassandra 仓库到 sources.list
1 | wget -q -O - https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - |
Cassandra 4.0.x 版本对应的仓库地址通常为 40x,请在 /etc/apt/sources.list.d/ 下创建新的源文件
1 | echo "deb [arch=amd64] https://deb.apache.org/cassandra 40x main" \ |
更新包索引
1 | sudo apt-get update |
查看可用版本(可选)
1 | apt-cache madison cassandra |
安装指定版本
1 | sudo apt-get install cassandra=4.0.10 |
一直没法正确执行,放弃
下载
前往 Apache Cassandra 下载页,或其 官方镜像,找到 4.0.10(4.0.x 系列)的链接后,进入对应的 deb 目录
我这里进的 官方镜像 ,选择版本后文件如下
1 | [ ] apache-cassandra-4.0.17-bin.tar.gz 2025-02-06 10:02 46M |
右键文件获取下载链接
1 | wget https://downloads.apache.org/cassandra/4.0.17/apache-cassandra-4.0.17-bin.tar.gz |
解压
1 | tar -xzvf apache-cassandra-4.0.17-bin.tar.gz |
环境变量
编辑~/.bashrc文件,添加Cassandra的路径,直接执行下面语句
1 | echo 'export CASSANDRA_HOME=/data/runTime/cassandra401' >> ~/.bashrc |
使更改生效
1 | source ~/.bashrc |
配置
编辑/conf/cassandra.yaml文件,根据需要调整配置,如数据存储路径、监听地址等
1 | nano /data/runTime/cassandra401/conf/cassandra.yaml |
常见配置项:
data_file_directories: 数据文件存储路径
commitlog_directory: 提交日志存储路径
saved_caches_directory: 缓存存储路径
listen_address: Cassandra节点监听地址
rpc_address: 远程过程调用地址
创建系统专用用户
为 Cassandra 创建一个专用用户(例如 cassandra),并确保该用户对 Cassandra 的安装目录和数据目录有适当的权限
1 | sudo useradd -r -s /bin/false cassandra |
更改目录权限
将 Cassandra 安装目录和数据目录的所有权更改为新创建的 cassandra 用户。
假设 Cassandra 安装在 /data/runTime/cassandra401/,数据目录在 /var/lib/cassandra,日志目录在 /var/log/cassandra,运行以下命令
1 | sudo chown -R cassandra:cassandra /data/runTime/cassandra401/ |
开机启动
创建Systemd服务文件
1 | sudo nano /etc/systemd/system/cassandra.service |
添加以下内容
1 | [Unit] |
启用并启动服务
1 | sudo systemctl daemon-reload |
检查服务状态
1 | sudo systemctl status cassandra |
如果启动失败,查看日志
1 | Feb 13 03:34:16 mail-test cassandra[205447]: Running Cassandra as root user or group is not recommended - please start Cassandra using a different system user. |
报错如下:不建议使用root用户或root组运行Cassandra,请使用其他系统用户启动Cassandra
已返回上面步骤,修改自启配置
1 | sudo journalctl -u cassandra.service --since "2 hours ago" --no-pager |
启动
进入Cassandra目录并启动服务
1 | bin/cassandra -f |
防火墙配置
tcp:9042,7000
验证
1 | nodetool status |
使用CQL Shell
启动CQL Shell与Cassandra交互
1 | bin/cqlsh |
其他
如果忘记了安装目录,可以用下面的命令查找配置文件
1 | sudo find / -name cassandra.yaml 2>/dev/null |
集群参考
配置 Cassandra 4.0.10 集群主要是对各个节点的配置文件(通常是 cassandra.yaml)进行修改,确保各节点能够相互发现并正确通信。下面是一个基本的配置步骤说明,未验证,仅供参考
统一集群名称,在所有节点的 cassandra.yaml 中,将 cluster_name 设置为相同的值,例如
1 | cluster_name: 'MyCluster' |
配置种子节点(Seeds),种子节点用于初始的节点发现,至少指定一个稳定的 IP。建议配置两个或更多,例如
1 | seeds: "192.168.1.1,192.168.1.2" |
注意:种子节点列表在每个节点中都应保持一致
设置节点通信地址,listen_address:指定本机用于集群内部节点间通信的 IP 地址(通常为机器实际的私网 IP)
1 | listen_address: 192.168.1.X # 各节点各自的IP地址 |
rpc_address:用于客户端(如 cqlsh)连接的地址,常设置为 0.0.0.0 或本机 IP
1 | rpc_address: 0.0.0.0 |
如果节点在 NAT 或云环境下部署,还需要设置
broadcast_address:对外公布的 IP 地址,用于集群内部的对等通信。
broadcast_rpc_address:对外公布的 RPC 连接地址。
选择合适的 Snitch
配置 endpoint_snitch 以反映数据中心、机架等拓扑信息。通常建议使用
1 | endpoint_snitch: GossipingPropertyFileSnitch |
如有需要,可编辑 cassandra-rackdc.properties 文件,配置数据中心和机架信息
启动并检查集群状态
在每个节点修改好配置后启动 Cassandra 服务。
使用 nodetool status 命令检查集群状态,确保所有节点状态为 UN(Up/Normal)。
其他注意事项
确保各节点之间网络互通,防火墙或安全组已开放必要的端口(如 7000、7001、9042 等)。
每个节点的硬件配置、JVM 参数等也应根据实际负载进行调优
安装nginx
更新软件包索引
1 | sudo apt update |
安装
1 | sudo apt install nginx |
验证安装版本
1 | nginx -v |
配置文件路径
使用 apt 安装 nginx 后,其默认的配置文件存放在 /etc/nginx 目录下,主要配置文件为:
1 | /etc/nginx/nginx.conf |
此外,虚拟主机(站点)的配置文件通常存放在:
1 | /etc/nginx/sites-available |
1 | /etc/nginx/sites-enabled |
开机自启
使用 apt 安装 nginx 后,Ubuntu 系统通常会自动启用 nginx 的 systemd 服务,这样 nginx 就会在开机时自动启动。可以使用以下命令检查 nginx 是否已设置为开机自启
1 | sudo systemctl is-enabled nginx |
如果输出结果为 enabled,说明 nginx 已经设置为开机自启;
如果输出结果为 disabled 或其他状态,则可以手动启用,执行
1 | sudo systemctl enable nginx |