activitmq+keepalived+nfs 非zk的高可用集群构建
nfs | 192.168.10.32 |
maast | 192.168.10.4 |
savel | 192.168.10.31 |
应对这个需求既要高可用又要消息延迟,只能使用变态方式实现
nfs部署
1 2 3 4 5 6 7 8 | #yum install nfs-utils rpcbind #vim /etc/exports /data/activemq 192.168.10.31(rw, sync ,no_root_squash,no_all_squash) /data/activemq 192.168.10.4(rw, sync ,no_root_squash,no_all_squash) #systemctl stop firewalld.service #setenforce 0 #mkdir /data/activemq -p #systemctl start nfs |
客户端挂载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #yum -y install nfs-utils.x86_64 # systemctl start rpcbind # showmount -e 192.168.10.32 Export list for 192.168.10.32: /data/activemq 192.168.10.4,192.168.10.31 # mkdir /data # mount -t nfs 192.168.10.32:/data/activemq /data # df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 17G 4.8G 13G 28% / devtmpfs 476M 0 476M 0% /dev tmpfs 488M 0 488M 0% /dev/shm tmpfs 488M 1.6M 486M 1% /run tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/sda1 1014M 130M 885M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 192.168.10.32: /data/activemq 17G 2.0G 16G 12% /data |
使用yum安装keepalived
1 2 | # yum -y install epel-release-7-11.noarch # yum -y install keepalived |
安装activemq部署
1 2 3 4 5 6 7 8 9 10 11 12 13 | # tar xf apache-activemq-5.15.8-bin.tar.gz -C /usr/local/ # cd /usr/local/apache-activemq-5.15.8/conf # vim activemq.xml 改成这样的两个节点都一样 40 <broker xmlns= "http://activemq.apache.org/schema/core" brokerName= "localhost" dataDirectory= "/data" schedulerSupport= "true" > 81 <persistenceAdapter> 82 <kahaDB directory= "/data/kahadb" /> 83 < /persistenceAdapter > # ./activemq start 启动 # ss -lntp | grep 61616 LISTEN 0 128 :::61616 :::* users :(( "java" ,pid=21705,fd=137)) 查另一个节点的端口 # ss -lntp | grep 61616 |
注意
1、共享文件的主从配置,是通过文件共享锁来实现的。先拿到文件锁的服务就是master,其它为slave服务,slave服务默认每10秒试图拿一次文件锁,可以查看activeMq的控制台。
2、只有master的控制台(如http://192.168.10.4:8161/admin)能够访问,slave的控制台不能访问,原因就是slave没有拿到文件锁,不能访问文件。
配置keepalived的文件
备节点的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | [root@localhost conf] # cd /etc/keepalived/ [root@localhost keepalived] # cat keepalived.conf global_defs { notification_email { root@localhost } notification_email_from ka2@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 vrrp_mcast_group4 224.111.111.111 } vrrp_script chk_mq { script "ss -lntp | grep 61616" #检查端口是否存在,这里不能查进程 interval 2 weight -10 fall 2 rise 2 } vrrp_instance External_1 { state BACKUP interface ens33 virtual_router_id 171 priority 95 advert_int 1 authentication { auth_type PASS auth_pass 1402b1b5 } virtual_ipaddress { 192.168.10.5 /24 } track_script { chk_mq } } |
主节点的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # cat /etc/keepalived/keepalived.conf global_defs { notification_email { root@localhost } notification_email_from ka1@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 vrrp_mcast_group4 224.111.111.111 } vrrp_script chk_mq { script "ss -lntp | grep 61616" interval 2 weight -10 fall 2 rise 2 } vrrp_instance External_1 { state MASTER interface ens33 virtual_router_id 171 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1402b1b5 } virtual_ipaddress { 192.168.10.5 /24 } track_script { chk_mq } }<br> |
验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@jiagoushi bin] # ss -lntp | grep 61616 LISTEN 0 128 :::61616 :::* users :(( "java" ,pid=21705,fd=137)) [root@jiagoushi bin] # ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link /loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1 /8 scope host lo valid_lft forever preferred_lft forever inet6 ::1 /128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link /ether 00:0c:29:6a:6e:da brd ff:ff:ff:ff:ff:ff inet 192.168.10.4 /24 brd 192.168.10.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.10.5 /24 scope global secondary ens33 valid_lft forever preferred_lft forever inet6 fe80::13ba:653e:ffc4:7305 /64 scope link noprefixroute valid_lft forever preferred_lft forever |
重启activemq查看vip切换效果,注意谁先起谁就是主节点,主节点挂了释放文件锁后,从节点端口才能启动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | [root@jiagoushi bin] # ./activemq restart INFO: Loading '/usr/local/apache-activemq-5.15.8//bin/env' INFO: Using java '/usr/bin/java' INFO: Loading '/usr/local/apache-activemq-5.15.8//bin/env' INFO: Using java '/usr/bin/java' INFO: Waiting at least 30 seconds for regular process termination of pid '21705' : Java Runtime: Oracle Corporation 1.8.0_181 /usr/lib/jvm/java-1 .8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64 /jre Heap sizes: current=62976k free =61991k max=932352k JVM args: -Xms64M -Xmx1G -Djava.util.logging.config. file =logging.properties -Djava.security.auth.login.config= /usr/local/apache-activemq-5 .15.8 //conf/login .config -Dactivemq.classpath= /us r /local/apache-activemq-5 .15.8 //conf : /usr/local/apache-activemq-5 .15.8 // .. /lib/ : -Dactivemq.home= /usr/local/apache-activemq-5 .15.8/ -Dactivemq.base= /usr/local/apache-activemq-5 .15.8/ -Dactivemq.conf= /usr/local/apache-activemq-5 .15.8 //conf -Dactivemq.data= /usr/local/apache-activemq-5 .15.8 //dataExtensions classpath: [ /usr/local/apache-activemq-5 .15.8 /lib , /usr/local/apache-activemq-5 .15.8 /lib/camel , /usr/local/apache-activemq-5 .15.8 /lib/optional , /usr/local/apache-activemq-5 .15.8 /lib/web , /usr/local/apache -activemq-5.15.8 /lib/extra ]ACTIVEMQ_HOME: /usr/local/apache-activemq-5 .15.8 ACTIVEMQ_BASE: /usr/local/apache-activemq-5 .15.8 ACTIVEMQ_CONF: /usr/local/apache-activemq-5 .15.8 /conf ACTIVEMQ_DATA: /usr/local/apache-activemq-5 .15.8 /data Connecting to pid: 21705 INFO: failed to resolve jmxUrl for pid:21705, using default JMX url Connecting to JMX URL: service:jmx:rmi: ///jndi/rmi : //localhost :1099 /jmxrmi .....INFO: Broker not available at: service:jmx:rmi: ///jndi/rmi : //localhost :1099 /jmxrmi .......................... INFO: Regular shutdown not successful, sending SIGKILL to process INFO: sending SIGKILL to pid '21705' INFO: Loading '/usr/local/apache-activemq-5.15.8//bin/env' INFO: Using java '/usr/bin/java' INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details INFO: pidfile created : '/usr/local/apache-activemq-5.15.8//data/activemq.pid' (pid '40627' ) INFO: Loading '/usr/local/apache-activemq-5.15.8//bin/env' INFO: Using java '/usr/bin/java' ActiveMQ is running (pid '40627' ) [root@jiagoushi bin] # ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link /loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1 /8 scope host lo valid_lft forever preferred_lft forever inet6 ::1 /128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link /ether 00:0c:29:6a:6e:da brd ff:ff:ff:ff:ff:ff inet 192.168.10.4 /24 brd 192.168.10.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::13ba:653e:ffc4:7305 /64 scope link noprefixroute valid_lft forever preferred_lft forever [root@jiagoushi conf] # ss -lntp | grep 61616 另一节点查看 [root@localhost keepalived] # ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link /loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1 /8 scope host lo valid_lft forever preferred_lft forever inet6 ::1 /128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link /ether 00:0c:29:60:f4:68 brd ff:ff:ff:ff:ff:ff inet 192.168.10.31 /24 brd 192.168.10.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.10.5 /24 scope global secondary ens33 valid_lft forever preferred_lft forever inet6 fe80::2dbd:f06e:6abd:907 /64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost keepalived] # ss -lntp | grep 61616 LISTEN 0 128 :::61616 :::* users :(( "java" ,pid=22702,fd=137)) |
参考文章:https://cn.aliyun.com/jiaocheng/312402.html
草都可以从石头缝隙中长出来更可况你呢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏