当前位置:首页 > 资讯 > 正文

Haproxy+Keepalived搭建高可用负载均衡的EMQ集群

Haproxy+Keepalived搭建高可用负载均衡的EMQ集群

服务器IP

部署业务

作用

192.168.0.41

EMQTTD

EMQ集群

192.168.0.75

EMQTTD

EMQ集群

192.168.0.41

haproxy、keepalived

HA和LB

192.168.0.75

haproxy、keepalived

HA和LB

        Haproxy和Keepalived以及EMQ都放在同一台机器,每一个机器上都有一个MEQ、Haproxy、Keepalived,其实可以把Haproxy、Keepalived单独弄两台机器,每台机器上放一个Haproxy、Keepalived,切记Haproxy和Keepalived必须放在同一台机器上,然后Haproxy负载到不同的EMQ机器上即可,但是我用来部署的机器没那么多,只能放在一起了,有条件的朋友可以自己试试分开的,其实都一样。

        环境:Cetos7,EMQ2.3.11

     1.4.1、两台机器都需要进行一下配置,如果将EMQ和Haproxy、Keepalved分开机器放,那么每个机器都要配置。

        关闭防火墙,关闭开机启动:
          systemctl  stop firewalld.service  #关闭防火墙
          systemctl  disable firewalld.service #防火墙开机不启动
        关闭selinux
          sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 
        重启服务器
          shutdown -r now

     1.4.2、修改操作系统内核参数  

 修改完毕通过sysctl –p 生效 

       我之前写过EMQ安装的文章,分别使用通用包、源码编译安装,这里就不再讲了,自己去看看。

       传送门:Linux下用EMQ通用包安装EMQ、Linux下用源码编译安装EMQ

      进入emqx-rel-2.3.11/_rel/emqttd/etc/emq.conf中

       sed -i 's%^node.process_limit = .*%node.process_limit = 2097152%g'  emq.conf
       sed -i 's%^node.max_ports = .*%node.max_ports = 1048576%g'  emqttd/emq.conf
       sed -i 's%^listener.tcp.external.acceptors = .*%listener.tcp.external.acceptors = 64%g'  emq.conf
       sed -i 's%^listener.tcp.external.max_clients = .*%listener.tcp.external.max_clients = 1000000%g'  emq.conf

   2.3.1、节点设置,修改emqx-rel-2.3.11/_rel/emqttd/etc/emq.conf文件中的节点名以及集群名

   一共两种方式:进入emqx-rel-2.3.11/_rel/emqttd/etc/emq.conf

               通过vim修改,cluster.name = emqcl,node.name = emq@192.168.0.41;  (192.168.0.41)

                                      cluster.name = emqcl,node.name = emq@192.168.0.75;  (192.168.0.75)

       或者通过命令直接修改值

           192.168.0.41:

               sed -i 's%^node.name = .*%node.name = emq@192.168.0.41%g'  emq.conf  

               sed -i 's%^cluster.name = .*%cluster.name = emqcl%g'  emq.conf  

          192.168.0.75:

               sed -i 's%^node.name = .*%node.name = emq@192.168.0.75%g'  emq.conf  

               sed -i 's%^cluster.name = .*%cluster.name = emqcl%g'  emq.conf  

   2.3.2、加入集群

          在192.168.0.41的emqx-rel-2.3.11/_rel/emqttd/bin下运行/emqttd_ctl cluster join emq@192.168.0.75

          

    或者在192.168.0.75的emqx-rel-2.3.11/_rel/emqttd/bin下运行/emqttd_ctl cluster join emq@192.168.0.41

   注:节点启动加入集群后,节点名称不能变更。若更改了节点名称或者集群名,重启emq服务,https://blog.csdn.net/xiaoye319/article/details/emqttd_ctl console,

     https://blog.csdn.net/xiaoye319/article/details/emqttd_ctl start。若重启服务还是无效,则重启服务器,shutdown -r now

   2.3.3、查看集群状态

        在任何一个节点的emqx-rel-2.3.11/_rel/emqttd/bin下运行/emqttd_ctl cluster status

       

   2.3.4、退出集群,有两种方式:

          leave: 本节点退出集群
          remove: 从集群删除其他节点

         在192.168.0.41的emqx-rel-2.3.11/_rel/emqttd/bin下运行https://blog.csdn.net/xiaoye319/article/details/emqttd_ctl cluster leave

    或者在192.168.0.41的emqx-rel-2.3.11/_rel/emqttd/bin下运行https://blog.csdn.net/xiaoye319/article/details/emqttd_ctl cluster remove emq@192.168.0.75

       安装完haproxy以后,默认生成/etc/haproxy/haproxy.cfg,因为本身生成的,有其自带的东西,最好删除了,再运行以下命令重建。

注:这里有个问题,如果你的haproxy、keepalived和emq是放在同一个机器上的,haproxy的配置文件中bind绑定的端口号不要跟EMQ的一样,不然haproxy启动报错。如果不是同一台机器上的,那就尽量端口一样。

            设置开机启动:chkconfig haproxy on  

   3.5、 优化Haproxy服务器

   修改完毕通过sysctl –p 生效 

       安装完keepalived以后,默认生成/etc/keepalived/keepalived.cfg,删除该文件,再运行以下命令重建。

     主的keepalived.cfg:

       

   备的keepalived.cfg:

        

        设置开机启动:systemctl enable keepalived

       


       此架构采用keepalived作为高可用性,haproxy作为负载均衡。

       分别在41和75机器上执行ip a,可以看出vip 192.168.0.76在75机器上

      

    关闭75机器上的keepalived,然后执行ip a

    

    然后在41机器上执行ip a,可以看出41已经接管VIP了 

    

    打开haproxy web管理页面,192.168.0.76:8082/admin,登录账号密码都是admin,admin,这些都在haproxy.cfg文件中,可以自己修改。

然后用jmeter进行EMQ的连接虚拟vip:192.168.0.76:1885进行连接测试,看是否进行了负载,测试过程请看:JMeter测试EMQ集群

可以看到已经成功。

有问题的同学可以及时沟通我。。。。。。