MySQL高可用方案幾種方案
Mysql-mmm就是mysql主主複製管理器,實現的功能有:
高可用性(類似keepalived的vip浮動技術)
同個時間只提供一台資料庫寫操作,保證資料庫的一致性。
提升slave為master,延續雙主的架構
首先先搭建好資料庫主主,主從架構:類似圖:(不再敘述)
在每台資料庫中為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的為
------------------------------------------分割線------------------------------------------
免費在 http://linux.bkjia.com/
使用者名稱與密碼都是www.bkjia.com
具體下載目錄在 /2016年資料/2月/20日/MySQL高可用方案幾種方案/
下載方法見
------------------------------------------分割線------------------------------------------
由於使用的是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-devel和ncurses-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{
同上
}
}
DR的real 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的方式來實現資料庫的高可用
MySQL高可用架構之MySQL-MMM配置詳解
MySQL高可用性之Keepalived+MySQL(雙主熱備)
MySQL高可用方案之叢集(Cluster)
使用KeepAlived搭建MySQL高可用環境
CentOS 6.4下MySQL高可用架構MHA搭建
本文永久更新連結地址: