mysql高可用方案几種方案

Mysql-mmm就是mysql主主複製管理器,實現的功能有:

高可用性(類似keepalivedvip浮動技術)

同個時間只提供一臺數據庫寫操作,保證數據庫的一致性。

提升slavemaster,延續雙主的架構

 

 

首先先搭建好數據庫主主,主從架構:類似圖:(不再敘述)

在每臺數據庫中爲monitor的機器來監控當前的同步情況:

Grant replivation client to ‘user@’ip’ identified by ‘password’   創建一個mmm-monitor的賬戶,主要用於監控和同步

Grant super, replication client ,process on *.* to  ‘user’@’ip’ identified by ‘password’

創建一個mmm-agent的賬戶,用於客戶端的各種操作

 

Mysql-mmm的下載地址爲Mysql-mmm下載網址http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

由於使用的是epel的方式需要把/etc/yum.repos.d/epel.repo中的mirrorlist換爲baseurl

 

 

 

===========================================================================

配置mmm_common.conf的文件:所有節點的配置都是一樣的包括監控端

active_master_role      writer
 
<host default>
    cluster_interface       eth0
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        ccd      //同步的賬戶
    replication_password    ccd
    agent_user              ccd       //大一點的權限
    agent_password          ccd
</host>
<host db1>
     ip 172.20.138.212
     mode master
     peer db2
</host>
<host db2>
  ip  172.20.138.209
  mode  master
  peer  db1
</host>
<role writer>
    hostsdb1,db2
    ips  172.20.138.100
    mode exclusive    //exclusive爲單寫
</role>
 
<role reader>
    Hosts b1,db2
    ips 172.20.138.250  //可以有多個ip,每個數據庫可以單獨有一個vip
    mode balanced    //讀取爲負載均衡
</role>

============================================================================

修改mmm_agent.conf文件中不同的db

 

最後配置一下mmm_mon.conf

主要修改的地方有:

Ping_ips 爲監控的主機的真實ip

Monitor 修改爲數據庫賦予的賬戶

Monitor_assword   密碼

 

/etc/init.d/中啓動服務,在監控服務器中輸入命令:

Mmm_control checks 檢查所有的數據庫同步情況和運行情況

Mmm_control show 查看vip綁定情況,類似ipvsadm

 

 

Mysql-mmm不適合用於mysql主從的高負載

驗證vip均可以跳轉,但是發現讀ip也具有寫入數據的功能。。。。如果加上讀寫分離的話就可以實現讀取的vip不具備寫入的功能

 

 

 

 

 

 

Mysql-proxy實現負載均衡和讀寫分離

目前的mysql-proxy的版本爲0.8.5aplha

 

在安裝mysql-proxy之前需要安裝lua

到官網下載lua的源文件

yum -y install readline-devel ncurses-devel

安裝readline-develncurses-devel   否則安裝會出現readline尋找不到的問題

tar zxvf luaxxxxx

make linux

make install

這時候輸入lua可以進入編譯模式表示lua安裝成功

 

安裝所需要的依賴包

yum install gcc* gcc-c++* autoconf*automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*

 

mysql-proxy官網下載最新的mysql-proxy源文件

安裝十分簡單解壓之後即可使用

mysql-proxy添加到相對應的環境變量中

export PATH =$PATH:/usr/local/mysql-proxy

source /etc/profile

 

 

修改mysql-proxy的配置文件

常用的命令參數如下:

--daemon daemon的模式啓動

--admin-address=:4401  默認端口爲4401

-help查看所有命令

-default-file 可以配置啓動的配置文件

--proxy-backend-addresses=$host:$port  多個以逗號隔開

--proxy-address=:3307

--proxy-backend-addresses=:3306  mysql主機的端口

--proxy-read-only-backend-address=xxx13306   只讀mysql主機的端口

-- proxy-read-only-backend-address=xxx23306   可以指定多個只讀mysql主機的端口

--proxy-lua-script=/usr/local/xxx/rw-splitting.lua   使用系統只帶的lua腳本實現讀寫分離的功能

 

 

使用系統自帶的rw.split.lua腳本需要修改兩個參數

min_idle_connections=1

max_idle_connections = 3

 

 

啓動腳本:

#!/bin/bash

mode=$1

if [ -z "$mode" ] ;then

  mode="start"

fi

case $mode in

'start')

   mysql-proxy --daemon --proxy-address=:3307 --proxy-backend-addresses=172.20.138.209:3306;172.20.138.212:3306 --proxy-read-only-backend-addresses=172.20.138.212:3306  --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

  ;;

'stop')

   killall mysql-proxy

   ;;

esac

exit 0

 

 

 

 

 

 

 

 

或者使用配置方式的方法來啓動

Vim /etc/mysql-proxy.cnf

admin-username = ccd

admin-password = ccd

daemon = true

keepalive = true

proxy-backend-addresses =172.20.138.209:3306;172.20.138.212:3306

proxy-read-only-backend-addresses =172.20.138.212:3306

proxy-lua-script =/usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua

admin-lua-script =/usr/local/proxy-mysql/share/doc/mysql-proxy/admin-sql.lua

log-file = /usr/local/proxy-mysql/cn.log

log-level = debug

修改相對應的腳本即可:

Mysql-proxy –defaults-file =/etc/mysql-proxy.cnf

 

 

 

 

對於數據庫的測試可以使用sysbench工具來進行測試

 

利用keepalived實現對mysql主主/主從的高可用

配置keepalived.conf文件:

Vrrp_instatance  HA_1{

State BACKUP  #配置爲slave,也可以是master

Interface eth0

Virtual_router_id 80  //主從配置的虛擬路由標識需要一樣

Priority 100  #配置不同的優先級

Advert_int 1   #配置主備之間同步檢查的週期

Authenication{

Auth_type PASS

Auth_pass 1111

}

Virtual_ipaddress {

    vip/24 dev eth0

}

}

Virtual_server  xxxxxx  3306{

Delay_loop 2

lb_algo wrr        //lvs算法爲加權輪詢

lb_kind DR     //lvs的模式爲DR模式

protocol TCP

reall_server   xxxx 3306 {

weight  1

TCP_CHECK {

Connect_timeout  3

nb_get_retry    3

delay_before_retry  3

connect_port  3306

}

 

Real  server xxxx  3306{

   同上

}

}

 

DRreal serverloop端口需要綁定vip的地址腳本爲:

#!/bin/bash

SNS_VIP=172.138.20.244

./etc/rc.d/init.d/functions

case"$1" in

start)

       ifconfig lo:0 $SNS_VIP netmask255.255.255.255 broadcast $SNS_VIP

 

       /sbin/route add -host $SNS_VIP dev lo:0

 

       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

 

       route del $SNS_VIP >/dev/null2>&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

 

 

 

授權遠程主機可以通過vip來連接登錄vip

Grant allprivileges to  on *.* to xxxx identifiedby xxxxx

    Flushprivileges

由此可以實現mysql數據庫的高可用

 

 

 

 

使用keepalived的方式有兩種 一種爲keepalived加腳本實現vip的切換,另外一種是keepalived+lvs的方式來實現數據庫的高可用

================================================================================


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章