? ? ? ? 前面介紹了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即可。