情况
在实际的项目实践中,绝大多数情况不会是单节点运行程序+数据库+其他,而会考虑部署一套公共资源,提供项目所需的数据库,中间件等等。
思路
如果有多节点的情况,最终实现的目的就是: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 ".*" ".*" ".*"