網(wǎng)上有很多關(guān)于pos機(jī)域名不可用,想學(xué)會MyCat高可用集群搭建的知識,也有很多人為大家解答關(guān)于pos機(jī)域名不可用的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)域名不可用
一、集群架構(gòu)1.MyCat實現(xiàn)讀寫分離架構(gòu)在我前面的文章, 我已經(jīng)講解過了通過MyCat來實現(xiàn)MySQL的讀寫分離, 從而完成MySQL集群的負(fù)載均衡 , 如下面的結(jié)構(gòu)圖:
但是以上架構(gòu)存在問題 , 由于MyCat中間件是單節(jié)點的服務(wù), 前端客戶端所有的壓力過來都直接請求這一臺MyCat , 存在單點故障。所以這個時候, 我們就需要考慮MyCat的集群 ;
2.MyCat集群架構(gòu)通過MyCat來實現(xiàn)后端MySQL的負(fù)載均衡 , 通過HAProxy再實現(xiàn)MyCat集群的負(fù)載均衡 ;
HAProxy 負(fù)責(zé)將請求分發(fā)到 MyCat 上,起到負(fù)載均衡的作用,同時 HAProxy 也能檢測到 MyCat是否存活,HAProxy 只會將請求轉(zhuǎn)發(fā)到存活的 MyCat 上。如果一臺 MyCat 服務(wù)器宕機(jī),HAPorxy 轉(zhuǎn)發(fā)請求時不會轉(zhuǎn)發(fā)到宕機(jī)的 MyCat 上,所以 MyCat 依然可用。
HAProxy介紹:
HAProxy 是一個開源的、高性能的基于TCP(第四層)和HTTP(第七層)應(yīng)用的負(fù)載均衡軟件。 使用 HAProxy可以快速、可靠地實現(xiàn)基于TCP與HTTP應(yīng)用的負(fù)載均衡解決方案。
具有以下優(yōu)點:
可靠性和穩(wěn)定性好, 可以與硬件級的F5負(fù)載均衡服務(wù)器媲美 ;處理能力強, 最高可以通過維護(hù)4w-5w個并發(fā)連接, 單位時間處理的最大請求數(shù)達(dá)到2w個 ;支持多種負(fù)載均衡算法 ;有功能強大的監(jiān)控界面, 通過此頁面可以實時了解系統(tǒng)的運行情況 ;但是, 上述的架構(gòu)也是存在問題的, 因為所以的客戶端請求都是先到達(dá)HAProxy, 由HAProxy再將請求再向下分發(fā), 如果HAProxy宕機(jī)的話, 就會造成整個MyCat集群不能正常運行, 依然存在單點故障。
3.MyCat的高可用集群圖解說明:
HAProxy 實現(xiàn)了 MyCat 多節(jié)點的集群高可用和負(fù)載均衡,而 HAProxy 自身的高可用則可以通過Keepalived 來實現(xiàn)。因此,HAProxy 主機(jī)上要同時安裝 HAProxy 和 Keepalived,Keepalived 負(fù)責(zé)為該服務(wù)器搶占 vip(虛擬 ip),搶占到 vip 后,對該主機(jī)的訪問可以通過原來的 ip訪問,也可以直接通過 vip訪問。Keepalived 搶占 vip 有優(yōu)先級,在 keepalived.conf 配置中的 priority 屬性決定。但是一般哪臺主機(jī)上的Keepalived服務(wù)先啟動就會搶占到vip,即使是slave,只要先啟動也能搶到(要注意避免Keepalived的資源搶占問題)。HAProxy 負(fù)責(zé)將對 vip 的請求分發(fā)到 MyCat 集群節(jié)點上,起到負(fù)載均衡的作用。同時 HAProxy 也能檢測到 MyCat 是否存活,HAProxy 只會將請求轉(zhuǎn)發(fā)到存活的 MyCat 上。如果 Keepalived+HAProxy 高可用集群中的一臺服務(wù)器宕機(jī),集群中另外一臺服務(wù)器上的 Keepalived 會立刻搶占 vip 并接管服務(wù),此時搶占了 vip 的 HAProxy 節(jié)點可以繼續(xù)提供服務(wù)。如果一臺 MyCat 服務(wù)器宕機(jī),HAPorxy 轉(zhuǎn)發(fā)請求時不會轉(zhuǎn)發(fā)到宕機(jī)的 MyCat 上,所以 MyCat 依然可用。綜上:MyCat 的高可用及負(fù)載均衡由 HAProxy 來實現(xiàn),而 HAProxy 的高可用,由 Keepalived 來實現(xiàn)。
keepalived介紹:
Keepalived是一種基于VRRP協(xié)議來實現(xiàn)的高可用方案,可以利用其來避免單點故障。 通常有兩臺甚至多臺服務(wù)器運行Keepalived,一臺為主服務(wù)器(Master), 其他為備份服務(wù)器, 但是對外表現(xiàn)為一個虛擬IP(VIP), 主服務(wù)器會發(fā)送特定的消息給備份服務(wù)器, 當(dāng)備份服務(wù)器接收不到這個消息時, 即認(rèn)為主服務(wù)器宕機(jī), 備份服務(wù)器就會接管虛擬IP, 繼續(xù)提供服務(wù), 從而保證了整個集群的高可用。VRRP(虛擬路由冗余協(xié)議-Virtual Router Redundancy Protocol)協(xié)議是用于實現(xiàn)路由器冗余的協(xié)議,VRRP 協(xié)議將兩臺或多臺路由器設(shè)備虛擬成一個設(shè)備,對外提供虛擬路由器 IP(一個或多個),而在路由器組內(nèi)部,如果實際擁有這個對外 IP 的路由器如果工作正常的話就是 MASTER,或者是通過算法選舉產(chǎn)生。MASTER 實現(xiàn)針對虛擬路由器 IP 的各種網(wǎng)絡(luò)功能,如 ARP 請求,ICMP,以及數(shù)據(jù)的轉(zhuǎn)發(fā)等;其他設(shè)備不擁有該虛擬 IP,狀態(tài)是 BACKUP,除了接收 MASTER 的 VRRP 狀態(tài)通告信息外,不執(zhí)行對外的網(wǎng)絡(luò)功能。當(dāng)主機(jī)失效時,BACKUP 將接管原先 MASTER 的網(wǎng)絡(luò)功能。VRRP 協(xié)議使用多播數(shù)據(jù)來傳輸 VRRP 數(shù)據(jù),VRRP 數(shù)據(jù)使用特殊的虛擬源 MAC 地址發(fā)送數(shù)據(jù)而不是自身網(wǎng)卡的 MAC 地址,VRRP 運行時只有 MASTER 路由器定時發(fā)送 VRRP 通告信息,表示 MASTER 工作正常以及虛擬路由器 IP(組),BACKUP 只接收 VRRP 數(shù)據(jù),不發(fā)送數(shù)據(jù),如果一定時間內(nèi)沒有接收到 MASTER 的通告信息,各 BACKUP 將宣告自己成為 MASTER,發(fā)送通告信息,重新進(jìn)行 MASTER 選舉狀態(tài)。
二、高可用集群搭建1.部署環(huán)境規(guī)劃2.MySQL主從復(fù)制搭建A.master在master 的配置文件(/usr/my.cnf)中,配置如下內(nèi)容:#mysql 服務(wù)ID,保證整個集群環(huán)境中唯一 server-id=1 #mysql binlog 日志的存儲路徑和文件名 log-bin=/var/lib/mysql/mysqlbin #設(shè)置logbin格式 binlog_format=STATEMENT #是否只讀,1 代表只讀, 0 代表讀寫 read-only=0 #指定同步的數(shù)據(jù)庫 binlog-do-db=db01 binlog-do-db=db02 binlog-do-db=db03123456789101112執(zhí)行完畢之后,需要重啟Mysql:
service mysql restart ;1創(chuàng)建同步數(shù)據(jù)的賬戶,并且進(jìn)行授權(quán)操作:
grant replication slave on *.* to 'itcast'@'%' identified by 'itcast'; flush privileges;123查看master狀態(tài):
show master status;1
字段含義:
File : 從哪個日志文件開始推送日志文件 Position : 從哪個位置開始推送日志 Binlog_Do_DB : 指定需要同步的數(shù)據(jù)庫123B.slave在 slave 端配置文件中,配置如下內(nèi)容:
#mysql服務(wù)端ID,唯一 server-id=2 #指定binlog日志 log-bin=/var/lib/mysql/mysqlbin #啟用中繼日志 relay-log=mysql-relay123456執(zhí)行完畢之后,需要重啟Mysql:
service mysql restart;1執(zhí)行如下指令 :
change master to master_host= '192.168.192.157', master_user='itcast', master_password='itcast', master_log_file='mysqlbin.000002', master_log_pos=120;1
指定當(dāng)前從庫對應(yīng)的主庫的IP地址,用戶名,密碼,從哪個日志文件開始的那個位置開始同步推送日志。
開啟同步操作start slave; show slave status;12停止同步操作
stop slave;1C.測試驗證
create database db01; user db01; create table user( id int(11) not null auto_increment, name varchar(50) not null, sex varchar(1), primary key (id) )engine=innodb default charset=utf8; insert into user(id,name,sex) values(null,'Tom','1'); insert into user(id,name,sex) values(null,'Trigger','0'); insert into user(id,name,sex) values(null,'Dawn','1');12345678910111213143.MyCat安裝配置A.schema.xml
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100"> <table name="user" dataNode="dn1" primaryKey="id"/> </schema> <dataNode name="dn1" dataHost="localhost1" database="db01" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.192.157:3306" user="root" password="itcast"> <readHost host="hostS1" url="192.168.192.158:3306" user="root" password="itcast" /> </writeHost> </dataHost> </mycat:schema>1234567891011121314B.server.xml
<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">ITCAST</property> </user> <user name="test"> <property name="password">123456</property> <property name="schemas">ITCAST</property> </user>123456789
兩臺MyCat服務(wù), 做相同的配置 ;
4.HAProxy安裝配置A.安裝準(zhǔn)備好HAProxy安裝包,傳到/root目錄下haproxy-1.5.16.tar.gz1解壓到/usr/local/src目錄下
tar -zxvf haproxy-1.5.16.tar.gz -C /usr/local/src1進(jìn)入解壓后的目錄,查看內(nèi)核版本,進(jìn)行編譯
cd /usr/local/src/haproxy-1.5.16 uname -r make TARGET=linux2632 PREFIX=/usr/local/haproxy ARCH=x86_64 # TARGET=linux310,內(nèi)核版本,使用uname -r查看內(nèi)核,如:2.6.32-431.el6.x86_64,此時該參數(shù)就為linux2632; # ARCH=x86_64,系統(tǒng)位數(shù); # PREFIX=/usr/local/haprpxy #/usr/local/haprpxy,為haprpxy安裝路徑。1234567編譯完成后,進(jìn)行安裝
make install PREFIX=/usr/local/haproxy1安裝完成后,創(chuàng)建目錄
mkdir -p /usr/data/haproxy/1創(chuàng)建HAProxy配置文件
vim /usr/local/haproxy/haproxy.conf
globallog 127.0.0.1 local0 maxconn 4096 chroot /usr/local/haproxy pidfile /usr/data/haproxy/haproxy.piduid 99 gid 99 daemon node mysql-haproxy-01 description mysql-haproxy-01 defaults log global mode tcp option abortonclose option redispatch retries 3 maxconn 2000 timeout connect 50000ms timeout client 50000ms timeout server 50000ms listen proxy_status bind 0.0.0.0:48066 mode tcp balance roundrobin server mycat_1 192.168.192.157:8066 check server mycat_2 192.168.192.158:8066 check frontend admin_stats bind 0.0.0.0:8888 mode http stats enable option httplog maxconn 10 stats refresh 30s stats uri /admin stats auth admin:123123 stats hide-version stats admin if TRUE12345678910111213141516171819202122232425262728293031323334353637
內(nèi)容解析如下 :
#global 配置中的參數(shù)為進(jìn)程級別的參數(shù),通常與其運行的操作系統(tǒng)有關(guān)global#定義全局的syslog服務(wù)器, 最多可定義2個; local0 是日志設(shè)備, 對應(yīng)于/etc/rsyslog.conf中 的配置 , 默認(rèn)收集info級別日志 log 127.0.0.1 local0 #log 127.0.0.1 local1 notice #log loghost local0 info #設(shè)定每個haproxy進(jìn)程所接受的最大并發(fā)連接數(shù) ; maxconn 4096 #修改HAproxy工作目錄至指定的目錄并在放棄權(quán)限之前執(zhí)行chroot操作, 可以提升haproxy的安全級別 chroot /usr/local/haproxy #進(jìn)程ID保存文件 pidfile /usr/data/haproxy/haproxy.pid #指定用戶ID uid 99 #指定組ID gid 99 #設(shè)置HAproxy以守護(hù)進(jìn)程方式運行 daemon #debug #quiet node mysql-haproxy-01 ## 定義當(dāng)前節(jié)點的名稱,用于 HA 場景中多 haproxy 進(jìn)程共享同一 個 IP 地址時 description mysql-haproxy-01 ## 當(dāng)前實例的描述信息 #defaults:用于為所有其他配置段提供默認(rèn)參數(shù),這默認(rèn)配置參數(shù)可由下一個"defaults"所重新設(shè)定 defaults #繼承g(shù)lobal中的log定義 log global #所使用的處理模式(tcp:四層 , http:七層, health:狀態(tài)檢查,只返回OK) ### tcp: 實例運行于純 tcp 模式,在客戶端和服務(wù)器端之間將建立一個全雙工的連接,且不會對 7 層報文做任何類型的檢查,此為默認(rèn)模式 ### http:實例運行于 http 模式,客戶端請求在轉(zhuǎn)發(fā)至后端服務(wù)器之前將被深度分析,所有不與 RFC 模式兼容的請求都會被拒絕 ### health:實例運行于 health 模式,其對入站請求僅響應(yīng)“OK”信息并關(guān)閉連接,且不會記錄任 何日志信息 ,此模式將用于相應(yīng)外部組件的監(jiān)控狀態(tài)檢測請求 mode tcp#當(dāng)服務(wù)器負(fù)載很高的時候,自動結(jié)束掉當(dāng)前隊列處理時間比較長的連接 option abortonclose #當(dāng)使用了cookie時,haproxy將會將請求的后端服務(wù)器的serverID插入到cookie中,以保證會話的 session持久性,而此時,后端服務(wù)器宕機(jī),但是客戶端的cookie不會刷新,設(shè)置此參數(shù),將會將客戶請求 強制定向到另外一個后端server上,以保證服務(wù)的正常。 option redispatch retries 3 # 前端的最大并發(fā)連接數(shù)(默認(rèn)為 2000) maxconn 2000 # 連接超時(默認(rèn)是毫秒,單位可以設(shè)置 us,ms,s,m,h,d) timeout connect 5000 # 客戶端超時時間 timeout client 50000 # 服務(wù)器超時時間 timeout server 50000 #listen: 用于定義通過關(guān)聯(lián)“前端”和“后端”一個完整的代理,通常只對 TCP 流量有用 listen proxy_status bind 0.0.0.0:48066 # 綁定端口 mode tcp balance roundrobin # 定義負(fù)載均衡算法,可用于"defaults"、"listen"和"backend"中,默認(rèn)為輪詢 #格式: server <name> <address> [:[port]] [param*] # weight : 權(quán)重,默認(rèn)為 1,最大值為 256,0 表示不參與負(fù)載均衡 # backup : 設(shè)定為備用服務(wù)器,僅在負(fù)載均衡場景中的其他 server 均不可以啟用此 server # check : 啟動對此 server 執(zhí)行監(jiān)控狀態(tài)檢查,其可以借助于額外的其他參數(shù)完成更精細(xì)的設(shè)定 # inter : 設(shè)定監(jiān)控狀態(tài)檢查的時間間隔,單位為毫秒,默認(rèn)為 2000,也可以使用 fastinter 和 downinter 來根據(jù)服務(wù)器端專題優(yōu)化此事件延遲 # rise : 設(shè)置 server 從離線狀態(tài)轉(zhuǎn)換至正常狀態(tài)需要檢查的次數(shù)(不設(shè)置的情況下,默認(rèn)值為 2) # fall : 設(shè)置 server 從正常狀態(tài)轉(zhuǎn)換至離線狀態(tài)需要檢查的次數(shù)(不設(shè)置的情況下,默認(rèn)值為 3) # cookie : 為指定 server 設(shè)定 cookie 值,此處指定的值將會在請求入站時被檢查,第一次為此值挑選的 server 將會被后續(xù)的請求所選中,其目的在于實現(xiàn)持久連接的功能# maxconn: 指定此服務(wù)器接受的最大并發(fā)連接數(shù),如果發(fā)往此服務(wù)器的連接數(shù)目高于此處指定的值,其將被放置于請求隊列,以等待其他連接被釋放 server mycat_1 192.168.192.157:8066 check inter 10s server mycat_2 192.168.192.158:8066 check inter 10s # 用來匹配接收客戶所請求的域名,uri等,并針對不同的匹配,做不同的請求處理 # HAProxy 的狀態(tài)信息統(tǒng)計頁面 frontend admin_stats bind 0.0.0.0:8888 mode http stats enable option httplog maxconn 10 stats refresh 30s stats uri /admin stats auth admin:123123 stats hide-version stats admin if TRUE1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
HAProxy的負(fù)載均衡策略:
B.啟動訪問啟動HAProxy/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf1查看HAProxy進(jìn)程
ps -ef|grep haproxy1訪問
http://192.168.192.162:8888/admin
界面:
5.Keepalived安裝配置A.安裝配置上傳安裝包到Linuxalt + p --------> put D:/tmp/keepalived-1.4.5.tar.gz1解壓安裝包到目錄 /usr/local/src
tar -zxvf keepalived-1.4.5.tar.gz -C /usr/local/src1安裝依賴插件
yum install -y gcc openssl-devel popt-devel1進(jìn)入解壓后的目錄,進(jìn)行配置,進(jìn)行編譯
cd /usr/local/src/keepalived-1.4.5 ./configure --prefix=/usr/local/keepalived123進(jìn)行編譯,完成后進(jìn)行安裝
make && make install1運行前配置
cp /usr/local/src/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/ mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/src/keepalived-1.4.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/12345修改配置文件 /etc/keepalived/keepalived.conf
Master:
global_defs { notification_email { javadct@163.com }notification_email_from keepalived@showjoy.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id haproxy01 vrrp_skip_check_adv_addr vrrp_garp_interval 0 vrrp_gna_interval 0 }vrrp_script chk_haproxy { script "/etc/keepalived/haproxy_check.sh"interval 2 weight 2 }vrrp_instance VI_1 { #主機(jī)配MASTER,備機(jī)配BACKUP state MASTER #所在機(jī)器網(wǎng)卡 interface eth1 virtual_router_id 51 #數(shù)值越大優(yōu)先級越高 priority 120 advert_int 1 authentication { auth_type PASS auth_pass 1111 }## 將 track_script 塊加入 instance 配置塊 track_script { chk_haproxy ## 檢查 HAProxy 服務(wù)是否存活 }virtual_ipaddress { #虛擬IP 192.168.192.200 } }1234567891011121314151617181920212223242526272829303132333435363738394041
BackUP:
global_defs { notification_email { javadct@163.com }notification_email_from keepalived@showjoy.com smtp_server 127.0.0.1 smtp_connect_timeout 30#標(biāo)識本節(jié)點 router_id haproxy02 vrrp_skip_check_adv_addr vrrp_garp_interval 0 vrrp_gna_interval 0 }# keepalived 會定時執(zhí)行腳本并對腳本執(zhí)行的結(jié)果進(jìn)行分析,動態(tài)調(diào)整 vrrp_instance 的優(yōu)先級 vrrp_script chk_haproxy { # 檢測 haproxy 狀態(tài)的腳本路徑 script "/etc/keepalived/haproxy_check.sh" #檢測時間間隔 interval 2 #如果條件成立,權(quán)重+2 weight 2 }vrrp_instance VI_1 { #主機(jī)配MASTER,備機(jī)配BACKUP state BACKUP #所在機(jī)器網(wǎng)卡 interface eth1 virtual_router_id 51 #數(shù)值越大優(yōu)先級越高 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 }## 將 track_script 塊加入 instance 配置塊 track_script { chk_haproxy ## 檢查 HAProxy 服務(wù)是否存活 }virtual_ipaddress { #虛擬IP 192.168.192.200} }123456789101112131415161718192021222324252627282930313233343536373839404142434445編寫檢測haproxy的shell腳本 haproxy_check.sh
#!/bin/bash A=`ps -C haproxy --no-header | wc -l` if [ $A -eq 0 ];then /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf echo "haproxy restart ..." &> /dev/null sleep 1 if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then /etc/init.d/keepalived stop echo "stop keepalived" &> /dev/null fi fi123456789101112131415161718192021B.啟動測試啟動Keepalived
service keepalived start1登錄驗證
mysql -uroot -p123456 -h 192.168.192.200 -P 480661
以上就是關(guān)于pos機(jī)域名不可用,想學(xué)會MyCat高可用集群搭建的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)域名不可用的知識,希望能夠幫助到大家!