Freeopen

集群配置备忘

linux 服务器在部署生产环境时,各种中间件的集群配置精华记录。包括 redis、nacos、minio、rabbitMq、kafka 等。 友情提醒,任何用 java 或 类java 语言实现的中间件,尽量不要部署成集群,因为太占内存了,有替代品优先使用替代品。

redis 集群

准备6个节点, 主从一对,共3组

每个节点配置好后,单独启动, 然后再启动集群

redis.conf 配置

# 我认为的关键配置项如下
$ cp /etc/redis/redis.conf /etc/redis/nodes-6372.conf
$ vim /etc/redis/nodes-6372.conf
bind 192.168.0.90
port 6372
daemonize yes
pidfile /var/run/redis_6372.pid
logfile /var/log/redis/redis-6372.log
dbfilename dump-6372.rdb
masterauth password
requirepass password
appendonly yes
appendfilename "appendonly-6372.aof"
cluster-enabled yes
cluster-config-file nodes-6372.conf

节点启动

redis-server nodes-6372.conf

启动集群

redis-cli --cluster create 121.36.24.105:6370 121.36.24.105:6371 121.36.24.105:6372 121.36.24.105:6373 121.36.24.105:6374 121.36.24.105:6375 --cluster-replicas 1 -a password

注:上述命令用于第一次启动, 后面可以单独启动或停止节点, 如果需要重新初始化集群,必须先删除掉 .rdb 和 .aof 文件

nacos 集群

application.properties

spring.datasource.platform=mysql
nacos.core.auth.enabled=true
server.tomcat.accesslog.enabled=false

cluster.conf

192.168.0.1:8848
192.168.0.2:8848
192.168.0.3:8848

nacos-logback.xml

因为日志很占空间,建议修改位置,并将日志输出修改到指定位置

<property name="LOG_HOME" value="/data/nacos-logs"/>

startup.sh

默认启动占2G内存,可以改小点

 # JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
 JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

然后依次启动每个节点即可

minio 集群

至少4个节点, 准备好 minio (server) 和 mc (client) 文件

准备工作目录和脚本

mkdir -p /data/minio/run /data/minio/data
cp minio /data/minio/run/
touch /data/minio/run/run.sh

修改 host 文件

$ vim /etc/hosts

192.168.0.1 mio1
192.168.0.2 mio2
192.168.0.3 mio3
192.168.0.4 mio4

修改 run 脚本

$ vim run.sh

#!/bin/bash

export MINIO_ROOT_USER=user_name
export MINIO_ROOT_PASSWORD=password

/data/minio/run/minio server --config-dir /etc/minio --address "mio1:9001" --console-address ":50000" http://mio{1..4}:9001/data/minio/data >> /var/log/minio.log 2>&1

自定义systemctl服务

参考官方配置

先定义minio 用户名

useradd -s /bin/false -M minio-user

将数据目录授权给 minio-user

定义配置文件 touch /etc/default/minio

MINIO_VOLUMES="/home/dev/workspace/data/minio"
MINIO_OPTS="--address :35555 --console-address :50000"
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_CONFIG_ENV_FILE=/etc/default/minio

touch /usr/lib/systemd/system/minio.service

注释部分是与 centos 不兼容的部分

[Unit]
Description=MinIO
Documentation=https://docs.minio.io/
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
AssertFileNotEmpty=/etc/default/minio

[Service]
# Type=notify
User=minio-user
Group=minio-user
# ProtectProc=invisible
EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

Restart=always
LimitNOFILE=1048576
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target

rabbitMQ 集群

三节点, 镜像集群模式

无论元数据还是queue里的消息都会存在于多个实例上,然后每次你写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息同步。 任何一个机器宕机了,别的机器都可以用。

安装

Erlang 与 RabbitMQ 存在版本对应关系

RabbitMQ 选择版本

根据提示安装即可

防火墙配置

firewall-cmd --zone=public --permanent --add-port=4369/tcp
firewall-cmd --zone=public --permanent --add-port=25672/tcp
firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp
firewall-cmd --zone=public --permanent --add-port=15672/tcp
firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp
firewall-cmd --zone=public --permanent --add-port=1883/tcp
firewall-cmd --zone=public --permanent --add-port=8883/tcp

firewall-cmd --reload

如果你的服务器还启用了 SELinux 的话,你还需要执行下面的命令来让让 RabbitMQ 服务器能够接收发送网络数据:

setsebool -P nis_enabled 1

设置自动启动

systemctl enable rabbitmq-server

启用 Web 管理界面

rabbitmq-plugins enable rabbitmq_management
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
rabbitmqctl add_user admin StrongPassword
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

访问地址为: http://Your_Server_IP:15672/

修改 host 文件

$ vim /etc/hosts
172.16.10.62 rabbit-1
172.16.10.63 rabbit-2
172.16.10.66 rabbit-3

设置erlang

每个节点的 .erlang.cookie 必须保持一致,才能正常通信

使用解压缩方式安装部署的rabbitmq, 位置在 $home/.erlang.cookie

使用rpm等安装包方式进行安装的, 位置在 /var/lib/rabbitmq/.erlang.cookie

scp 拷贝,文件权限 400.

独立启动并组群

# on rabbit1
rabbitmq-server -detached
# on rabbit2
rabbitmq-server -detached
# on rabbit3
rabbitmq-server -detached

组群

# on rabbit2
rabbitmqctl stop_app
# => Stopping node rabbit@rabbit2 ...done.

rabbitmqctl reset
# => Resetting node rabbit@rabbit2 ...

rabbitmqctl join_cluster rabbit@rabbit1
# => Clustering node rabbit@rabbit2 with [rabbit@rabbit1] ...done.

rabbitmqctl start_app
# => Starting node rabbit@rabbit2 ...done.

任意节点查看状态

# on rabbit1
rabbitmqctl cluster_status
# => Cluster status of node rabbit@rabbit1 ...
# => [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]},
# =>  {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}]
# => ...done.

设置镜像队列策略

  1. 在任意一个节点上执行如下操作(这里在node1上执行) 首先,在web界面,登陆后,点击“Admin--Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机,同时给用户“admin”和“guest”均加上权限(在页面直接设置、点点点即可);

  2. 在linux中执行如下命令

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

命令详解:

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]

-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
    ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
        all: 表示在集群中所有的节点上进行镜像
        exactly: 表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
        nodes: 表示在指定的节点上进行镜像,节点名称通过ha-params指定
    ha-params: ha-mode模式需要用到的参数
    ha-sync-mode: 进行队列中消息的同步方式,有效值为automatic和manual
priority: 可选参数,policy的优先级

kafka 集群

单机配置

$ vim config/kraft/server.properties
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://192.168.31.61:9092  # 此处要更改为实际ip,否则只能在本机访问

集群配置

$ vim config/kraft/server.properties
process.roles=broker,controller
node.id=1 # 每节点不同编号
# 配置多个投票候选者
controller.quorum.voters=1@192.168.56.107:9093,2@192.168.56.108:9093,3@192.168.56.109:9093

listeners=PLAINTEXT://192.168.56.107:9092,CONTROLLER://192.168.56.107:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://192.168.56.107:9092  # 此处要更改为实际ip,否则只能在本机访问

生成集群 ID

$ bin/kafka-storage.sh random-uuid
1kwB-zWkQfmc7Lc9wMuiLQ

格式化存储目录

$ bin/kafka-storage.sh format -t 1kwB-zWkQfmc7Lc9wMuiLQ -c config/kraft/server.properties
Formatting /tmp/kraft-combined-logs

启功节点服务

$ bin/kafka-server-start.sh  -daemon config/kraft/server.properties

关闭节点

$ bin/kafka-server-stop.sh stop

Categories: #速查手册 Tags: #linux #handbook


Comments

你有问题需要解决,想要分享反馈,或者讨论更多的想法吗?请随时在这里留下评论! 这个讨论将与 discussion on GitHub 直接连接,所以你也可以直接在那边发表评论