iis应用程序池与网站,5000个网站资源做外链,宁波网站seo公司,成都市建设厅网站目录
一. 环境准备
二. 开始配置集群
三. RabbitMQ镜像集群配置
四. 安装并配置负载均衡器HA 一. 环境准备
关闭防火墙和selinux#xff0c;进行时间同步
主机名系统IP服务rabbitmq-1 Rocky_linux9.4 192.168.226.22RabbitMQ#xff0c;MySQLrabbitmq-2Rocky_linux9.41…目录
一. 环境准备
二. 开始配置集群
三. RabbitMQ镜像集群配置
四. 安装并配置负载均衡器HA 一. 环境准备
关闭防火墙和selinux进行时间同步
主机名系统IP服务rabbitmq-1 Rocky_linux9.4 192.168.226.22RabbitMQMySQLrabbitmq-2Rocky_linux9.4192.168.226.23RabbitMQrabbitmq-3Rocky_linux9.4192.168.226.24RabbitMQ
修改主机名#192.168.226.22
hostnamectl set-hostname rabbitmq-1#192.168.226.22
hostnamectl set-hostname rabbitmq-2#192.168.226.22
hostnamectl set-hostname rabbitmq-3注修改完后都手动断开重新连接不要使用bash
配置域名解析三台虚拟机都配置
cat /etc/hosts EOF
192.168.226.22 rabbitmq-1
192.168.226.23 rabbitmq-2
192.168.226.24 rabbitmq-3
EOF参考博文RabbitMQ消息中间件介绍与安装-CSDN博客
三台虚拟机都安装RabbitMQ并进入到web管理界面如下图 二. 开始配置集群 1.首先创建好数据存放目录和日志存放目录
[rootrabbitmq-1 ~]# mkdir -p /data/rabbitmq/data
[rootrabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs
[rootrabbitmq-1 ~]# chmod 777 -R /data/rabbitmq
[rootrabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R创建配置文件:
[rootrabbitmq-1 ~]#cat /etc/rabbitmq/rabbitmq-env.conf EOF
RABBITMQ_MNESIA_BASE/data/rabbitmq/data
RABBITMQ_LOG_BASE/data/rabbitmq/logs
EOF重启服务
[rootrabbitmq-1 ~]# systemctl restart rabbitmq-server
2. 拷⻉erlang.cookie
Rabbitmq的集群是依附于erlang的集群来⼯作的,所以必须先构建起erlang的集群景象。Erlang的集群中
各节点是经由过程⼀个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中⽂件是400的权限。所以必须保证各节点cookie⼀致,不然节点之间就⽆法通信.
(官方在介绍集群的文档中提到过.erlang.cookie 一般会存在这两个地址第一个是home/.erlang.cookie第二个地方就是/var/lib/rabbitmq/.erlang.cookie。如果我们使用解压缩方式安装部署的rabbitmq那么这个文件会在{home}目录下也就是$home/.erlang.cookie。如果我们使用rpm等安装包方式进行安装的那么这个文件会在/var/lib/rabbitmq目录下。)
[rootrabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
HVYPGZCOFCYBEZHGUHQB⽤scp的⽅式将rabbitmq-1节点的.erlang.cookie的值复制到其他两个节点中,一次保证cookie一致。
[rootrabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root192.168.226.23:/var/lib/rabbitmq/
[rootrabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root192.168.226.24:/var/lib/rabbitmq/
3.将rabbitmq-2、rabbitmq-3作为内存节点加⼊rabbitmq-1节点集群中 在rabbitmq-2、rabbitmq-3执⾏如下命令
[rootrabbitmq-2 ~]# systemctl restart rabbitmq-server
[rootrabbitmq-2 ~]# rabbitmqctl stop_app #停止节点
[rootrabbitmq-2 ~]# rabbitmqctl reset #如果有数据需要重置没有则不用
[rootrabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbitrabbitmq-1 #添加到内存节点
Clustering node rabbitrabbitmq-2 with rabbitrabbitmq-1 ...
[rootrabbitmq-2 ~]# rabbitmqctl start_app #启动节点
Starting node rabbitrabbitmq-2 ...1默认rabbitmq启动后是磁盘节点在这个cluster命令下mq-2和mq-3是内存节点
mq-1是磁盘节点。
2如果要使mq-2、mq-3都是磁盘节点去掉--ram参数即可。
3如果想要更改节点类型可以使⽤命令rabbitmqctl change_cluster_node_type
disc(ram),前提是必须停掉rabbit应⽤
注:
#如果有需要使用磁盘节点加入集群使用下述命令格式默认即为磁盘节点内存节点是加上--ram参数
rabbitmqctl join_cluster rabbitrabbitmq-1#如果执行rabbitmqctl stop_app 这条命令报错:需要执行
#chmod 400 .erlang.cookie
#chown rabbitmq.rabbitmq .erlang.cookie
4. 查看集群状态
在 RabbitMQ 集群任意节点上执行 rabbitmqctl cluster_status来查看是否集群配置成功。
这里我在rabbitmq-1磁盘节点上面查看
[rootrabbitmq-1 ~]# rabbitmqctl cluster_status 每台机器显示出三台节点表示已经添加成功
1默认rabbitmq启动后是磁盘节点在这个cluster命令下mq-2和mq-3是内存节点mq-1是磁盘节点。
2如果要使mq-2、mq-3都是磁盘节点去掉--ram参数即可。
3如果想要更改节点类型可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉
rabbit应用
在RabbitMQ集群集群中必须⾄少有⼀个磁盘节点否则队列元数据⽆法写⼊到集群中当磁盘节点宕掉时集群将⽆法写⼊新的队列元数据信息。 5.登录rabbitmq web管理控制台创建新的队列
打开浏览器输⼊http://192.168.226.22:15672 输入用户名密码进入
登录后出现如图所示的界⾯执行操作。 在RabbitMQ集群集群中必须⾄少有⼀个磁盘节点否则队列元数据⽆法写⼊到集群中当
磁盘节点宕掉时集群将⽆法写⼊新的队列元数据信息。 三. RabbitMQ镜像集群配置 上面已经完成RabbitMQ默认集群模式但并不保证队列的高可用性尽管交换机、绑定这些可以复制到集群里的任何一个节点但是队列内容不会复制。但队列节点宕机直接导致该队列无法应用只能等待重启所以要想在队列节点宕机或故障也能正常应用就要复制队列内容到集群里的每个节点必须要创建镜像队列。
镜像队列是基于普通的集群模式的然后再添加一些策略所以你还是得先配置普通集群然后才能设置镜像队列我们就以上面的集群接着做。 保证各个节点之间数据同步
1. 创建镜像集群
[rootrabbitmq-1 ~]# rabbitmqctl set_policy ha-all ^ {ha-mode:all}参数解释
rabbitmqctl set_policy这是RabbitMQ的命令行工具rabbitmqctl中设置策略的命令。
ha-all这是策略定义的名称可以为任何你选择的名称这里选择的是ha-all。
^这是策略模式这里的^代表这个策略将应用到所有的队列和交换器上。
{ha-mode:all}这是策略的定义这里设置的是ha-mode高可用模式为all。这意味着所有的队列将在所有的节点上进行镜像来提供一个高可用的队列。
0这是策略的优先级。如果一个队列同时匹配多个策略那么优先级高的策略将被使用。这里设置的优先级为0。
for vhost /这是策略应用的虚拟主机这里是应用到了默认的虚拟主机上。则此时镜像队列设置成功。这里的虚拟主机是代码中需要用到的虚拟主机虚拟主机的作用是做一个消息的隔离本质上可认为是一个rabbitmq-server是否增加虚拟主机增加几个这是由开发中的业务决定即有哪几类服务哪些服务用哪一个虚拟主机这是一个规划。 再次查看队列已经同步到其他两台节点: 这样就设置完成了
2. 镜像队列策略设置说明
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]-p Vhost 可选参数针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition镜像定义包括三个部分ha-mode, ha-params, ha-sync-modeha-mode:指明镜像队列的模式有效值为 all/exactly/nodesall表示在集群中所有的节点上进行镜像exactly表示在指定个数的节点上进行镜像节点的个数由ha-params指定nodes表示在指定的节点上进行镜像节点名称通过ha-params指定ha-paramsha-mode模式需要用到的参数ha-sync-mode进行队列中消息的同步方式有效值为automatic和manual
priority可选参数policy的优先级
3. 准备测试
#在192.168.226.22上下载一个mysql
[rootrabbitmq-1 ~]# yum install -y mysql-server git unzip
[rootrabbitmq-1 ~]# systemctl enable --now mysqld
[rootrabbitmq-1 ~]# mysqladmin -uroot password 1234[rootrabbitmq-1 rabbitmq-test]# mysql -uroot -p1234
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.36 Source distributionCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql CREATE USER root% IDENTIFIED BY 1234;
Query OK, 0 rows affected (0.02 sec)mysql GRANT ALL PRIVILEGES ON *.* TO root%;
Query OK, 0 rows affected (0.00 sec)mysql FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql exit
Bye#上传rabbitmq-test-main.zip
[rootrabbitmq-1 ~]# git clone https://gitea.beyourself.org.cn/newrain001/rabbitmq-test.git
[rootrabbitmq-1 ~]# ll
total 18300
-rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg
-rw-r--r-- 1 root root 18713463 Jun 29 14:28 rabbitmq-server-3.13.3-1.el8.noarch.rpm
-rw-r--r-- 1 root root 8221 Jun 29 16:05 rabbitmq-test-main.zip
-rw-r--r--. 1 root root 4747 Jun 24 19:46 rocky_linux.sh
[rootrabbitmq-1 ~]# unzip rabbitmq-test-main.zip
[rootrabbitmq-1 ~]# vim rabbitmq-test/requirements.txt
#修改如下图所示要把版本号去掉原因是因为当前系统没有这个版本去掉让其自行安装别的版本即可
修改成图中所示即可。 然后视情况修改这个配置文件改对应的IP如果对应的IP在本机可以使用localhost不用改不在本机上的话就必须改用户名和密码也要改成你自己的。
[rootrabbitmq-1 ~]# vim rabbitmq-test/settings.py 下载工具并启动Flask应用
[rootrabbitmq-1 ~]# yum install -y python3 python3-devel
[rootrabbitmq-1 ~]# pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
[rootrabbitmq-1 ~]# export FLASK_ENVdevelopment ; flask run --reload -p 80 -h 0.0.0.0访问框选的web网页,打开后下1000单。 下单后可以看到rabbit mq集群队列中开始记录下单的数据这时由于下单但是还没有付费成交数据并没有写入到数据库中可以查看下mysql数据库
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
4 rows in set (0.01 sec)现在模式成交后的数据来到http://192.168.226.22/read 页面进行模拟成交发货这时数据就要写入到数据库中。 再次查看mysql发现数据这时才会写入下数据库中由于前面我们点击发货的是200也就是模拟正式交易成功的数据数量是200此时查看这个库中记录也是200
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| shop |
| sys |
--------------------
5 rows in set (0.00 sec)这个时候我们去把剩下的800发完 四. 安装并配置负载均衡器HA
注意如果使用阿里云可以使用阿里云的内网slb来实现负载均衡不用自己搭建HA。
新增一个虚拟机进行时间同步关闭防火墙和selinux
主机名系统IP服务haproxyRocky_linux192.168.226.25HAProxy
#修改主机名
[rootlocalhost ~]# hostnamectl set-hostname haproxy
安装并配置负载均衡器HA
1. 在192.168.226.25安装HAProxy
[roothaproxy ~]# yum install -y haproxy 2. 修改 /etc/haproxy/haproxy.cfg [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg在该配置文件删除其中所有内容复制下面的配置信息粘贴进去保存退出注意你做的需要把最后三行的主机名和IP修改成你对应的主机名和IP
globallog 127.0.0.1 local2chroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 4000user haproxygroup haproxynbproc 4daemon# turn on stats unix socketstats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
defaultsmode httplog globalretries 3timeout connect 10stimeout client 1mtimeout server 1mtimeout check 10smaxconn 2048
#---------------------------------------------------------------------
##监控查看本地状态#####
listen admin_statsbind *:80mode httpoption httplogoption httpcloselog 127.0.0.1 local0 errstats uri /haproxystats auth newrain:123456stats refresh 30s
####################################
###反代监控
frontend serverbind *:5670log globalmode tcp#option forwardfordefault_backend rabbitmqmaxconn 3
backend rabbitmqmode tcplog globalbalance roundrobin
#这里三行配置对应的主机名和IP需要改成你对应的server rabbitmq-1 192.168.226.22:5672 check inter 2000s rise 2 fall 3 server rabbitmq-2 192.168.226.23:5672 check inter 2000s rise 2 fall 3server rabbitmq-3 192.168.226.24:5672 check inter 2000s rise 2 fall 3
#启动haproxy并设置开机自启
[roothaproxy ~]# systemctl enable --now haproxy
浏览器输入http://192.168.226.25/haproxy查看rabbitmq的状态。
访问该页面的初始用户名newrain 密码123456
这个用户名和密码是在上面配置文件定义的。 现在重新配置Flask应用的配置改成负载均衡的IP端口也改成负载均衡监听的端口然后换个队列名实验。
[rootrabbitmq-1 ~]# vim rabbitmq-test/settings.py 需要先把前面启动的flask应用ctrl c 关掉再启动
[rootrabbitmq-1 ~]# cd rabbitmq-test
[rootrabbitmq-1 rabbitmq-test]# flask run --reload -p 80 -h 0.0.0.0
http://192.168.226.22:80/ 再次访问下单也看能否正常下单 负载均衡监控页面也在数据变化正常工作 现在开始模拟正式成交订单时数据写入数据库
http://192.168.226.22/read 查看mysql数据写入记录