• [问题求助] 【鲲鹏架构系统】【reids、nginx、rabbitmq】如何下载并安装
    【功能模块】reids、nginx、rabbitmq】如何下载并安装【操作步骤&问题现象】1、reids、nginx、rabbitmq】如何下载并安装2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [服务构建器] 【华为云Stack ManageOne 服务构建器】通过服务构建器申请安装一个RabbitMQ集群服务
    ## 1 背景信息 本文档以服务构建起部署RabbitMQ集群为例,演示如何通过服务构建起自动化部署RabbitMQ集群,并成功访问RabbitMQ首页。RabbitMQ单机版参考链接:[RabbitMQ单机版部署](https://bbs.huaweicloud.com/forum/thread-171204-1-1.html) ## 2 业务分析 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称为面向消息的中间件)。服务器端用 Erlang语言编写,支持多种客户端,如:Python、Java、C、PHP、.NET等。用于在分布式系统中存储转发消息,具有很高的易用性和可用性。在业务中为了确保业务的可靠性,通常搭建RabbitMQ集群,在多台弹性云服务器(ECS)中安装RabbitMQ,其中一台作为主服务器,其他作为从服务器,可通过弹性IP(EIP)提供访问主从服务器上的RabbitMQ。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/02/092013r6zxz6cb7xeza3qp.png) ### 3.1 镜像 CentOS 7.9 (x86_64)已预置expect环境且成功安装Cloud-Init。 ### 3.2 软件包 请提前准备以下软件包。 | 软件包名称 | 说明 | | --------------------------------------- | ------------------------------------------------------------ | | rabbitmq-server-3.8.23-1.el7.noarch.rpm | RabbitMQ的安装文件。 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.23/rabbitmq-server-3.8.23-1.el7.noarch.rpm | | erlang-23.3.4.7-1.el7.x86_64.rpm | Erl安装包下载路径 https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.7/erlang-23.3.4.7-1.el7.x86_64.rpm | | socat-1.7.3.2-2.el7.x86_64.rpm | socat安装包下载路径: http://mirror.centos.org/centos/7/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm | ## 4 规划配置 ### 4.1 资源规划 1. 网络规划 | 资源 | 具体操作 | | ---------- | -------------------------------------- | | 虚拟私有云 | 在虚拟私有云Console提前申请VPC和子网。 | | 弹性IP | 在设计vAPP模板时定义弹性IP资源节点。 | 2. 弹性云服务器:需要两台弹性云服务器安装RabbitMQ,具体配置如下。 | 资源 | 推荐配置 | | ---------- | -------- | | 内存 | 4G | | vCPUs | 2 | | 系统盘大小 | 20G | ### 4.2 模板设计 本次模板设计使用服务构建器图形化设计器 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/02/0920468gu0ygxckslgs2v8.png) #### 模板资源节点说明 #### 模板参数节点说明 | 节点名称 | 资源类型 | 作用 | | ----------------------- | -------------------------------- | ------------------------ | | CloudServer25ick | HCS::ECS::CloudServer | RabbitMQ主服务器 | | SoftwareDeployment15jou | HCS::AutoOps::SoftwareDeployment | 主服务器配置绑定 | | SoftwareConfig1dwzs | OS::Heat::SoftwareConfig | 主服务器RabbitMQ安装脚本 | | PublicIP4uiu2 | HCS::EIP::PublicIP | 主服务器弹性IP | | Agent2ing1 | HCS::AutoOps::Agent | 主服务器Agent | | CloudServervhrh | HCS::ECS::CloudServer | RabbitMQ从服务器 | | SoftwareDeployment147i3 | HCS::AutoOps::SoftwareDeployment | 从服务器配置绑定 | | SoftwareConfignboh | OS::Heat::SoftwareConfig | 从服务器RabbitMQ安装脚本 | | PublicIP143em | HCS::EIP::PublicIP | 从服务器弹性IP | | Agent58m2p | HCS::AutoOps::Agent | 从服务器Agent | #### 服务器基础配置 | 参数Label | 参数名称 | 参数说明 | | -------------------- | ------------------------ | ------------------------------------------------------------ | | 可用分区 | availability_zone_xpcccg | 弹性云服务器所在的可用分区。 | | 镜像 | image_xpjqrq | 弹性云服务器的系统镜像,需要指定已创建镜像的ID或名称。 | | 规格 | flavor_ml9jft | 弹性云服务器的系统规格的ID。 | | 容量 | size_g5rhef | 系统盘大小,容量单位为GB。 | | 磁盘类型 | volume_type_j3iauu | 弹性云服务器数据盘对应的磁盘类型,需要与系统所提供的磁盘类型相匹配。磁盘类型枚举值:SATA:普通IO磁盘类型。SAS:高IO磁盘类型。SSD:超高IO磁盘类型。 | | RabbitMQ主服务器名称 | name_llem13 | RabbitMQ主服务器名称。 | | RabbitMQ从服务器名称 | name_33vthr | RabbitMQ从服务器名称。 | #### 服务器网络配置 | 参数Label | 参数名称 | 参数说明 | | --------- | --------------- | ------------------------------------------------------------ | | 外部网络 | type_4ksk42 | 弹性IP外部网络名称。 | | 子网 | subnet_id_yea4p | 弹性云服务器的网卡ID。需要指定vpc_id对应VPC下已创建的网络(network)的ID,UUID格式。 | #### RabbitMQ软件配置 | 参数Label | 参数名称 | 参数说明 | | ------------------ | -------------------------- | ------------------------------------------------------------ | | 管理员用户名 | admin_user_30te2o | 服务器管理员的用户名。 | | 管理员密码 | admin_pass_6ri1zw | 服务器管理员的密码。 | | 脚本类型 | type_onju69 | 脚本文件的类型,仅支持python,shell。 | | RabbitMQ管理员密码 | password_j8svvy | RabbitMQ管理员密码。 | | RabbitMQ下载地址 | rabbitmq_source_url_5zbco8 | RabbitMQ安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/rabbitmq-server-3.8.23-1.el7.noarch.rpm) | | Erl下载地址 | erl_source_url_rqa8cm | Erlang安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/erlang-23.3.4.7-1.el7.x86_64.rpm) | | Socat下载地址 | socat_source_url_cyjd7u | Socat安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/socat-1.7.3.2-2.el7.x86_64.rpm) | #### 输出信息节点说明 | 输出信息 | 描述 | | ------------------------ | ---------------------------------- | | 主服务器私有IP地址 | RabbitMQ主服务器的私有IP地址。 | | 从服务器私有IP地址 | RabbitMQ从服务器的私有IP地址。 | | 主服务器RabbitMQ登陆地址 | RabbitMQ集群主服务器登陆页面链接。 | | 从服务器RabbitMQ登陆地址 | RabbitMQ集群从服务器登陆页面链接。 | ### 4.3 脚本设计 1. 主服务器安装脚本内容 ```shell #!/bin/bash ERL_SOURCE_URL=erl_source_url SOCAT_SOURCE_URL=socat_source_url RABBITMQ_SOURCE_URL=rabbitmq_source_url PASSWORD=password LOCAL_TEMP=/opt/tmp LOG_PATH=/var/log/rabbitmq_install.log [ ! -d $LOCAL_TEMP ] && mkdir -p $LOCAL_TEMP echo "Start to download rpm package." >>${LOG_PATH} cd ${LOCAL_TEMP} ERL_PACKAGE_NAME=${ERL_SOURCE_URL##*/} wget -qc ${ERL_SOURCE_URL} -O ${ERL_PACKAGE_NAME} SOCAT_PACKAGE_NAME=${SOCAT_SOURCE_URL##*/} wget -qc ${SOCAT_SOURCE_URL} -O ${SOCAT_PACKAGE_NAME} RABBITMQ_PACKAGE_NAME=${RABBITMQ_SOURCE_URL##*/} wget -qc ${RABBITMQ_SOURCE_URL} -O ${RABBITMQ_PACKAGE_NAME} echo "Download rpm package success." >>${LOG_PATH} echo "Start to install rpm package." >>${LOG_PATH} rpm -ivh ${ERL_PACKAGE_NAME} rpm -ivh ${SOCAT_PACKAGE_NAME} rpm -ivh ${RABBITMQ_PACKAGE_NAME} echo "Install rpm package success." >>${LOG_PATH} echo "Start to delete rpm package." >>${LOG_PATH} rm -f ${ERL_PACKAGE_NAME} ${SOCAT_PACKAGE_NAME} ${RABBITMQ_PACKAGE_NAME} echo "Delete rpm package success." >>${LOG_PATH} #Start rabbit service echo "Start RabbitMQ service." >>${LOG_PATH} systemctl enable rabbitmq-server systemctl start rabbitmq-server echo "RabbitMQ service start success." >>${LOG_PATH} #add ip-hostname to hosts local_ip=$(ifconfig eth0 | grep "inet " | awk '{print $2}') hostname=$(hostname) echo "${local_ip} ${hostname%%.*}" >>/etc/hosts #Enable web rabbitmq_management echo "Enable web rabbitmq_management." >>${LOG_PATH} rabbitmq-plugins enable rabbitmq_management #add user echo "Start to add user admin to rabbitmq." >>${LOG_PATH} rabbitmqctl add_user admin ${PASSWORD} rabbitmqctl set_user_tags admin administrator rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" rabbitmqctl delete_user guest echo "Add user admin to rabbitmq success." >>${LOG_PATH} echo "Start to config firewall." >>${LOG_PATH} firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --zone=public --add-port=25672/tcp --permanent firewall-cmd --zone=public --add-port=5672/tcp --permanent firewall-cmd --zone=public --add-port=4369/tcp --permanent firewall-cmd --reload echo "Config firewall success." >>${LOG_PATH} echo "Execute install rabbitmq master node script success." >>${LOG_PATH} ``` 2. 主服务器安装脚本输入参数说明 | 参数Label | 参数名称 | 参数说明 | | ------------------ | -------------------------- | ------------------------------------------------------------ | | RabbitMQ管理员密码 | password_j8svvy | RabbitMQ管理员密码。 | | RabbitMQ下载地址 | rabbitmq_source_url_5zbco8 | RabbitMQ安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/rabbitmq-server-3.8.23-1.el7.noarch.rpm) | | Erl下载地址 | erl_source_url_rqa8cm | Erlang安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/erlang-23.3.4.7-1.el7.x86_64.rpm) | | Socat下载地址 | socat_source_url_cyjd7u | Socat安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/socat-1.7.3.2-2.el7.x86_64.rpm) | 3. 从服务器安装脚本内容 ```bash #!/bin/bash ERL_SOURCE_URL=erl_source_url SOCAT_SOURCE_URL=socat_source_url RABBITMQ_SOURCE_URL=rabbitmq_source_url PASSWORD=password ADMIN_IP=admin_ip ADMIN_HOST_PASSWORD=admin_host_password LOCAL_TEMP=/opt/tmp LOG_PATH=/var/log/rabbitmq_install.log [ ! -d $LOCAL_TEMP ] && mkdir -p $LOCAL_TEMP echo "Start to download rpm package." >>${LOG_PATH} cd ${LOCAL_TEMP} ERL_PACKAGE_NAME=${ERL_SOURCE_URL##*/} wget -qc ${ERL_SOURCE_URL} -O ${ERL_PACKAGE_NAME} SOCAT_PACKAGE_NAME=${SOCAT_SOURCE_URL##*/} wget -qc ${SOCAT_SOURCE_URL} -O ${SOCAT_PACKAGE_NAME} RABBITMQ_PACKAGE_NAME=${RABBITMQ_SOURCE_URL##*/} wget -qc ${RABBITMQ_SOURCE_URL} -O ${RABBITMQ_PACKAGE_NAME} echo "Download rpm package success." >>${LOG_PATH} echo "Start to install rpm package." >>${LOG_PATH} rpm -ivh ${ERL_PACKAGE_NAME} rpm -ivh ${SOCAT_PACKAGE_NAME} rpm -ivh ${RABBITMQ_PACKAGE_NAME} echo "Install rpm package success." >>${LOG_PATH} echo "Start to delete rpm package." >>${LOG_PATH} rm -f ${ERL_PACKAGE_NAME} ${SOCAT_PACKAGE_NAME} ${RABBITMQ_PACKAGE_NAME} echo "Delete rpm package success." >>${LOG_PATH} #Start rabbit service echo "Start RabbitMQ service." >>${LOG_PATH} systemctl enable rabbitmq-server systemctl start rabbitmq-server echo "RabbitMQ service start success." >>${LOG_PATH} #add ip-hostname to hosts local_ip=$(ifconfig eth0 | grep "inet " | awk '{print $2}') hostname=$(hostname) echo "${local_ip} ${hostname%%.*}" >>/etc/hosts #Enable web rabbitmq_management echo "Enable web rabbitmq_management." >>${LOG_PATH} rabbitmq-plugins enable rabbitmq_management >>${LOG_PATH} #add user echo "Start to add user admin to rabbitmq." >>${LOG_PATH} rabbitmqctl add_user admin ${PASSWORD} rabbitmqctl set_user_tags admin administrator rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" rabbitmqctl delete_user guest echo "Add user admin to rabbitmq success." >>${LOG_PATH} echo "Start to config firewall." >>${LOG_PATH} firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --zone=public --add-port=25672/tcp --permanent firewall-cmd --zone=public --add-port=5672/tcp --permanent firewall-cmd --zone=public --add-port=4369/tcp --permanent firewall-cmd --reload echo "Config firewall success." >>${LOG_PATH} echo "Start copy master node erlang.cookie to current node." >>${LOG_PATH} expect var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie expect { "Are you sure you want to continue connecting (yes/no)?" { send "yes\n"; exp_continue } "*assword:" { send "${ADMIN_HOST_PASSWORD}\n"; exp_continue } eof { exit } } EOF echo "Copy master node erlang.cookie to current node success." >>${LOG_PATH} echo "Start to config hostname to master node and current node." >>${LOG_PATH} expect etc/hostname /tmp/hostname expect { "Are you sure you want to continue connecting (yes/no)?" { send "yes\n"; exp_continue } "*assword:" { send "${ADMIN_HOST_PASSWORD}\n"; exp_continue } eof { exit } } EOF expect > /etc/hosts" expect { "Are you sure you want to continue connecting (yes/no)?" { send "yes\n"; exp_continue } "*assword:" { send "${ADMIN_HOST_PASSWORD}\n"; exp_continue } eof { exit } } EOF ADMIN_HOSTNAME=$(cat /tmp/hostname) && rm -f /tmp/hostname echo "${ADMIN_IP} ${ADMIN_HOSTNAME%%.*}" >>/etc/hosts echo "Config hostname to master node and current node success." >>${LOG_PATH} echo "Restart all nodes rabbitmq-server." >>${LOG_PATH} expect no)?" { send "yes\n"; exp_continue } "*assword:" { send "${ADMIN_HOST_PASSWORD}\n"; exp_continue } eof { exit } } EOF systemctl restart rabbitmq-server echo "Restart all nodes rabbitmq-server success." >>${LOG_PATH} echo "Start to join cluster." >>${LOG_PATH} rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@${ADMIN_HOSTNAME%%.*} rabbitmqctl start_app rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}' echo "Join cluster success." >>${LOG_PATH} echo "Execute install rabbitmq slave node script success." >>${LOG_PATH} ``` 4. 从服务器安装脚本输入参数说明 | 参数Label | 参数名称 | 参数说明 | | ------------------ | -------------------------- | ------------------------------------------------------------ | | RabbitMQ管理员密码 | password_j8svvy | RabbitMQ管理员密码。 | | RabbitMQ下载地址 | rabbitmq_source_url_5zbco8 | RabbitMQ安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/rabbitmq-server-3.8.23-1.el7.noarch.rpm) | | Erl下载地址 | erl_source_url_rqa8cm | Erlang安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/erlang-23.3.4.7-1.el7.x86_64.rpm) | | Socat下载地址 | socat_source_url_cyjd7u | Socat安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/socat-1.7.3.2-2.el7.x86_64.rpm) | | 管理员密码 | admin_pass_6ri1zw | 服务器管理员的密码。 | | 管理服务器IP | admin_ip | 管理服务器私有IP地址 。 | ## 5 申请资源栈 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/02/092217fvnfwjyymtesmpjl.png) ## 6 服务调测 本示例通过脚本自动将RabbitMQ集群安装成功,可以通过弹性IP访问RabbitMQ的首页。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/02/0922290rg2ub3r4oxxdwye.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/02/092239vitqpjph7lyfmloa.png)
  • [服务构建器] 【华为云Stack ManageOne 服务构建器】通过服务构建器申请安装一个RabbitMQ单机版服务
    ## 1 背景信息 本文档以服务构建器部署RabbitMQ单机版为例,演示如何通过服务构建器自动化部署RabbitMQ服务 。RabbitMQ集群部署参考链接:[RabbitMQ集群部署](https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=171219&page=1&authorid=&replytype=&extra=#pid1385124) ## 2 业务分析 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称为面向消息的中间件)。服务器端用 Erlang语言编写,支持多种客户端,如:Python、Java、C、PHP、.NET等。用于在分布式系统中存储转发消息,具有很高的易用性和可用性。在弹性云服务器(ECS)中安装RabbitMQ,并通过弹性IP(EIP)提供访问能力。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/201515dkl0qwvhjgebauuj.png) ## 3 准备 ### 3.1 镜像 CentOS 7.9 (x86_64)且成功安装Cloud-Init ### 3.2 软件包 请提前准备以下软件包。 | 软件包名称 | 说明 | | ----------------------------------------- | ------------------------------------------------------------ | | rabbitmq-server-3.8.23-1.el7.noarch.rpm | RabbitMQ的安装文件。 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.23/rabbitmq-server-3.8.23-1.el7.noarch.rpm | | erlang-23.3.4.7-1.el7.x86_64.rpm | Erl安装包下载路径 https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.7/erlang-23.3.4.7-1.el7.x86_64.rpm | | socat-1.7.3.2-2.el7.x86_64.rpm | socat安装包下载路径: http://mirror.centos.org/centos/7/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm | ## 4 规划配置 ### 4.1 资源规划 1. 网络规划 | 资源 | 具体操作 | | ---------- | ------------------------------------------ | | 虚拟私有云 | 在虚拟私有云Console提前申请VPC和子网。 | | 弹性IP | 在设计服务构建器模板时定义弹性IP资源节点。 | 2. 弹性云服务器:需要一台弹性云服务器安装RabbitMQ,具体配置如下。 | 资源 | 推荐配置 | | ---------- | -------- | | 内存 | 4G | | vCPUs | 2 | | 系统盘大小 | 20G | ### 4.2 模板设计 本次模板设计使用服务构建器图形化设计器 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/2022402frxocmpxqwvc6q5.png) 模板资源节点说明: | 节点名称 | 资源类型 | 作用 | | ------------------- | ------------------------ | ---------------- | | PublicIP39ddh | HCS::EIP::PublicIP | 弹性IP | | CloudServer4me49 | HCS::ECS::CloudServer | RabbitMQ服务器 | | MultipartMime250le | OS::Heat::MultipartMime | 配置绑定 | | SoftwareConfig1m8zk | OS::Heat::SoftwareConfig | RabbitMQ安装脚本 | ### 模板参数节点说明 #### 服务器基础配置 | 参数Label | 参数名称 | 参数说明 | | ---------- | ------------------------ | ------------------------------------------------------------ | | 可用分区 | availability_zone_x9z6j0 | 弹性云服务器所在的可用分区。 | | 镜像 | image_f1yhbz | 弹性云服务器的系统镜像,需要指定已创建镜像的ID或名称。 | | 规格 | flavor_e09n50 | 弹性云服务器的系统规格的ID。 | | 系统盘大小 | size_1y35a2 | 系统盘大小,容量单位为GB。 | | 磁盘类型 | volume_type_977lhu | 弹性云服务器数据盘对应的磁盘类型,需要与系统所提供的磁盘类型相匹配。磁盘类型枚举值:SATA:普通IO磁盘类型。SAS:高IO磁盘类型。SSD:超高IO磁盘类型。 | | 服务器名称 | name_le0tr8 | 弹性云服务器名称。 | #### 服务器网络配置 | 参数Label | 参数名称 | 参数说明 | | --------- | ---------------- | ------------------------------------------------------------ | | 外部网络 | type_ttuyl0 | 弹性I外部网络名称。 | | 子网 | subnet_id_szm2x5 | 弹性云服务器的网卡ID。需要指定vpc_id对应VPC下已创建的网络(network)的ID,UUID格式。 | #### RabbitMQ软件配置 | 参数Label | 参数名称 | 参数说明 | | ------------------ | -------------------------- | ------------------------------------------------------------ | | RabbitMQ管理员密码 | password_darezq | RabbitMQ管理员密码 | | RabbitMQ下载地址 | rabbitmq_source_url_qbipvf | RabbitMQ安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/rabbitmq-server-3.8.23-1.el7.noarch.rpm) | | Erlang下载地址 | erl_source_url_g01inw | Erlang安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/erlang-23.3.4.7-1.el7.x86_64.rpm) | | Socat下载地址 | socat_source_url_xxyfii | Socat安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/socat-1.7.3.2-2.el7.x86_64.rpm) | #### 输出信息节点说明 | 输出信息 | 描述 | | ---------------- | ---------------------------- | | RabbitMQ登陆地址 | RabbitMQ登陆页面链接 | | 服务器IP地址 | RabbitMQ服务器的私有IP地址。 | ### 4.3 脚本设计 1. 脚本内容 ```shell #!/bin/bash ERL_SOURCE_URL=erl_source_url SOCAT_SOURCE_URL=socat_source_url RABBITMQ_SOURCE_URL=rabbitmq_source_url PASSWORD=password LOCAL_TEMP=/opt/tmp LOG_PATH=/var/log/rabbitmq_install.log [ ! -d $LOCAL_TEMP ] && mkdir -p $LOCAL_TEMP echo "Start to download rpm package." >>${LOG_PATH} cd ${LOCAL_TEMP} ERL_PACKAGE_NAME=${ERL_SOURCE_URL##*/} wget -qc ${ERL_SOURCE_URL} -O ${ERL_PACKAGE_NAME} SOCAT_PACKAGE_NAME=${SOCAT_SOURCE_URL##*/} wget -qc ${SOCAT_SOURCE_URL} -O ${SOCAT_PACKAGE_NAME} RABBITMQ_PACKAGE_NAME=${RABBITMQ_SOURCE_URL##*/} wget -qc ${RABBITMQ_SOURCE_URL} -O ${RABBITMQ_PACKAGE_NAME} echo "Download rpm package success." >>${LOG_PATH} echo "Start to install rpm package." >>${LOG_PATH} rpm -ivh ${ERL_PACKAGE_NAME} rpm -ivh ${SOCAT_PACKAGE_NAME} rpm -ivh ${RABBITMQ_PACKAGE_NAME} echo "Install rpm package success." >>${LOG_PATH} echo "Start to delete rpm package." >>${LOG_PATH} rm -f ${ERL_PACKAGE_NAME} ${SOCAT_PACKAGE_NAME} ${RABBITMQ_PACKAGE_NAME} echo "Delete rpm package success." >>${LOG_PATH} #Start rabbit service echo "Start to RabbitMQ service." >>${LOG_PATH} systemctl enable rabbitmq-server systemctl start rabbitmq-server echo "RabbitMQ service start success." >>${LOG_PATH} #add ip-hostname to hosts local_ip=$(ifconfig eth0 | grep "inet " | awk '{print $2}') hostname=$(hostname) echo "${local_ip} ${hostname%%.*}" >>/etc/hosts #Enable web rabbitmq_management echo "Enable web rabbitmq_management." >>${LOG_PATH} rabbitmq-plugins enable rabbitmq_management #add user echo "Start to add user admin to rabbitmq." >>${LOG_PATH} rabbitmqctl add_user admin ${PASSWORD} rabbitmqctl set_user_tags admin administrator rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" rabbitmqctl delete_user guest echo "Add user admin to rabbitmq success." >>${LOG_PATH} echo "Start to config firewall." >>${LOG_PATH} firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --zone=public --add-port=5672/tcp --permanent firewall-cmd --reload echo "Config firewall success." >>${LOG_PATH} echo "Execute install rabbitmq script success." >>${LOG_PATH} ``` 2. 脚本输入参数说明 | 参数Label | 参数名称 | 参数说明 | | ------------------ | -------------------------- | ------------------------------------------------------------ | | RabbitMQ管理员密码 | password_darezq | RabbitMQ管理员密码 | | RabbitMQ下载地址 | rabbitmq_source_url_qbipvf | RabbitMQ安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/rabbitmq-server-3.8.23-1.el7.noarch.rpm) | | Erlang下载地址 | erl_source_url_g01inw | Erlang安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/erlang-23.3.4.7-1.el7.x86_64.rpm) | | Socat下载地址 | socat_source_url_xxyfii | Socat安装包下载地址。(例如:http://xx.xx.xx.xx/packages/x86_64/rabbitmq/socat-1.7.3.2-2.el7.x86_64.rpm) | ## 5 申请资源栈 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/201659wcku1hvg1tvi0oim.png) ## 6 服务调测 本示例通过脚本自动将RabbitMQ安装成功,可以通过弹性IP访问RabbitMQ的首页。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/2017181xgw9qebc9vyaxie.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/201728puypezkebvhh6fkz.png)
  • [问题求助] 镜像有RabbitMQ但是没有Erlang啊,内网的小伙很烦恼啊
    [回复] 镜像有RabbitMQ但是没有Erlang啊,内网的小伙很烦恼啊[回复] Erlang官网地址也打不开啊,没权限的小伙很烦恼啊
  • [问题求助] 【ARM 架构鲲鹏类型服务器产品】【安装rabbitmq】安装rabbit后,启动失败
    【功能模块】弹性云服务器 ECS 上安装rabbitmq,启动失败,【操作步骤&问题现象】1、按照 https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0143982115.html 操作,到     3.安装RabbitMQ        c.安装完毕,启动RabbMQ        service rabbitmq-server start        报错 ,起不来2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] RabbitMQ 概念
    RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括:
  • [技术干货] RabbitMQ如何保证消息的顺序性
     消息队列中的若干消息如果是对同一个数据进行操作,这些操作又具有先后关系,必须按顺序执行,否则可能会造成数据错误。  比如有三个请求,是对数据库中的同一条数据进行了插入->更新->删除操作,执行顺序必须保证,如果变成删除->更新->插入就很可笑了,造成最终数据不一致。顺序错乱的场景:  一个queue,有多个consumer去消费,这样就会造成顺序的错误,consumer从MQ里面读取数据是有序的,但是每个consumer的执行时间是不固定的,无法保证先读到消息的consumer一定先执行完操作,这样就会出现消息并没有按照顺序执行,造成数据顺序错误。rabbitmq如何保证消息的消费顺序  将原来的一个queue拆分成多个queue,每个queue都有一个自己的consumer。该种方案的核心是生产者在投递消息的时候根据业务数据关键值(例如订单ID哈希值对订单队列数取模)来将需要保证先后顺序的同一类数据(同一个订单的数据) 发送到同一个queue当中,让同一个consumer来按顺序处理。
  • [技术干货] RabbitMQ如何保证消息的顺序性
     消息队列中的若干消息如果是对同一个数据进行操作,这些操作又具有先后关系,必须按顺序执行,否则可能会造成数据错误。  比如有三个请求,是对数据库中的同一条数据进行了插入->更新->删除操作,执行顺序必须保证,如果变成删除->更新->插入就很可笑了,造成最终数据不一致。顺序错乱的场景:  一个queue,有多个consumer去消费,这样就会造成顺序的错误,consumer从MQ里面读取数据是有序的,但是每个consumer的执行时间是不固定的,无法保证先读到消息的consumer一定先执行完操作,这样就会出现消息并没有按照顺序执行,造成数据顺序错误。rabbitmq如何保证消息的消费顺序  将原来的一个queue拆分成多个queue,每个queue都有一个自己的consumer。该种方案的核心是生产者在投递消息的时候根据业务数据关键值(例如订单ID哈希值对订单队列数取模)来将需要保证先后顺序的同一类数据(同一个订单的数据) 发送到同一个queue当中,让同一个consumer来按顺序处理。
  • [技术干货] openeuler20.03 安装RabbitMQ 3.8
    1.配置yum源:         华为云ecs默认即可,物理机可以使用openeuler 20.03 ios文件制作本地yum源2.安装依赖包yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel yum install libtool libtool-ltdl-devel libevent-devel lua ncurses-devel openssl-devel flex unixODBC-devel unixODBC3.安装erlang。        RabbitMQ 3.8要求erlang版本在21.3以上,本文采用22版本。        源码包下载链接http://erlang.org/download/otp_src_22.0.tar.gz        源码包上传到本地服务器之后:tar -zxvf otp_src_21.0.tar.gz && cd otp_src_21.3 //解压源码包并进入目录 ./configure --prefix=/usr/local/erlang make -j$(nproc) && make -j$(nproc) ln -s /usr/local/erlang/bin/erl /usr/bin/erl //建立软链,需要验证bin目录位置        验证安装:4.安装RabbitMQ 3.8        下载RabbitMQ 3.8包并上传到服务器/usr/local/src目录,下载地址  https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.0/rabbitmq-server-generic-unix-3.8.0.tar.xzxz -d rabbitmq-server-generic-unix-3.8.1.tar.xz //解压 tar xvf rabbitmq-server-generic-unix-3.8.1.tar //解压 vim /etc/profile //创建环境变量,添加下一行内容 export PATH=$PATH:/usr/local/src/rabbitmq_server-3.8.1/sbin 文件保存后,source /etc/profile 生效       启动验证:
  • [问题求助] 【鲲鹏服务器】使用docker运行rabbitmq
    在鲲鹏服务器上使用docker运行一个rabbitmq的容器,创建成功,但是是Exited的状态,使用docker logs 看到的日志如下,该怎样解决,求大神解答ps:docker版本是18.03.0       rabbitmq用的3.6.12的镜像
  • [SaaS] RabbitMQ按queue名称分租户,消息层面是否支持租户隔离?
    可采用routingkey的方式进行租户消息队列的区分。相关解读如下:对于RabbitMQ消息发布者而言它只负责把消息发布出去,甚至它也不知道消息是发到哪个queue,消息通过exchange到达queue,exchange的职责非常简单,就是一边接收发布者的消息一边把这些消息推到queue中。而exchange是怎么知道消息应该推到哪个queue呢,这就要通过绑定queue与exchange时的routingkey了,通过代码进行绑定并且指定routingkey,下面有一张关系图,p(发布者) —> x(exchange) bindding(绑定关系也就是我们的routingkey) 红色代表着queue————————————————原文链接:https://blog.csdn.net/weixin_38070406/article/details/82903677
  • [技术干货] 【转】win dows下 安装 rabbitMQ 及操作常用命令(操作创建用户密码 角色等)
    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。1.安装Erlang 所以在安装rabbitMQ之前,需要先安装Erlang 。小编使用的是otp_win64_18.1 ,需要其他版本或者32位系统的,可以去官网下载。全部点击“下一步”就行。有的选择其他的安装方式,可能需要添加一下系统环境变量(正常安装的也要检查下):有最好,没有的话就手动添加嘛。2.安装RabbitMQ下载运行rabbitmq-server-3.6.5 ,需要其他版本或者32位系统的,可以去官网下载。依旧可以不改变默认进行安装。需要注意:默认安装的RabbitMQ 监听端口是56723.配置激活 RabbitMQ's Management Plugin使用RabbitMQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。打开命令窗口:输入命令:"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin\rabbitmq-plugins.bat" enable rabbitmq_management这样,就安装好插件了,是不是能使用了呢?别急,需要重启服务才行,使用命令:net stop RabbitMQ && net start RabbitMQ这时候,也许会出现这种结果:“发生错误:发生系统错误 5。  拒绝访问。”这是什么鬼?查了下,原来,5代表的是:不是系统管理员权限。问题解决方案:使用管理员打开cmd再执行此命令:这样就结束了吗?当然没有。创建用户,密码,绑定角色使用rabbitmqctl控制台命令(位于C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin>)来创建用户,密码,绑定权限等。注意:安装路径不同的请看仔细啊。rabbitmq的用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。查看已有用户及用户的角色:rabbitmqctl.bat list_users新增一个用户:rabbitmqctl.bat add_user username password此时来看下我们当前用户哈:eric 后面没有“[administrator]”这个administrator是干嘛用的呢?这就涉及到用户角色问题了:按照我个人理解,rabbitmq用户角色可分为五类:超级管理员, 监控者, 策略制定者, 普通管理者以及其他。(1) 超级管理员(administrator)可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。(2) 监控者(monitoring)可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) (3) 策略制定者(policymaker)可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。(4) 普通管理者(management)仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。(5) 其他的无法登陆管理控制台,通常就是普通的生产者和消费者。好啦,我们也给 eric 变成 “超级管理员” 角色:rabbitmqctl.bat set_user_tags username administrator再看下结果哈:当然,除了上面的administrator 还有 monitoring、policymaker、management、自定义名称 ,对应上面介绍到的不同的角色。像我们人一样,我们角色除了是公司的员工,还是父母的孩子、子女的爸妈等,用户也可以同时具有多个角色,设置方式:rabbitmqctl.bat  set_user_tags  username tag1 tag2 ...现在总觉得guest 这个不安全(它的默认密码是guest),想更改密码:rabbitmqctl change_password userName newPassword有的人也许会说,我就是看guest不爽,老子新增了administrator用户了,就是想干掉它,可以:rabbitmqctl.bat delete_user username 这时,可能有人就要问了:命令框是只有一个用户了,你怎么操作啊?怎么查看执行情况啊/ 当然有路子啦:使用浏览器打开 http://localhost:15672 访问Rabbit Mq的管理控制台,使用刚才创建的账号登陆系统:其实,除了可查看所有的信息 ,上面的命令 增删改查、权限设置,都可以在这个页面完成,还可以依据业务需求设置策略(policy),具体的就不在这里啰嗦了,大家可以看看网上的帖子。权限设置用户有了角色,那也需要权限设置啊,别急,慢慢来:按照官方文档,用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。我们配置权限会影响到exchange、queue的声明和删除。读写权限影响到从queue里取消息、向exchange发送消息以及queue和exchange的绑定(binding)操作。例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限权限相关命令为:(1) 设置用户权限rabbitmqctl  set_permissions  -p  VHostPath  User  ConfP  WriteP  ReadP(2) 查看(指定hostpath)所有用户的权限信息rabbitmqctl  list_permissions  [-p  VHostPath](3) 查看指定用户的权限信息rabbitmqctl  list_user_permissions  User(4)  清除用户的权限信息rabbitmqctl  clear_permissions  [-p VHostPath]  User 现在环境搭好了,用户、角色、权限全部设置好,开始进行code。转自:https://www.cnblogs.com/lykbk/p/erewererewr32434343.html  
  • [交流分享] RabbitMQ-3.7.12交叉编译方法
    RabbitMQ-3.7.12 Atlas500-pro服务器安装一、 软件介绍RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。二、 支持的操作系统经过实测,以下操作系统可以完整运行RabbitMQ的全部功能:     CentOS7.6三、 支持版本和获取方式     建议使用rabbitmq-3.7.12     下载地址:     https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.12/rabbitmq-server-3.7.12-1.el7.noarch.rpm四、 编译安装与测试1 依赖安装yum install libtool libtool-ltdl-devel libevent-devel lua  ncurses-devel openssl-devel flex -y2 编译安装1) 安装mabbitMQ之前先得保证erlang版本在20.3版本以上2) 安装erlang获取源代码:    wget http://erlang.org/download/otp_src_20.3.tar.gz解压安装包:    tar -zxvf otp_src_20.3.tar.gz进入安装目录:    cd otp_src_20.3生成makefile文件:    ./configure编译安装makefile文件:    make    make install3) 测试完成编译软件:进入erl环境erl,回车显示以下信息输入“1+1.”回车显示如下,说明安装成功4) 安装RabbitMQ获取安装包wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.12/rabbitmq-server-3.7.12-1.el7.noarch.rpmNote:这里使用3.7.12版本是依据erlang的20.3版本来的,具体版本信息查看:https://www.rabbitmq.com/which-erlang.html安装:rpm -ivh rabbitmq-server-3.7.12-1.el7.noarch.rpm --nodeps3 验证测试1) 启动RabbitMQ:rabbitmq-server -detached2) 查看运行状态: rabbitmqctl status出现以下内容,说明启动成功:4 问题总结Rabbitmq-server启动不了 如果出现 “Error: unable to perform an operation on node 'rabbit@localhost'  ” 问题多是 rabbitmq-server于erlang的版本不匹配1. 可以通过erl 查询erlang的版本号2.如果按erlang交叉编译、install的不行(默认安装在/usr/local/lib/erlang/)下,需要手动卸载:rm -rf  /usr/local/bin/erl*rm –rf /usr/local/lib/erlang3.  如果实在不行,可以尝试去 https://www.erlang-solutions.com/resources/download.html 下载,找到对应的arm64版本wget  https://packages.erlang-solutions.com/erlang/rpm/centos/7/aarch64/esl-erlang_20.3.8.26-1~centos~7_arm64.rpmrpm -i esl-erlang_20.3.8.26-1~centos~7_arm64.rpm默认安装路径在 /usr/lib/erlang/4. 配置#!/bin/shecho "[{rabbit,[{loopback_users,[]}]}]." > /etc/rabbitmq/rabbitmq.configecho "127.0.0.1 mq" >> /etc/hostsecho "rabbitmq" >> /etc/hostnameexport HOSTNAME=mqsystemctl enable rabbitmq-server.servicesystemctl daemon-reloadsystemctl start rabbitmq-server.servicerabbitmqctl add_user jysp jydwrabbitmqctl add_vhost jysp_vhostrabbitmqctl set_permissions -p jysp_vhost jysp ".*" ".*" ".*"rabbitmqctl set_user_tags jysp administratorrabbitmq-plugins enable rabbitmq_management rabbitmq_web_stompsystemctl stop rabbitmq-server.service
  • [问题求助] 是否有RabbitMQ和KAFKA的宣传胶片
    是否有RabbitMQ和KAFKA的宣传胶片
  • [Java] ​rabbitmq 的使用场景
    ①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。②. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法。③. 应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。④. 消息驱动的架构(EDA),系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。⑤. 应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。⑥. 跨局域网,甚至跨城市的通讯(CDN行业),比如北京机房与广州机房的应用程序的通信。
总条数:49 到第
上滑加载中