mysql(三):mysql主主搭建+keepalived實現雙主熱備

? ? ? ? 前面介紹了mysql主從搭建,這種情況下加上主機down機后,整個數據庫環境也都蹦了,所以根據不同業務場景可以還需要實現down機后自動切換,且另一臺機器恢復后,數據立即同步,那么就需要用到mysql的主主模式,然后通過keepalived產生的虛擬IP可以實現負載均衡和故障轉移。

? ? ? ? 1、在132從庫上開啟log-bin


? ? ? ? 2、此時重啟132中mysql數據庫后進行配置

? ? ? ? 首先授權給局域網中所以msyql數據庫可以同步132的數據,

? ? ? ? GRANT? REPLICATION SLAVE ON *.* TO 'root'@'192.168.109.%' IDENTIFIED? BY '123456';

? ? ? ? 此時停止當前132中mysql數據庫的同步狀態

? ? ? ? 查看131數據庫中狀態

? ? ? ? 同步設置

? ? ? ? change master to master_host='192.168.109.131', master_user='root', master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=2501;

? ? ? ? 開始同步,且查看同步狀態是否正確

? ? ? 3、此時在131數據庫中進行同步設置

? ? ? ? 首先授權

? ? ? ? GRANT? REPLICATION SLAVE ON *.* TO 'root'@'192.168.109.%' IDENTIFIED? BY '123456';

? ? ? ? 然后查看132中數據的狀態

? ? ? ? 同步設置

? ? ? ? change master to master_host='192.168.109.132', master_user='root', master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;


? ? ? ? 開啟同步且查看同步狀態

? ? ? ? 此時主主已經搭建完成,進行測試,兩邊無論誰寫數據,另一邊都會同步

? ? ? ? 雖然我們做到了主主同步,但是負載均衡和故障轉移還未完成。

? ? ? ? 4、Keeaplived介紹

? ? ? ? Keepalived是Linux下面實現備份路由的高可靠性運行件。基于Keepalived設計的服務模式能夠真正做到主服務器和備份服務器故障時IP瞬間無縫交接。

? ? ? ? Nginx是基于Linux 2.6內核中epoll模型http服務器,與Apache進程派生模式不同的是Nginx進程基于于Master+Slave多進程模型,自身具有非常穩定的子進程管理功能。在Master進程分配模式下,Master進程永遠不進行業務處理,只是進行任務分發,從而達到Master進程的存活高可靠性,Slave進程所有的業務信號都由主進程發出,Slave進程所有的超時任務都會被Master中止,屬于非阻塞式任務模型。

? ? ? ? 服務器IP存活檢測是由Keepalived自己本身完成的,將2臺服務器配置成Keepalived互為主輔關系,任意一方機器故障對方都能夠將IP接管過去。

? ? ? ? Keepalived的服務IP通過其配置文件進行管理,依靠其自身的進程去確定服務器的存活狀態,如果在需要對服務器進程在線維護的情況下,只需要停掉被維護機器的Keepalived服務進程,另外一臺服務器就能夠接管該臺服務器的所有應用。

? ? ? ? 5、首先安裝對應的依賴包

? ? ? ? yum install -y pcre-devel openssl-devel popt-devel

? ? ? ? 6、安裝keepalived

? ? ? ? 在/usr/local/目錄下面解壓keepalived壓縮包

? ? ? ? 進入到keepalive的根目錄,執行:./configure --prefix=/usr/local/keepalived

? ? ? ? 當出現一下內容時,編譯成功:

? ? ? ? 執行:make && make install

? ? ? ? 安裝成功后,刪除掉keepalive的安裝程序。

? ? ? ? 同理,在132機器上也安裝好keepalived

? ? ? ? 7、keepalived服務模式添加

? ? ? ? cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

? ? ? ? cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

? ? ? ? cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

? ? ? ? 8、配置keepalived

? ? ? ? 1)、在131上配置。

? ? ? ? ! Configuration File for keepalived

? ? ? ? global_defs {

? ? ? ? notification_email {

? ? ? ? 245656162@qq.com#自己郵箱

? ? ? ? }

? ? ? ? notification_email_from 10086784@qq.com

? ? ? ? smtp_server 127.0.0.1

? ? ? ? smtp_connect_timeout 30

? ? ? ? router_idLVS_DEVEL2#此項必須唯一

? ? }

? ? vrrp_instance VI_1 {

? ? ? ? state BACKUP

? ? ? ? interfaceeth0#此選擇為自己虛擬IP的網卡

? ? ? ? virtual_router_id31

? ? ? ? priority 100

? ? ? ? advert_int 1

? ? ? ? authentication {

? ? ? ? auth_type PASS

? ? ? ? auth_pass 1111

? ? ? ? }

? ? ? ? virtual_ipaddress {

? ? ? ? 192.168.109.100? #此項為自定義的虛擬IP

? ? ? ? }

? ? ? ? }

? ? ? ? virtual_server 192.168.109.100 3306 {

? ? ? ? delay_loop 2

? ? ? ? lb_algo wlc

? ? ? ? persistence_timeout 50

? ? ? ? protocol TCP

? ? ? ? lb_kind DR

? ? ? ? real_server 192.168.109.131 3306 {

? ? ? ? weight 100

? ? ? ? TCP_CHECK {

? ? ? ? connect_timeout 10

? ? ? ? nb_get_retry 3

? ? ? ? delay_before_retry 3

? ? ? ? connect_port 3306

? ? ? ? }

? ? ? ? }

? ? ? ? real_server 192.168.109.132 3306 {

? ? ? ? weight 100

? ? ? ? TCP_CHECK {

? ? ? ? connect_timeout 10

? ? ? ? nb_get_retry 3

? ? ? ? delay_before_retry 3

? ? ? ? connect_port 3306

? ? ? ? }

? ? ? ? }

? ? ? ? }

? ? ? ? 啟動keepalived,看是否成功綁定

? ? ? ? /usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf

? ? ? ? 測試是否可以通過虛擬IP為100訪問數據庫和查詢數據

? ? ? ? 2)、此時在132上配置keepaviled。

? ? ? ? ! Configuration? File for keepalived

? ? ? ? global_defs {

? ? ? ? notification_email {

? ? ? ? 245656162@qq.com

? ? ? ? }

? ? ? ? notification_email_from 10086784@qq.com

? ? ? ? smtp_server 127.0.0.1

? ? ? ? smtp_connect_timeout 30

? ? ? ? router_idLVS_DEVEL1

? ? }

? ? ? ? vrrp_instance VI_1 {

? ? ? ? state BACKUP

? ? ? ? interfaceeth0

? ? ? ? virtual_router_id32

? ? ? ? priority 90

? ? ? ? advert_int 1

? ? ? ? authentication {

? ? ? ? auth_type PASS

? ? ? ? auth_pass 1111

? ? ? ? }

? ? ? ? virtual_ipaddress {

? ? ? ? 192.168.109.100

? ? ? ? }

? ? ? ? }

? ? ? ? virtual_server 192.168.109.100 3306 {

? ? ? ? delay_loop 2

? ? ? ? lb_algo wlc

? ? ? ? persistence_timeout 50

? ? ? ? protocol TCP

? ? ? ? lb_kind DR

? ? ? ? real_server 192.168.109.131 3306 {

? ? ? ? weight 100

? ? ? ? TCP_CHECK {

? ? ? ? connect_timeout 10

? ? ? ? nb_get_retry 3

? ? ? ? delay_before_retry 3

? ? ? ? connect_port 3306

? ? ? ? }

? ? ? ? }

? ? ? ? real_server 192.168.109.132 3306 {

? ? ? ? weight 100

? ? ? ? TCP_CHECK {

? ? ? ? connect_timeout 10

? ? ? ? nb_get_retry 3

? ? ? ? delay_before_retry 3

? ? ? ? connect_port 3306

? ? ? ? }

? ? ? ? }

? ? ? ? }

? ? ? ? 配置成功后啟動keepalived,看是否成功

? ? ? ? 9、此時停止132上的數據庫

? ? ? ? 然后可以訪問100

? ? ? ? 因為keepalived的配置文件中采用負載均衡方法采用的是輪詢法,所以只down一個數據庫時,虛擬IP會自動指向另一臺數據庫。所以在實際環境中,當某臺機器上數據庫down時,直接也down掉對應的keepalived,然后通過keepalived配置中郵件告知開發人員數據庫down機了,這樣可以及時修復

10、停止掉132上的keepalived

? ? ? ? 100數據任然是可以訪問的,

? ? ? ? 注意:如果停止掉131上數據庫和132上keepalived,那么此時通過100是訪問不了的,所以后期需要在keeaplived配置文件中添加對應腳本(讀者自行百度),保證一臺機器的keepalived和mysql服務同停同起。

? ? ? ? 代碼中數據源配置192.168.109.100:3306即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容