教你用node從零搭建一套微服務系統(三)

        做爲微服務的消息中心,單節點必定支撐不住龐大的壓力,本節,筆者帶你們去搭建一套rabbitmq集羣,以及用HaProxy去代理集羣節點。

1、erlang環境
別去搞什麼yum安裝了,很慢很慢,這是最新的源碼地址
http://erlang.org/download/otp_src_19.3.tar.gz
建議迅雷或者其餘工具先下載下來,而後用rz(沒有安裝的同窗能夠yum install lrzsz -y)上傳到服務器。
/* 安裝依賴 */
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel
/* 編譯安裝 */
tar -xzvf otp_src_19.3.tar.gz
cd ./otp_src_19.3
./configure --prefix=/usr/erlang --without-javac 
make && make install
2、rabbitmq單節點安裝
/* rabbitmq下載地址 */
https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/rabbitmq-server-3.6.14-1.el7.noarch.rpm

/* 導入 */
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

/* 安裝 */
yum install rabbitmq-server-3.6.14-1.el7.noarch.rpm

/* 開啓web管理界面 */
rabbitmq-plugins enable rabbitmq_management

/* 開啓15672 web端口 */
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd —reload

/* 用戶命令相應的命令 */
(1) 新增一個用戶rabbitmqctl add_user Username Password
(2) 刪除一個用戶rabbitmqctl delete_user Username
(3) 修改用戶的密碼rabbitmqctl change_password Username Newpassword
(4) 查看當前用戶列表rabbitmqctl list_users

/* 容許用戶遠程訪問 */
rabbitmqctl set_permissions -p "/" User ".*" ".*" ".*"

/* 設置用戶角色的命令 */
rabbitmqctl set_user_tags User Tag
User爲用戶名, Tag爲角色名(對應於上面的administrator,monitoring,policymaker,management,或其餘自定義名稱)。
3、rabbitmq集羣搭建

       建議將1節點虛擬機複製兩份 這樣能夠保證rabbitmq cookie一致,不用作變動。而後再分別編輯三臺節點的hosts文件,三臺節點hosts文件一致。java

vi /etc/hosts
/* 加入三個節點 */
192.168.41.140   rabbitmq-node1.com rabbitmq-node1
192.168.41.141   rabbitmq-node2.com rabbitmq-node2
192.168.41.142   rabbitmq-node3.com rabbitmq-node3

重啓三臺服務器node

/* 分別以detached方式啓動三臺rabbitmq */
rabbitmq-server -detached
// 若是提示PID FILE不能寫入,能夠關閉應用,直接以服務方式啓動,關閉以後重啓仍然提示有實例正在運行能夠強制殺死線程
ps aux | grep rabbitmq
kill -9 xxxx
/* 啓動服務 */
service rabbitmq-server start

讓node二、node3加入集羣linux

/* 將node2節點加入node1 做爲RAM類型節點 */
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq-node1 --ram
rabbitmqctl start_app

/* 將node3節點加入node1 做爲disc類型節點 */
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app

/* 查看集羣信息 */
rabbitmqctl cluster_status

打開web管理界面查看,三臺節點已經成功啓動
c++

安裝HAProxy來代理三臺節點web

/* haproxy下載連接 */
http://www.haproxy.org/download/1.7/src/haproxy-1.7.9.tar.gz
/* 根據平臺選擇編譯參數 */
uname -r

/* 安裝c/c++ */
yum install gcc gcc-c++

/* 筆者平臺 */
3.10.0-693.5.2.el7.x86_64
// 因此編譯參數爲
make TARGET=linux2628 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

/* 添加環境變量 */
vi /etc/profile
export PATH=$PATH:/usr/local/haproxy/sbin
source /etc/profile

/* 複製bin文件,後續啓動須要 */
cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
haproxy -v 後顯示以下則表示成功

HA-Proxy version 1.7.9 2017/08/18
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>
/* 拷貝啓動文件 */
cp examples/haproxy.init /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy

/* 建立系統帳號 */
groupadd haproxy
useradd -g haproxy -M -s /sbin/nologin haproxy

/* 建立配置文件 */
mkdir /etc/haproxy
vi /etc/haproxy/haproxy.cfg
====
global
    #設置日誌
    log 127.0.0.1 local3 info
    chroot /usr/local/haproxy
    #用戶與用戶組
    user haproxy
    group haproxy
    #守護進程啓動
    daemon
    #最大鏈接數
    maxconn 4000
listen rabbitmq_local_cluster
   bind 0.0.0.0:5672
   #配置TCP模式
   mode tcp
   option tcplog
   #簡單的輪詢
   balance roundrobin
  #rabbitmq集羣節點配置
  # inter 2000 健康檢查時間間隔2秒
  # rise 3 檢測多少次才認爲是正常的
  # fall 3 失敗多少次才認爲是不可用的
  # weight 30 權重
  # 須要轉發的ip及端口
    server rabbitmq-node1 192.168.41.140:5672 check inter 2000 rise 3 fall 3 weight 30
    server rabbitmq-node2 192.168.41.141:5672 check inter 2000 rise 3 fall 3 weight 30
    server rabbitmq-node3 192.168.41.142:5672 check inter 2000 rise 3 fall 3 weight 30

#配置haproxy web監控,查看統計信息
listen private_monitoring
    bind :1080
    mode http
    option httplog
    stats enable
    #設置haproxy監控地址爲http://localhost:8100/stats
    stats uri /stats
    stats refresh 30s
    #添加用戶名密碼認證
    stats auth admin:admin
    
/* 編輯rsyslog */
vi /etc/rsyslog.conf

// 去掉下面兩行前的#
$ModLoad imudp
$UDPServerRun 514

// 添加下面一行保存
local3.*  /var/log/haproxy.log

// 重啓rsyslog
systemctl restart rsyslog
啓動haproxy
service haproxy start

/* 開放1080端口 */
firewall-cmd --zone=public --add-port=1080/tcp --permanent
firewall-cmd --reload

訪問http://ip:1080/stats,輸入帳號密碼 admin admin 以下圖
服務器

用咱們上一節搭建的微服務去連接HaProxy
這是配置信息
module.exports = Object.assign({
  rabbitMq_host: '192.168.41.140', // 替換成haproxy的ip
  rabbitMq_port: '5672', // haproxy代理端口
  rabbitMq_user: '***', // 這裏替換成本身rabbitmq-server上的用戶
  rabbitMq_password: '*****', // 這裏替換成本身rabbitmq-server上的密碼
  // server_host: '106.14.77.183',
  server_host: '127.0.0.1',
  server_port: 8889,
  rabbitMq_queue: {
    logic01: 'server',
    logic02: 'server_test'
  }
});
再去查看rabbitmq集羣監控界面,已經多出了一個鏈接一個queue和一個chanel

查看queue,發現名字和咱們配置的是同樣的,連接成功

啓動三個一樣的微服務後,發現連接變成3,消費者也變成了3

        至此rabbitmq集羣以及HaProxy負載均衡搭建完畢。若是各位看官對筆者的文章感興趣的話,但願關注下筆者的我的公衆號,你們一塊兒交流探討,若有寫的不對的地方,還但願各位指正,筆者深感榮幸,最後感謝你們的閱讀。

相關文章
相關標籤/搜索