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的下載地址爲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-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的方式來實現數據庫的高可用
================================================================================