多节点集群思路

情况
在实际的项目实践中,绝大多数情况不会是单节点运行程序+数据库+其他,而会考虑部署一套公共资源,提供项目所需的数据库,中间件等等。

思路
如果有多节点的情况,最终实现的目的就是:Ha和Upstream,简而言之就是实现主备的功能加上负载均衡的功能。市面上就提供了很典型的这样的集群模式keepalived+haproxy+中间件。keepalived保证主从服务器的可用性,一旦主服务器出现问题,就会自动切换到备用服务器上;haproxy是做负载均衡转发,可以通过haproxy转发到实际后端服务,灵活提高应该的负载能力。

实例
keepalivd虚拟出对外的IP对应主备下的haproxy服务,只提供一个对外的统一IP地址;haproxy转发到实际的应用下面;本文以rabbitmq为实例,采用镜像集群模式搭建一套完整的rabbitmq集群。
keepalived—192.168.7.60
haproxy主从—192.168.7.59 192.168.7.58
rabbitmq—192.168.7.59 192.168.7.58

keepalived
keepalived的搭建和配置可以参考传送门

haproxy
haproxy配置是以TCP四层协议来转发端口

frontend mq
bind 0.0.0.0:35672
mode tcp
default_backend tcp_mq
backend tcp_mq
mode tcp
balance roundrobin
server node-7 192.168.7.59:5672 check inter 2000 rise 3 fall 3 weight 30
server node-8 192.168.7.58:5672 check inter 2000 rise 3 fall 3 weight 30

rabbitmq
有四个点需要特别注意:
1.需要先选择一个主节点,拷贝/var/lib/rabbitmq/.erlang.cookie隐藏文件到对应目录下,保证集群cookie值的一致性。
2.主节点, 后台启动,并启动应用,然后查看集群状态。

rabbitmq-server -detached
rabbitmqctl start_app
rabbitmqctl cluster_status

3.从节点同样需要先后台启动后,先关闭应用,加入集群后,再开启应用

rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@master主机名称
rabbitmqctl start_app

4.完成以上操作后,再执行镜像模式的命令,完成集群配置

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

补充:可以开启rabbitmq的web界面管理,新增用户后查看集群的运行状态

rabbitmq-plugins enable rabbitmq_management
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl add_vhost admin
rabbitmqctl set_permissions -p admin admin ".*" ".*" ".*"
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

原文地址:https://www.cnblogs.com/zhouzhifei/p/13963647.html