如何在linux服務器上搭建集羣
概念:多臺服務器同時對外提供服務
優點:
1.高可用
2.解決單個物理服務的上線
常用的集羣架構:
主從架構(master-slave)(DB)
負載均衡(應用服務器Tomcat)
主從架構(master-slave)(DB)
-
首先實現mysql讀寫分離需要解決的問題
a)無法通過精確保證讀走從機,寫走主機;
b)通過程序訪問數據庫時,url不能直接寫死一個DB服務器的IP
解決方案:使用mycat中間件
-
具體實現步驟:
-
首先從母機克隆一個服務器起名mycat
-
修改ens-37 配置一個新的IP
-
安裝Mycat中間件
從官網下載mycat
先安裝wget命令插件 yum install -y wget
執行 wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz 下載
-
執行 tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 解壓縮mycat
-
執行 mv mycat /usr/ 移動到usr目錄下
-
配置mycat的環境變量
執行 vim .bash_profile 配置信息如下:
export JAVA_HOME=/usr/jdk1.8.0_171
export MYCAT_HOME=/usr/mycat
export PATH=MYCAT_HOME/bin:$PATH
執行 source .bash_profile
mycat
如上最後一行顯示配置成功
-
配置mycat中conf下的配置文件schema.xml
執行 vim /usr/mycat/conf/schema.xml
刪除schema標籤裏所有的信息
輸入如下信息:
<!-- 定義MyCat的邏輯庫 --> <schema name="給mycat起的邏輯名稱" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema> <!-- 定義MyCat的數據節點 --> <dataNode name="testNode" dataHost="dtHost" database="真是數據庫的名稱" /> <dataHost name="dtHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.28.128:3306" user="root" password="root"> <!-- can have multi read hosts --> <readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" /> </writeHost> </dataHost>
-
配置登陸mycat的權限
執行vim server.xml
刪除mycat標籤中的所有信息
輸入信息如下:
<system> <!-- 這裏配置的都是一些系統屬性,可以自己查看mycat文--> <property name="defaultSqlParser">druidparser</property> <property name="charset">utf8mb4</property> </system> <user name="root"> <property name="password">root</property> <property name="schemas">mycat對應的邏輯名</property> </user>
-
執行 mycat console 前臺啓動mycat
啓動報錯:啓動超時
解決方法:
修改conf裏的wrapper.conf配置文件,修改裏面的超時時間
wrapper.startup.timeout=7200 #2小時
-
成功
負載均衡(應用服務器Tomcat)
-
單節點應用服務器存在的問題
a)當單個應用服務器宕機時,整個網站癱瘓無法提供相應的服務
b)當大量用戶併發訪問應用服務器時,服務器會因爲負載過重,宕機,無法對外提供服務器
解決方案:搭建集羣解決單節點問題
-
如何做到負載均衡的問題
使用nginx中間件,nginx是一個高性能的HTTP和反向代理web服務器;
-
負載均衡搭建步驟
-
從母機克隆三臺服務器並修改靜態IP
母機裏應該有tomcat
-
使用SCRT連接三臺服務器
-
修改服務器index.jsp便於測試觀察是否搭建成功
-
克隆nginx服務器修改靜態IP 連接SCRT
-
上傳nginx的安裝包 並解壓
-
手工編譯nginx 通過 ./configure 初始化編譯環境
報錯:
解決方案:
因爲nginx時c語言編寫需要安裝gcc c語言編譯環境
執行 yum -y install gcc
-
安裝完成之後再執行 ./configure
報錯
解決方案:
安裝pcre-devel
執行 yum -y install pcre-devel
安裝zlib-devel
執行 yum -y install zlib-devel
-
./configure
成功
-
編譯並安裝nginx
執行 make && make install
默認安裝位置 : /usr/local/nginx
-
啓動nginx
執行 cd /usr/local/nginx/sbin
執行 ./nginx
-
啓動成功訪問
-
關閉nginx
./nginx -s stop
-
在nginx配置tomcat服務器的負載均衡
-
配置nginx管理的tomcat
-
進入nginx的conf目錄下
執行 vim nginx.conf
-
將一下配置信息複製到server上面:
upstream tomcat-servers { #ip_hash; server 192.168.56.204:8989;//需要負載均衡的服務器IP server 192.168.56.205:8989; server 192.168.56.206:8989; }
-
配置訪問nginx時的跳轉路徑
location / { proxy_pass http://tomcat-servers; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_next_upstream http_502 http_504 error timeout invalid_header; }
-
-
測試
成功 nginx 默認的負載均衡方式時輪詢
-
補充:負載均衡的策略
-
輪詢 按照固定順序
upstream tomcat-servers { #ip_hash; server 192.168.56.204:8989;//需要負載均衡的服務器IP server 192.168.56.205:8989; server 192.168.56.206:8989; }
-
IP hash 根據訪問的IP(數字) % tomcat的數量 得到數字 數字決定請求到哪個服務器
upstream tomcat-servers { ip_hash; server 192.168.56.204:8989;//需要負載均衡的服務器IP server 192.168.56.205:8989; server 192.168.56.206:8989; }
-
weight 根據對應的權重 決定優先級 權重越大 優先級越大
upstream tomcat-servers { #ip_hash; server 192.168.56.204:8989 wegiht=數字; //需要負載均衡的服務器IP wegiht設定權重訪問優先級 server 192.168.56.205:8989 wegiht=數字; server 192.168.56.206:8989 wegiht=數字; }
-
least_conn 最少連接方式
-
fair 大數據用 需要安裝第三方插件 按照服務器端的響應時間來分配請求,響應時間短的優先分配
-
url_hash 需要安裝第三方插件 根據地址按照相應的算法來計算
server 192.168.56.204:8989 wegiht=數字; //需要負載均衡的服務器IP wegiht設定權重訪問優先級
server 192.168.56.205:8989 wegiht=數字;
server 192.168.56.206:8989 wegiht=數字;
}
-
least_conn 最少連接方式
-
fair 大數據用 需要安裝第三方插件 按照服務器端的響應時間來分配請求,響應時間短的優先分配
-
url_hash 需要安裝第三方插件 根據地址按照相應的算法來計算