日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql主从复制 lvs+ keepalived

發(fā)布時間:2023/11/29 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql主从复制 lvs+ keepalived 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>


一、環(huán)境
Master(主機A):192.168.1.1
Slave(主機B) :192.168.1.2??
W-VIP(寫入)? :192.168.1.3?
R-VIP(讀取)? :192.168.1.4?
Client(測試) :192.168.1.100

操作系統(tǒng)版本:CentOS release 6.5
MySQL數(shù)據(jù)庫版本:5.5.13
keepalived版本:1.2.7
LVS版本:1.26

所有環(huán)境均為虛擬機
?

二、設(shè)計思路

1. 服務(wù)器A和B,通過mysql的slave進程同步數(shù)據(jù)。
2. 通過keepalived啟用兩個虛IP:W-VIP/R-VIP,一個負責(zé)寫入,一個負責(zé)讀取,實現(xiàn)讀寫分離。
3. A和B都存在時,W-VIP下將請求轉(zhuǎn)發(fā)至主機A,R-VIP將請求轉(zhuǎn)發(fā)給A和B,實現(xiàn)負載均衡。
4. 當主機A異常時,B接管服務(wù),W-VIP/R-VIP此時漂到了主機B上,此時這兩個虛IP下都是主機B,實現(xiàn)高可用
5. 當主機B異常時,R-VIP會將B踢出,其他不變
?

三、架構(gòu)圖

?

四、軟件安裝
主從兩個主機都要裝以下軟件:
1. MySQL的安裝(略)
2. keepalived安裝
yum install keepalived
2. LVS安裝
yum install ipvsadm

?

五、配置
1. 配置MySQL的主從復(fù)制(略)
2. 配置keepalived
Master上的配置
vi /etc/keepalived/keepalived.conf

?

  • ! Configuration File for keepalived?
  • ?
  • global_defs {?
  • ???? router_id MySQL-ha?
  • }?
  • ?
  • vrrp_instance VI_1 {?
  • ???? state BACKUP?
  • ???? interface eth1?
  • ???? virtual_router_id 90?
  • ???? priority 100?
  • ???? advert_int 1?
  • notify_master "/usr/local/mysql/bin/remove_slave.sh"
  • ???? nopreempt?
  • ???? authentication {?
  • ???? auth_type PASS?
  • ???? auth_pass 1111?
  • ???? }?
  • ???? virtual_ipaddress {?
  • ???? 192.168.1.3 label eth1:1?
  • ???? 192.168.1.4 label eth1:2?
  • ???? }?
  • }?
  • ?
  • virtual_server 192.168.1.3 6603 {???
  • ???? delay_loop 2?
  • ???? lb_algo wrr?
  • ???? lb_kind DR?
  • ???? persistence_timeout 60?
  • ???? protocol TCP?
  • ???? real_server 192.168.1.1 6603 {?
  • ???? weight 3?
  • ???? notify_down /usr/local/mysql/bin/mysql.sh?
  • ???? TCP_CHECK {?
  • ???? connect_timeout 10?
  • ???? nb_get_retry 3?
  • ???? delay_before_retry 3?
  • ???? connect_port 6603?
  • ???? }?
  • ???? }?
  • }?
  • ?
  • virtual_server 192.168.1.4 6603 {?
  • ???? delay_loop 2?
  • ???? lb_algo wrr?
  • ???? lb_kind DR?
  • ???? persistence_timeout 60?
  • ???? protocol TCP?
  • ???? real_server 192.168.1.1 6603 {?
  • ???? weight 1?
  • ???? notify_down /usr/local/mysql/bin/mysql.sh?
  • ???? TCP_CHECK {?
  • ???? connect_timeout 10?
  • ???? nb_get_retry 3?
  • ???? delay_before_retry 3?
  • ???? connect_port 6603?
  • ???? }?
  • ???? }?
  • ???? real_server 192.168.1.2 6603 {?
  • ???? weight 3?
  • ???? TCP_CHECK {?
  • ???? connect_timeout 10?
  • ???? nb_get_retry 3?
  • ???? delay_before_retry 3?
  • ???? connect_port 6603?
  • ???? }?
  • ???? }?
  • }?

  • ! Configuration File for keepalived global_defs { router_id MySQL-ha } vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 90 priority 100 advert_int 1 notify_master "/usr/local/mysql/bin/remove_slave.sh" nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.3 label eth1:1 192.168.1.4 label eth1:2 } } virtual_server 192.168.1.3 6603 { delay_loop 2 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.1.1 6603 { weight 3 notify_down /usr/local/mysql/bin/mysql.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 6603 } } } virtual_server 192.168.1.4 6603 { delay_loop 2 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.1.1 6603 { weight 1 notify_down /usr/local/mysql/bin/mysql.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 6603 } } real_server 192.168.1.2 6603 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 6603 } } }

    keepalived配置成服務(wù)并開機啟動

  • cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/?
  • cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/?
  • cp /usr/local/keepalived/sbin/keepalived /usr/sbin/?
  • chkconfig --add keepalived??
  • chkconfig --level 345 keepalived on?

  • cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ chkconfig --add keepalived chkconfig --level 345 keepalived on

    vi /usr/local/mysql/bin/remove_slave.sh

  • #!/bin/bash?
  • user=u1?
  • password=12345?
  • log=/usr/local/mysql/log/remove_slave.log?
  • echo "`date`" >> $log?
  • /usr/local/mysql/bin/mysql -u$user -p$password -e "set global read_only=OFF;reset master;stop slave;change master to master_host='localhost';" >> $log?
  • /bin/sed -i 's#read-only#\#read-only#' /etc/my.cnf?

  • #!/bin/bash user=u1 password=12345 log=/usr/local/mysql/log/remove_slave.log echo "`date`" >> $log /usr/local/mysql/bin/mysql -u$user -p$password -e "set global read_only=OFF;reset master;stop slave;change master to master_host='localhost';" >> $log /bin/sed -i 's#read-only#\#read-only#' /etc/my.cnf

    ?

    vi /usr/local/mysql/bin/mysql.sh

    ?

  • #!/bin/bash?
  • /etc/init.d/keepalived stop?

  • #!/bin/bash /etc/init.d/keepalived stop

    Slave上的配置
    vi /etc/keepalived/keepalived.conf

    ?

    ?

    [plain]view plaincopyprint?

  • ! Configuration File for keepalived?
  • ?
  • global_defs {?
  • ???? router_id MySQL-ha?
  • }?
  • ?
  • vrrp_instance VI_1 {?
  • ???? state BACKUP?
  • ???? interface eth1?
  • ???? virtual_router_id 90?
  • ???? priority 99?
  • ???? advert_int 1?
  • ???? notify_master "/usr/local/mysql/bin/remove_slave.sh"?
  • ???? authentication {?
  • ???? auth_type PASS?
  • ???? auth_pass 1111?
  • ???? }?
  • ???? virtual_ipaddress {?
  • ???? 192.168.1.3 label eth1:1?
  • ???? 192.168.1.4 label eth1:2?
  • ???? }?
  • }?
  • ?
  • virtual_server 192.168.1.3 6603 {?
  • ???? delay_loop 2?
  • ???? lb_algo wrr?
  • ???? lb_kind DR?
  • ???? persistence_timeout 60?
  • ???? protocol TCP?
  • ???? real_server 192.168.1.2 6603 {?
  • ???? weight 3?
  • ???? notify_down /usr/local/mysql/bin/mysql.sh?
  • ???? TCP_CHECK {?
  • ???? connect_timeout 10?
  • ???? nb_get_retry 3?
  • ???? delay_before_retry 3?
  • ???? connect_port 6603?
  • ???? }?
  • ???? }?
  • }?
  • ?
  • virtual_server 192.168.1.4 6603 {?
  • ???? delay_loop 2?
  • ???? lb_algo wrr?
  • ???? lb_kind DR?
  • ???? persistence_timeout 60?
  • ???? protocol TCP?
  • ???? real_server 192.168.1.2 6603 {?
  • ???? weight 3?
  • ???? notify_down /usr/local/mysql/bin/mysql.sh?
  • ???? TCP_CHECK {?
  • ???? connect_timeout 10?
  • ???? nb_get_retry 3?
  • ???? delay_before_retry 3?
  • ???? connect_port 6603?
  • ???? }?
  • ???? }?
  • }?

  • ! Configuration File for keepalived global_defs { router_id MySQL-ha } vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 90 priority 99 advert_int 1 notify_master "/usr/local/mysql/bin/remove_slave.sh" authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.3 label eth1:1 192.168.1.4 label eth1:2 } } virtual_server 192.168.1.3 6603 { delay_loop 2 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.1.2 6603 { weight 3 notify_down /usr/local/mysql/bin/mysql.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 6603 } } } virtual_server 192.168.1.4 6603 { delay_loop 2 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.1.2 6603 { weight 3 notify_down /usr/local/mysql/bin/mysql.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 6603 } } }
    keepalived配置成服務(wù)并開機啟動

    ?

    ?

    [plain]view plaincopyprint?

  • cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/?
  • cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/?
  • cp /usr/local/keepalived/sbin/keepalived /usr/sbin/?
  • chkconfig --add keepalived??
  • chkconfig --level 345 keepalived on?

  • cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ chkconfig --add keepalived chkconfig --level 345 keepalived on
    vi /usr/local/mysql/bin/remove_slave.sh

    ?

    ?

    [plain]view plaincopyprint?

  • #!/bin/bash?
  • user=u1?
  • password=12345?
  • log=/usr/local/mysql/log/remove_slave.log?
  • echo "`date`" >> $log?
  • /usr/local/mysql/bin/mysql -u$user -p$password -e "set global read_only=OFF;reset master;stop slave;change master to master_host='localhost';" >> $log?
  • /bin/sed -i 's#read-only#\#read-only#' /etc/my.cnf?

  • #!/bin/bash user=u1 password=12345 log=/usr/local/mysql/log/remove_slave.log echo "`date`" >> $log /usr/local/mysql/bin/mysql -u$user -p$password -e "set global read_only=OFF;reset master;stop slave;change master to master_host='localhost';" >> $log /bin/sed -i 's#read-only#\#read-only#' /etc/my.cnf

    vi /usr/local/mysql/bin/mysql.sh

    ?

    ?

    [plain]view plaincopyprint?

  • #!/bin/bash?
  • /etc/init.d/keepalived stop?

  • #!/bin/bash /etc/init.d/keepalived stop

    3. 配置LVS
    Master與Slave上的配置相同:
    vi /usr/local/bin/lvs_real.sh

    ?

    ?

    [plain]view plaincopyprint?

  • #!/bin/bash?
  • # description: Config realserver lo and apply noarp?
  • ??
  • SNS_VIP=192.168.1.3?
  • SNS_VIP2=192.168.1.4?
  • source /etc/rc.d/init.d/functions?
  • case "$1" in?
  • ??
  • start)?
  • ?????? ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP?
  • ?????? ifconfig lo:1 $SNS_VIP2 netmask 255.255.255.255 broadcast $SNS_VIP2?
  • ?????? /sbin/route add -host $SNS_VIP dev lo:0?
  • ?????? /sbin/route add -host $SNS_VIP2 dev lo:1?
  • ?????? echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore?
  • ?????? echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce?
  • ?????? echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore?
  • ?????? echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce?
  • ?????? sysctl -p >/dev/null 2>&1?
  • ?????? echo "RealServer Start OK"?
  • ?????? ;;?
  • ??
  • stop)?
  • ?????? ifconfig lo:0 down?
  • ?????? ifconfig lo:1 down?
  • ?????? route del $SNS_VIP >/dev/null 2>&1?
  • ?????? route del $SNS_VIP2 >/dev/null 2>&1?
  • ?????? echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore?
  • ?????? echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce?
  • ?????? echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore?
  • ?????? echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce?
  • ?????? echo "RealServer Stoped"?
  • ?????? ;;?
  • ??
  • *)?
  • ??
  • ?????? echo "Usage: $0 {start|stop}"?
  • ?????? exit 1?
  • esac?
  • exit 0?

  • #!/bin/bash # description: Config realserver lo and apply noarp SNS_VIP=192.168.1.3 SNS_VIP2=192.168.1.4 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP ifconfig lo:1 $SNS_VIP2 netmask 255.255.255.255 broadcast $SNS_VIP2 /sbin/route add -host $SNS_VIP dev lo:0 /sbin/route add -host $SNS_VIP2 dev lo:1 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down ifconfig lo:1 down route del $SNS_VIP >/dev/null 2>&1 route del $SNS_VIP2 >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0

    [plain]view plaincopyprint?

  • chmod 755 /usr/local/bin/lvs_real.sh?
  • echo "/usr/local/bin/lvs_real.sh start" >> /etc/rc.local?

  • chmod 755 /usr/local/bin/lvs_real.sh echo "/usr/local/bin/lvs_real.sh start" >> /etc/rc.local

    五、Master和Slave的啟動
    1. 啟動Master上的MySQL
    service mysql start
    2. 啟動Slave上的MySQL
    service mysql start
    3. 啟動Master上的realserver腳本
    /usr/local/bin/lvs_real.sh start
    4. 啟動Slave上的realserver腳本
    /usr/local/bin/lvs_real.sh start
    5. 啟動Master上的keepalived
    service keepalived start
    6. 啟動Slave上的keepalived
    service keepalived start


    六、測試
    1. 查看lvs能否進行負載均衡轉(zhuǎn)發(fā)
    在Master和Slave上分別執(zhí)行:
    ipvsadm -ln

    2. 在Client上驗證連通性:
    ping 192.168.1.3
    ping 192.168.1.4
    mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"
    mysql -u u1 -p12345 -P 6603 -h 192.168.1.4 -e "show variables like 'server_id'"

    3. 停掉Master上的MySQL,看寫IP否自動切換到Slave,看讀IP是否去掉了Master的MySQL
    在Master和Slave上分別執(zhí)行:
    ipvsadm -ln
    在Client上執(zhí)行:
    mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"
    mysql -u u1 -p12345 -P 6603 -h 192.168.1.4 -e "show variables like 'server_id'"

    4. 停掉Master上的keepalived,看讀寫VIP是否會遷移到Slave上。
    在Master和Slave上分別執(zhí)行:
    ipvsadm -ln
    在Client上執(zhí)行:
    mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"



    在Master和Slave上分別執(zhí)行:
    ipvsadm -ln
    在Client上執(zhí)行:
    mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"
    mysql -u u1 -p12345 -P 6603 -h 192.168.1.4 -e "show variables like 'server_id'"

    6. 重啟Master的系統(tǒng),看看切換過程是否正常



    七、參考
    http://wenku.baidu.com/link?url=17K0UDApzfK18A8F5Of9wl0lmGx6AD_0PQ8GyVqmCsBMSz16xjt2JI88lPAeID2qECs7piUxkzQLyatTtDuEJxwZEy6joIBfBmT3vgTfdUS
    http://blog.chinaunix.net/uid-23500957-id-3781918.html
    http://blog.chinaunix.net/uid-23500957-id-3781919.html
    http://blog.chinaunix.net/uid-20639775-id-3337471.html

    轉(zhuǎn)載于:https://my.oschina.net/u/2350399/blog/715737

    總結(jié)

    以上是生活随笔為你收集整理的mysql主从复制 lvs+ keepalived的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。