rabbitmq3.7.5 centos7 集羣部署筆記

1. 準備3臺 centos服務器  192.168.233.128    192.168.233.130    192.168.233.131html

防火牆放開 集羣端口, 這裏一併把全部rabbitmq用到的端口都放開node

 firewall-cmd --zone=public --add-port=4369/tcp --permanentc#

 firewall-cmd --zone=public --add-port=5671-5672/tcp --permanentcentos

 firewall-cmd --zone=public --add-port=25672/tcp --permanent服務器

 firewall-cmd --zone=public --add-port=35672-35682/tcp --permanentcookie

 firewall-cmd --zone=public --add-port=15672/tcp --permanentapp

 firewall-cmd --zone=public --add-port=61613-61614/tcp --permanent異步

 firewall-cmd --zone=public --add-port=1883/tcp --permanenttcp

 firewall-cmd --zone=public --add-port=8883/tcp --permanent測試

 firewall-cmd --zone=public --add-port=15674-15675/tcp --permanent

 firewall-cmd --reload

 

2. 修改host映射  修改 /etc/hosts 文件 ,方便3臺機器訪問

添加以下  ,添加後重啓 3臺機器

192.168.233.128 rabbitmq1

192.168.233.130 rabbitmq2

192.168.233.131 rabbitmq3

 

3. 修改cookie文件, 統一成一個key , [每一個erlang程序都一個cookie]

這個cookie 能夠在 rabbitmq的日誌中 查找到

如圖 cookie 文件就在 這個 home dir 目錄中 

cd /var/lib/rabbitmq

ls -a      --這個是查找目錄下全部文件. cookie文件默認是隱藏的

用這個 .erlang.cookie文件中的 key 替換掉 rabbitmq 2,3 中的key ,使 3 臺服務器的 .erlang.cookie中的內容一致

 

4. 集羣搭建  參考官網 https://www.rabbitmq.com/clustering.html

根據官網介紹: 咱們把rabbitmq2 加入到 rabbitmq1的集羣中

在 rabbitmq2 上 中止 rabbitmq  

rabbitmqctl stop_app

rabbitmqctl join_cluster rabbit@rabbitmq1

rabbitmqctl start_app

 

查看 集羣狀態

rabbitmqctl cluster_status

發現 nodes節點已經變成2個了, 同理 把rabbitmq3加入 rabbitmq1集羣中

 

5. 集羣搭建完成後, 添加rabbitmq用戶

rabbitmqctl add_user test test //添加用戶,後面兩個參數分別是用戶名和密碼,我這都用test了。

rabbitmqctl set_permissions -p / test ".*" ".*" ".*" //添加權限

rabbitmqctl set_user_tags test administrator //修改用戶角色

 

而後登陸 ui頁面 http://192.168.233.128:15672/#/

發現三個 info中 都是disc 都是磁盤節點

若是想 把節3點改爲 內存節點 , 參考官網 http://www.rabbitmq.com/clustering.html

在 rabbitmq3 上執行 

rabbitmqctl stop_app

rabbitmqctl change_cluster_node_type ram

rabbitmqctl start_app

能夠看到 info中 disc變成RAM了

 

其餘集羣命令如: 從集羣刪除 某節點, 參考官網 都有

 

-----------------------------------------------------------------------------高可用集羣-------------------------------------------------------------------------------------

參考: http://www.rabbitmq.com/ha.html

queue 有兩種模式  默認   default

          鏡像    mirror

 

queue mirror  =>  master / slave   高可用的隊列方案

Each mirrored queue consists of one master and one or more mirrors.

Messages published to the queue are replicated to all mirrors

 

1. 怎麼配置 

Mirroring parameters are configured using policies.

HA mode: 把queue 同步到哪些機器上 , 這裏選用all 通常業務也就3臺rabbitmq服務器就差很少了

ha-sync-mode : 異步策略,好比 新加入節點A 到集羣中, automatic=自動同步隊列數據 到節點A ,manual 就手動

 

簡單測試下  新建policy

 

 

  新建 queue test1

 發現 node 顯示+2  表示 該隊列 當前主節點(Master)是rabbitmq3  ,從節點(Slaver)是 rabbitmq1和2 

features 中 顯示了 隊列使用了 咱們剛剛定義的 policy

 

能夠本身作下測試 :  新建 policy,不設置 ha-sync-mode

讓 rabbitmq1節點掛掉, 推數據到test1 , 而後讓 rabbitmq1 從新啓動, 數據會不會自動同步到 rabbitmq1 (不會的, 須要手動同步, 而 ha-sync-mode=automatic就會,)

 

 

下面展現 c#中怎麼鏈接 rabbitmq集羣 

class Producter { const string exchangeName = "myexchange"; const string queueName = "test1"; const string routeKey = "test1"; public static void Main() { //建立鏈接工廠
            ConnectionFactory factory = new ConnectionFactory { UserName = "test",//用戶名
                Password = "test",//密碼 //HostName = "118.24.152.28",//rabbitmq ip
 }; //建立鏈接
            var connection = factory.CreateConnection(new List<string>() { "192.168.141.128", "192.168.141.129", "192.168.141.130" }); //建立通道
            var channel = connection.CreateModel(); var properties = channel.CreateBasicProperties(); properties.Persistent = true; //消息持久化
 Console.WriteLine(string.Format("開始時間: {0}", DateTime.Now)); for (int i = 0; i < int.MaxValue; i++) { try { var msg = Encoding.UTF8.GetBytes(string.Format("你好{0},{1} ", i, string.Join(",", Enumerable.Range(0, 10)))); channel.BasicPublish(string.Empty, routeKey, properties, msg); Console.WriteLine(i + " 執行完畢"); Thread.Sleep(1000); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } Console.WriteLine(string.Format("結束時間: {0}", DateTime.Now)); channel.Close(); connection.Close(); } }
相關文章
相關標籤/搜索