zoukankan      html  css  js  c++  java
  • 从0到1在Linux上搭建RabbitMq集群教程

    搭建环境阿里云CenterOS8.2,Erlang23.x,RabbitMq3.8.x

    1、准备三台阿里云服务器,情况如下

    2、鉴于后续端口通信等操作需要,提前做好前置工作

    1)阿里云安全组内开通15672端口,便于远程管理rabbitmq集群

    2)配置三台主机的hosts文件,因为rabbitmq是通过主机名称识别的,命令如下

    vi /etc/hosts
    172.16.213.251  iZbp145wkv4vf3oba7qge2Z iZbp145wkv4vf3oba7qge2Z
    172.16.213.250  iZbp145wkv4vf3oba7qge1Z iZbp145wkv4vf3oba7qge1Z
    172.16.213.246  iZbp145wkv4vf3oba7qge0Z iZbp145wkv4vf3oba7qge0Z
    #三台机器分别做如上hosts文件修改
    #OK之后可以互ping一下,例如
    ping iZbp145wkv4vf3oba7qge0Z
    #如果通代表ok

    3、开始分别在三台机器上安装rabbitmq,整体步骤比较简单,按步骤执行如下命令即可

    cd /usr/local
    mkdir erlang
    cd erlang
    ##########
    #安装erlang
    rpm -ivh 'download_file?file_path=erlang%2F23%2Fel%2F8%2Fx86_64%2Ferlang-23.2.3-1.el8.x86_64.rpm'
    #设置镜像仓库
    wget --no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo
    #安装socat
    yum install socat
    #下载rabbitmq最新版,如果版本不是最新,可以到官网找最新https://github.com/rabbitmq/
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.11/rabbitmq-server-3.8.11-1.el7.noarch.rpm
    #导入证书
    rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
    #执行安装
    rpm -ivh rabbitmq-server-3.8.11-1.el7.noarch.rpm
      [/usr/lib/tmpfiles.d/rabbitmq-server.conf:1] Line references path below legacy directory /var/run/, updating /var/run/rabbitmq → /run/rabbitmq; please update the tmpfiles.d/ drop-in file accordingly.
    #设置开机启动
    systemctl enable rabbitmq-server.service
    #启动服务
    systemctl start rabbitmq-server.service
    #停止服务
    systemctl stop rabbitmq-server.service
    #安装远程访问插件,否则集群后看不到状态情况
    rabbitmq-plugins enable rabbitmq_management
    #至此,可以通过http://ip:15672查看远程管理界面了,但是没办法登录,guest只能localhost访问
    #因为要构建集群,所以只要在s1主服务器创建账户即可
    
    #如下命令在s1执行
    rabbitmqctl add_user admin yourpwd
    rabbitmqctl set_user_tags admin administrator
        Setting tags for user "admin" to [administrator] ...
    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
    #这样可以通过admin登录管理了

    4、至此,已经在三台服务器成功安装了rabbitmq,并且可以通过远端web进行访问管理了

    5、开始构建集群环境

    #从s1服务器上复制.erlang.cookie文件到s2,s3,当然也可以直接修改.erlang.cookie文件内容
    scp /var/lib/rabbitmq/.erlang.cookie root@172.16.213.250:/var/lib/rabbitmq/
    scp /var/lib/rabbitmq/.erlang.cookie root@172.16.213.246:/var/lib/rabbitmq/
    
    
    #在三台服务器上,分别设置.erlang.cookie的权限
    chown rabbitmq:root /var/lib/rabbitmq/.erlang.cookie
    chmod 600 /var/lib/rabbitmq/.erlang.cookie

    6、开始编组,分别登陆s2,s3服务器,执行如下命令,将s2,s3编组到s1中

    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@iZbp145wkv4vf3oba7qge2Z #s1,默认是disk节点,加参数
    --ram代表是内存节点

    rabbitmqctl start_app

    7、到此已经完成了编组,但目前的集群模式还是普通模式,也就是所谓的从元数据模式,实现不了高可用目的;下面执行命令配置为镜像模式;

    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
        Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all","ha-sync-mode":"automatic"}" with priority "0"
    #上面命令在3台服务器上都要执行

    8、更多命令操作

    # 添加账号:
    rabbitmqctl add_user admin admin
    # 添加 权限tag
    rabbitmqctl set_user_tags admin administrator
     
    # 删除用户(删除guest用户)
    rabbitmqctl delete_user guest
    Deleting user "guest"
     
    # 修改用户的密码
    rabbitmqctl  change_password  Username  Newpassword
     
    [ root@aliyun_us_b_mq_m~]# rabbitmqctl  change_password  admin 0GM1aol4z8GeSZY99
    Changing password for user "admin"
     
    # 查看当前用户列表
    rabbitmqctl  list_users
    Listing users
    admin   [administrator]
    
    #修改节点类型disk还是ram
    rabbitmqctl stop_app
    rabbitmqctl change_cluster_node_type disc
    rabbitmqctl start_app
    
    #状态查看
    rabbitmqctl cluster_status
    
    #卸载
    yum list|grep rabbitmq
    
    yum -y remove rabbitmq-server.noarch

    9、使用集群

     1  var connectionFactory = new ConnectionFactory()
     2             {
     3                 //HostName = "192.168.205.128", 集群不在此处声明
     4                 UserName = "guest",
     5                 Password = "guest",
     6                 AutomaticRecoveryEnabled = true,//如果connection挂掉是否重新连接
     7                 TopologyRecoveryEnabled = true//连接恢复后,连接的交换机,队列等是否一同恢复
     8             };  //创建连接工厂
     9             var connection = connectionFactory.CreateConnection(new string[] {
    10                 "192.168.23.149",
    11                 "192.168.23.144",
    12                 "192.168.23.143"
    13             });  //创建connection
    14             var channel = connection.CreateModel(); //创建channel

    参考文章:

    https://www.linuxidc.com/Linux/2017-10/147707p2.htm

    https://www.linuxidc.com/Linux/2016-12/137812.htm

    https://www.rabbitmq.com/clustering.html

    https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.11/rabbitmq-server-3.8.11-1.el7.noarch.rpm

    https://www.cnblogs.com/reblue520/p/13231431.html

    https://www.jianshu.com/p/88765d6dc8f2

    https://my.oschina.net/devopsxin/blog/1924462

    如果您认可我的工作,并且觉得本文对您有所帮助,可以通过支付宝或转发文章的方式资助我们,我们愿意接受来自各方面的捐赠。再次感谢您对开源事业的赞助和支持!
    文章部分内容可能摘自网络,如果侵犯您的权益,请及时联系我,谢谢.

    作者:JackChain
  • 相关阅读:
    黑马程序员_字符串常用处理方法
    动软代码生成器,主子表增加的时候子表的parentID无法插入问题解决方案
    大数据量高并发的数据库优化详解
    C# Socket网络编程精华篇 (转)
    html+javascript+soap获取webservice免费天气预报信息
    js中字符串怎么转化为日期
    attachEvent方法的作用
    C#中[WebMethod]的用法,aspx、ashx、asmx
    C#操作XML方法详解
    C#操作XML的通用方法总结
  • 原文地址:https://www.cnblogs.com/qidian10/p/14369512.html
Copyright © 2011-2022 走看看