17网一起做网站广州,装修房子的效果图,vs和dw做网站的区别,html创建站点的步骤RabbitMQ集群搭建 Linux安装RabbitMQ下载安装基本操作命令开启管理界面及配置 RabbitMQ集群搭建确定rabbitmq安装目录启动第一个节点启动第二个节点停止命令创建集群查看集群集群管理 RabbitMQ镜像集群配置启用HA策略创建一个镜像队列测试镜像队列 负载均衡-HAProxy安装HAProxy… RabbitMQ集群搭建 Linux安装RabbitMQ下载安装基本操作命令开启管理界面及配置 RabbitMQ集群搭建确定rabbitmq安装目录启动第一个节点启动第二个节点停止命令创建集群查看集群集群管理 RabbitMQ镜像集群配置启用HA策略创建一个镜像队列测试镜像队列 负载均衡-HAProxy安装HAProxy配置haproxy启动HAProxy服务查看HAProxy监控Java代码连接MQ集群 Linux安装RabbitMQ
下载
RabbitMQ官方下载页https://www.rabbitmq.com/download.html
RabbitMQ下载https://github.com/rabbitmq/rabbitmq-server/tags
erlang下载https://github.com/rabbitmq/erlang-rpm/releases
下载RabbitMQ与erlang https://packagecloud.io/rabbitmq
安装
注意在下载 rabbitmq-server与erlang包时若包名含el8代表需要Centos8才能安装例如 rabbitmq-server-3.11.13-1.el8.noarch.rpm否则安装将出现如下类似异常
[rootnode01 ~]# rpm -ivh erlang-25.3-1.el8.x86_64.rpm
警告erlang-25.3-1.el8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID cc4bbe5b: NOKEY
错误依赖检测失败libcrypto.so.1.1()(64bit) 被 erlang-25.3-1.el8.x86_64 需要libcrypto.so.1.1(OPENSSL_1_1_0)(64bit) 被 erlang-25.3-1.el8.x86_64 需要libcrypto.so.1.1(OPENSSL_1_1_1)(64bit) 被 erlang-25.3-1.el8.x86_64 需要libstdc.so.6(CXXABI_1.3.9)(64bit) 被 erlang-25.3-1.el8.x86_64 需要libtinfo.so.6()(64bit) 被 erlang-25.3-1.el8.x86_64 需要libz.so.1(ZLIB_1.2.7.1)(64bit) 被 erlang-25.3-1.el8.x86_64 需要由于服务器时CentOS7故寻找包名带el7的软件包这里使用如下包
rabbitmq-server-3.6.5-1.noarch.rpmerlang-18.3-1.el7.centos.x86_64.rpm下载地址https://download.csdn.net/download/qq_38628046/87697057
1.安装或更新依赖环境
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc
gcc-c kernel-devel m4 ncurses-devel tk tc xzyum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel
readline-devel tk-devel gcc make -y2.安装erlang
[rootnode01 ~]# rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...1:erlang-18.3-1.el7.centos ################################# [100%]3.安装rabbitmq
[rootnode01 ~]# rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
警告rabbitmq-server-3.6.5-1.noarch.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 6026dfca: NOKEY
错误依赖检测失败socat 被 rabbitmq-server-3.6.5-1.noarch 需要
访问https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/下载依赖 wget http://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm[rootnode01 ~]# rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
警告socat-1.7.3.2-2.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 87e360b8: NOKEY
错误依赖检测失败tcp_wrappers 被 socat-1.7.3.2-2.el7.x86_64 需要
接着再访问https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/下载依赖
wget http://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/tcp_wrappers-7.6-77.el7.x86_64.rpm[rootnode01 ~]# rpm -ivh tcp_wrappers-7.6-77.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...1:tcp_wrappers-7.6-77.el7 ################################# [100%]
[rootnode01 ~]# rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
警告socat-1.7.3.2-2.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 87e360b8: NOKEY
准备中... ################################# [100%]
正在升级/安装...1:socat-1.7.3.2-2.el7 ################################# [100%]
[rootnode01 ~]# rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
警告rabbitmq-server-3.6.5-1.noarch.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 6026dfca: NOKEY
准备中... ################################# [100%]
正在升级/安装...1:rabbitmq-server-3.6.5-1 ################################# [100%]注意rabbitmq默认安装位置/usr/lib/rabbitmq/bin
基本操作命令
检查RabbitMQ 的状态
systemctl status rabbitmq-server启动RabbitMQ 服务
systemctl start rabbitmq-serversystemctl restart rabbitmq-server停止RabbitMQ 服务
systemctl stop rabbitmq-server将RabbitMQ设置为开机自启动
systemctl enable rabbitmq-server开启管理界面及配置
开启管理界面
rabbitmq-plugins enable rabbitmq_management修改默认配置信息
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app或者创建配置文件在其中进行配置以覆盖默认配置信息
cd /usr/share/doc/rabbitmq-server-3.6.5/cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.configRabbitMQ安装好后访问http://ip:15672使用guest用户名那与密码登录。 在3.3.1以后的版中处于安全的考虑guest这个默认的用户只能通过localhost来登录其他的IP无法直接使用这个账号
编辑配置文件vim /etc/rabbitmq/rabbitmq.config在其中添加以下内容
[{rabbit, [{loopback_users, []}]}]注意只需要在合适的位置添加{loopback_users, []}]即可
%% -*- mode: erlang -*-
%% ----------------------------------------------------------------------------
%% RabbitMQ Sample Configuration File.
%%
%% See http://www.rabbitmq.com/configure.html for details.
%% ----------------------------------------------------------------------------
[{rabbit,[%%{loopback_users, []}%% Network Connectivity%% %%%% By default, RabbitMQ will listen on all interfaces, using%% the standard (reserved) AMQP port.%%%% {tcp_listeners, [5672]},%% To listen on a specific interface, provide a tuple of {IpAddress, Port}.%% For example, to listen only on localhost for both IPv4 and IPv6:%%%% {tcp_listeners, [{127.0.0.1, 5672},%% {::1, 5672}]},
保存后重启rabbitmq-server即可使用guest用户名和密码来登录 RabbitMQ集群搭建
官方文档https://www.rabbitmq.com/clustering.html
确定rabbitmq安装目录
查找rabbitmq的安装目录
[rootnode01 rabbitmq-server-3.6.5]# whereis rabbitmq
rabbitmq: /usr/lib/rabbitmq /etc/rabbitmq
[rootnode01 rabbitmq-server-3.6.5]# cd /usr/lib/rabbitmq/bin
[rootnode01 bin]# ls
rabbitmqctl rabbitmq-defaults rabbitmq-env rabbitmq-plugins rabbitmq-server确保RabbitMQ正常运行
rabbitmqctl status然后停止rabbitmq服务 systemctl stop rabbitmq-server启动第一个节点
[rootnode01 bin]# RABBITMQ_NODE_PORT5673 RABBITMQ_NODENAMEmq1 rabbitmq-server startRabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.## ## Licensed under the MPL. See http://www.rabbitmq.com/## ############ Logs: /var/log/rabbitmq/mq1.log###### ## /var/log/rabbitmq/mq1-sasl.log##########Starting broker...completed with 6 plugins.启动第二个节点 web管理插件端口占用,所以还要指定其web插件占用的端口号。 [rootnode01 bin]# RABBITMQ_NODE_PORT5674 RABBITMQ_SERVER_START_ARGS-rabbitmq_management listener [{port,15673}] RABBITMQ_NODENAMEmq2 rabbitmq-server startRabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.## ## Licensed under the MPL. See http://www.rabbitmq.com/## ############ Logs: /var/log/rabbitmq/mq2.log###### ## /var/log/rabbitmq/mq2-sasl.log##########Starting broker...completed with 6 plugins. 停止命令
[rootnode01 ~]# rabbitmqctl -n mq1 stop
Stopping and halting node mq1node01 ...[rootnode01 ~]# rabbitmqctl -n mq2 stop
Stopping and halting node mq2node01 ...创建集群
mq1操作作为主节点 注意操作节点前确保mq处于运行状态 [rootnode01 ~]# rabbitmqctl -n mq1 stop_app
Stopping node mq1node01 ...
[rootnode01 ~]# rabbitmqctl -n mq1 reset
Resetting node mq1node01 ...
[rootnode01 ~]# rabbitmqctl -n mq1 start_app
Starting node mq1node01 ...mq2操作为从节点
[rootnode01 ~]# rabbitmqctl -n mq2 stop_app
Stopping node mq2node01 ...
[rootnode01 ~]# rabbitmqctl -n mq2 reset
Resetting node mq2node01 ...
[rootnode01 ~]# rabbitmqctl -n mq2 join_cluster mq1node01
Clustering node mq2node01 with mq1node01 ...
[rootnode01 ~]# rabbitmqctl -n mq2 start_app
Starting node mq2node01 ...查看集群
[rootnode01 ~]# rabbitmqctl cluster_status -n mq1
Cluster status of node mq1node01 ...
[{nodes,[{disc,[mq1node01,mq2node01]}]},{running_nodes,[mq2node01,mq1node01]},{cluster_name,mq1node01},{partitions,[]},{alarms,[{mq2node01,[]},{mq1node01,[]}]}]查看web监控
集群管理
将节点加入指定集群中 注意需停止RabbitMQ应用并重置节点 rabbitmqctl join_cluster {cluster_node} [–ram]显示集群的状态
rabbitmqctl cluster_status修改集群节点的类型 注意需要停止RabbitMQ应用 rabbitmqctl change_cluster_node_type {disc|ram}将节点从集群中删除允许离线执行
rabbitmqctl forget_cluster_node [–offline]在集群中的节点应用启动前咨询clusternode节点的最新信息并更新相应的集群信息 这个和join_cluster不同它不加入集群。考虑这样一种情况节点A和节点B都在集群中当节点A离线了节点C又和节点B组成了一个集群然后节点B又离开了集群当A醒来的时候它会尝试联系节点B但是这样会失败因为节点B已经不在集群中了。 rabbitmqctl update_cluster_nodes {clusternode}取消队列queue同步镜像的操作
rabbitmqctl cancel_sync_queue [-p vhost] {queue}设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称通过这个命令可以重新设置。
rabbitmqctl set_cluster_name {name}RabbitMQ镜像集群配置
RabbitMQ 的默认集群模式可以让交换机、绑定等元数据复制到集群中的所有节点从而保证这些元数据在整个集群中都是可用的。
但是队列内容并不会被自动复制到集群中的其他节点上。这意味着如果一个节点宕机或出现故障就会导致该节点上的队列内容无法被消费者读取。
为了解决这个问题需要创建镜像队列。镜像队列是一种特殊的队列类型它会将队列的消息复制到集群中的其他节点上从而保证在任何情况下都能够正常地消费队列的消息。
当需要构建高可用性的 RabbitMQ 集群时通常会采用镜像队列来保证消息的传递和持久化。
启用HA策略 镜像队列是基于普通的集群模式的然后再添加一些策略所以还是得先配置普通集群然后才能设置镜像队列。 设置镜像队列有2种方式
1.通过命令设置镜像队列
rabbitmqctl set_policy ha ^ {ha-mode:all}2.通过网页管理端设置镜像队列
Name:策略名称Pattern匹配的规则如果是匹配所有的队列是^Definition:使用ha-mode模式中的all也就是同步所有匹配的队列。问号链接帮助文档创建一个镜像队列
创建一个队列然后可以看到队列开始进行同步 同步完成mq1node01节点上的队列数据向mq2node01节点上同步
测试镜像队列
在mq1node01节点向队列发送消息 查看mq2node01节点的队列发现消息已同步
负载均衡-HAProxy
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理支持虚拟主机它是免费、快速并且可 靠的一种解决方案,包括TwitterRedditStackOverflowGitHub在内的多家知名互联网公司在使用。 HAProxy实现了一种事件驱动、单一进程模型此模型支持非常大的并发连接数。
官方下载https://www.haproxy.org/download/
安装HAProxy
下载HAProxy的tar.gz安装包
wget https://www.haproxy.org/download/2.7/src/haproxy-2.7.6.tar.gz解压缩安装包
tar xvfz haproxy-2.7.6.tar.gz
cd haproxy-2.7.6查看内核版本
[rootnode01 ~]# uname -r
3.10.0-1160.88.1.el7.x86_64编译并安装HAProxy
ARGETlinux310内核版本ARCHx86_64系统位数PREFIX/usr/local/haproxyhaprpxy安装路径make TARGETlinux310 PREFIX/usr/local/haproxy ARCHx86_64make install PREFIX/usr/local/haproxy配置haproxy
建一个名为haproxy的用户组
# -r 将该用户组设置为系统级别的组
groupadd -r haproxy创建一个名为haproxy的用户
# -g 将该用户添加到上面创建的haproxy用户组中
# -r 将该用户设置为系统级别用户
useradd -r -g haproxy haproxy创建haproxy配置文件
mkdir -p /etc/haproxy# 源码目录下执行
cp examples/quick-test.cfg /etc/haproxy/haproxy.cfg修改配置文件/etc/haproxy/haproxy.cfg按照需要进行配置参考如下示例
# 全局配置参数属于进程级的配置
global# 日志配置 local0:日志设备 info:日志记录级别log 127.0.0.1 local0 info# haproxy工作目录chroot /usr/local/haproxy# haproxy启动后进程的pid文件路径pidfile /usr/local/haproxy/haproxy.pid# 每个haproxy进程可接受的最大并发连接数maxconn 4000user haproxy group haproxy # haproxy启动时可创建的进程数,默认1个值应小于服务器的CPU核数高版本已弃用# nbproc 1# haproxy在后台运行daemon# 默认参数配置
defaultsmode tcplog globaloption abortoncloseoption redispatch# 配置连接后端服务器失败重试次数超过3次后会将失败的后端服务器标记为不可用retries 3# 配置成功连接到一台服务器的最长等待时间默认单位是毫秒也可自己指定单位timeout connect 10000# 配置连接客户端发送数据时的最长等待时间默认单位是毫秒也可自己指定单位timeout client 1m# 配置服务器端回应客户端数据发送时最长等待时间默认单位是毫秒也可自己指定单位timeout server 1m# 配置对后端服务器的检测超时时间默认单位是毫秒也可自己指定单位timeout check 10s# 最大连接数maxconn 3000# 定义服务叫proxy_status 名字的虚拟节点
# haproxy代理的两个mq
listen proxy_status # 配置监听5672端口bind 0.0.0.0:5672# tcp模式 mode tcp# 轮询访问mq1与mq2balance roundrobin# mq真实IP:端口server node01 192.168.10.13:5673 check inter 10sserver node02 192.168.10.13:5674 check inter 10s# 定义服务叫admin_stats名字的虚拟节点
# haproxy管理页面
frontend admin_stats # 监听地址和端口bind *:8888# http模式 mode http# 配置在客户端和服务器完成一次连接请求后haproxy主动关闭此TCP连接option httpclose# 配置后端服务器需要获得客户端的真实IP通过增加X-Forwarded-For来记录客户端IPoption forwoardfor# 启用日志来记录http请求默认只对tcp日志进行日志记录option httplogmaxconn 10stats enablestats refresh 30s# 统计页面路径stats uri /admin# 设置统计页面认证的用户和密码stats auth admin:123123stats hide-versionstats admin if TRUE启动HAProxy服务
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg查看haproxy进程状态
[rootnode01 haproxy]# ps -ef|grep haproxy
haproxy 6061 1 0 22:51 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
root 6318 27966 0 22:51 pts/8 00:00:00 grep --colorauto haproxy查看HAProxy监控
访问http://192.168.10.13:8888/admin查看HAProxy监控
Java代码连接MQ集群
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** 发送消息*/
public class HelloWorld {public static void main(String[] args) throws IOException, TimeoutException {// 创建连接工厂ConnectionFactory factory new ConnectionFactory();// 设置参数factory.setHost(192.168.10.13);// HaProxy的ipfactory.setPort(5672); //端口 HaProxy的监听的端口// 创建连接 ConnectionConnection connection factory.newConnection();// 创建ChannelChannel channel connection.createChannel();// 创建队列Queuechannel.queueDeclare(hello_queue,true,false,false,null);String body hello rabbitmq;// 发送消息channel.basicPublish(,hello_queue,null,body.getBytes());// 释放资源channel.close();connection.close();System.out.println(send success....);}
}