利用keepalived構建高可用MySQL-HA,保證兩台MySQL數據的一致性,然后用keepalived實現虛擬VIP,通過keepalived自帶的服務監控功能來實現MySQL故障時自動切換。
硬件拓撲如下:
VIP:192.168.1.200
mysql1:192.168.1.201
mysql2:192.168.1.202
操作系統:CentOS release 6.3(32位)
MySQL版本:MariaDB 5.5.31 Stable
下載地址(64位請下載64版本):https://downloads.mariadb.org/f/mariadb-5.5.31/kvm-tarbake-jaunty-x86/mariadb-5.5.31.tar.gz/from/http:/mirrors.scie.in/mariadb
Keepalived版本:Version 1.2.7
下載地址:http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
一、配置Centos運行環境:
執行:
rpm -qa|grep mysql
rpm -e mysql
yum -y remove mysql-server mysql
yum -y remove php-mysql
移除系統自帶的mysql
yum -y install yum-fastestmirror
yum -y update
更新系統軟件;
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
yum install -y ntp
ntpdate -d cn.pool.ntp.org
date
設置時區並同步系統時間
#Disable SeLinux
if [ -s /etc/selinux/config ]; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
fi
ldconfig
關閉安全增強
cat >>/etc/security/limits.conf<<eof
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
eof
cat >>/etc/sysctl.conf<<eof
fs.file-max=65535
eof
修改文件句柄的最大數量
安裝一些必備軟件
yum -y install gcc gcc-c++ gcc-g77 ncurses-devel bison libaio-devel cmake libnl* libpopt* popt-static openssl-devel
二、安裝maridDB:
1、下載相關軟件源碼包
[root@localhost down]# wget https://downloads.mariadb.org/f/mariadb-5.5.31/kvm-tarbake-jaunty-x86/mariadb-5.5.31.tar.gz/from/http:/mirrors.scie.in/mariadb
2、配置編譯器,提高性能
CFLAGS="-O3"
CXX=gcc
CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"
3、開始安裝mariadb
添加mysql用戶和用戶組
[root@localhost down]# groupadd mysql
[root@localhost down]# useradd -s /sbin/nologin -M -g mysql mysql
解壓mariadb
[root@localhost down]# tar -zxvf mariadb-5.5.31
[root@localhost down]# cd mariadb-5.5.31
安裝到/usr/local/mariamysql目錄:
[root@localhost down]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariamysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_DEBUG=0 -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DWITH_EMBEDDED_SERVER=OFF && make && make install
復制配置文件到/etc/my.cnf
[root@localhost down]# cp /usr/local/mariamysql/support-files/my-huge.cnf /etc/my.cnf
設置mariamysql為系統服務
[root@localhost down]# cp /usr/local/mariamysql/support-files/mysql.server /etc/init.d/mariamysql
初始化mariaDB數據庫:
[root@localhost down]# /usr/local/mariamysql/scripts/mysql_install_db --basedir=/usr/local/mariamysql/ --datadir=/usr/local/mariamysql/data/ --user=mysql
至此mariaDB安裝完成。
三、keepalived安裝:
1、下載源碼包:
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz


2、安裝:
[root@localhost down]# tar -zxvf keepalived-1.2.7.tar.gz
[root@localhost down]# cd keepalived-1.2.7


[root@localhost keepalived-1.2.7]# ./configure --prefix=/usr/local/keepalived
安裝到/usr/local/keepalived目錄下;
至此keepalived安裝完畢。
四、分別在201和202兩台機器上都重復二,三安裝好mariaDB和keepalived。
五、配置201數據庫服務器:
1、設置mariaDB數據庫配置文件:
[root@localhost /]# vi /etc/my.cnf
確保/etc/my.cnf中有如下參數,沒有的話需手工添加,並重啟mysql服務。
[mysqld]
log-bin=mysql-bin
log-bin=mysql-bin
#啟動二進制文件
server-id=1
server-id=1
#服務器ID

設置完畢啟動mariaDB服務器
[root@localhost /]# service mariamysql start

2、登錄mysql,然后在增加一個賬號專門用於同步,如下:

[root@localhost /]# /usr/local/mariamysql/bin/mysql -uroot -p #初始密碼為空到Enter password:處直接回車即可
MariaDB [(none)]> grant replication slave on *.* to 'backup'@'192.168.1.202' identified by 'backup'; flush privileges;
顯示master狀態:
MariaDB [(none)]> show master status;

記錄下File和Position然后在202上面設置從201同步。
六、配置202數據庫服務器:
[root@localhost /]# vi /etc/my.cnf
確保/etc/my.cnf中有如下參數,沒有的話需手工添加,並重啟mysql服務。
[mysqld]
log-bin=mysql-bin
log-bin=mysql-bin
#啟動二進制文件
server-id=10(此處要設置的跟201不同)
server-id=10(此處要設置的跟201不同)
#服務器ID

設置完畢啟動mariaDB服務器。
[root@localhost /]# service mariamysql start
登錄數據庫:
[root@localhost /]# /usr/local/mariamysql/bin/mysql -uroot -p
輸入:
MariaDB [(none)]> change master to master_host='192.168.1.201',master_user='backup',master_password='backup',master_log_file='mysql-bin.000010',master_log_pos=245;
注意:245對應上面在201上面記下的Position,mysql-bin.000010對應201上面記錄的File

執行成功后,輸入命令顯示從庫狀態:
MariaDB [(none)]> show slave status \G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
兩項都顯示Yes時說明從201同步數據成功。
至此201為主202為從的主從架構數據設置成功!
七、設置201和202互為主從:
1、202機器上增加一個帳號專門用於同步數據:
MariaDB [(none)]> grant replication slave on *.* to 'backup'@'192.168.1.201' identified by 'backup'; flush privileges;

2、顯示202做為主庫時的狀態:
MariaDB [(none)]> show master status;

3、在201數據庫服務器上:
MariaDB [(none)]> change master to master_host='192.168.1.202',master_user='backup',master_password='backup',master_log_file='mysql-bin.000005',master_log_pos=5005;

注意:5005對應上面在202上面記下的Position,mysql-bin.000005對應202上面記錄的File
顯示狀態:
MariaDB [(none)]> show slave status \G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
兩項都顯示Yes時說明從202同步數據成功。
至此201、202互為主從設置成功!
可以試試在這兩台服務器上任何一台增加一個數據庫,並建個表,增加一些數據看看,互為主從同步的狀態是否成功!
首先在201上面:
MariaDB [(none)]> create database mysqltest;
MariaDB [(none)]> use mysqltest;
MariaDB [mysqltest]> create table user(id int(5),name char(10));
MariaDB [mysqltest]> insert into user values (00001,'zhangsan');
在202上面驗證一下:
MariaDB [(none)]> use mysqltest;
MariaDB [mysqltest]> select * from user;

會發現201上面的數據已經自動同步到202上面了
同樣在202上面:
MariaDB [mysqltest]> insert into user values (00002,'wander');
在201上面驗證一下:
MariaDB [mysqltest]> select * from user;

互為主從結構設置完畢
注意:如果同步不成功,首先要確保服務器3306端口打開的。
centos可以用service iptables stop關閉防火牆。
八、利用keepalived實現高可用
keepalived實現虛擬IP,通過keepalived自帶的服務監控功能來實現MySQL故障時自動切換;
1、keepalived設置:
201服務器上面,編輯keeplaived.conf配置文件:
[root@localhost /]# vi /usr/local/keepalived/etc/keepalived/keepalived.conf

配置文件內容如下:
! Configuration File for keepalived
global_defs {
router_id mysql-ha
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 201
priority 100 #優先級,高優先級競選為master
advert_int 1
nopreempt #設置為不搶占 注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一台高,另一台不要設置這個選項
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 3306 {
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.201 3306 {
weight 1
notify_down /usr/local/keepalived/etc/keepalived/mysql.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 2
delay_before_retry 1
}
}
}
~
global_defs {
router_id mysql-ha
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 201
priority 100 #優先級,高優先級競選為master
advert_int 1
nopreempt #設置為不搶占 注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一台高,另一台不要設置這個選項
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 3306 {
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.201 3306 {
weight 1
notify_down /usr/local/keepalived/etc/keepalived/mysql.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 2
delay_before_retry 1
}
}
}
~

編輯mysql服務停止后的切換腳本:mysql.sh
[root@localhost /]# vi /usr/local/keepalived/etc/keepalived/mysql.sh

內容如下:
#!/bin/bash
pkill keepalived
pkill keepalived

2、啟動201上面的keepalived
[root@localhost /]# /usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf -D
查看:

啟動成功后會有三個keepalived進程
此是在任一局域機器上面ping 192.168.1.200發現已經可以ping通,並且用192.168.1.200這個IP也能夠連接到數據庫服務器。
3、在202機器上面重復1、2步驟;
配置keepalived.conf文件的時候注意要把
real_server 192.168.1.201 3306改為 real_server 192.168.1.202 3306
virtual_router_id 201 改為virtual_router_id 202
priority 100改為priority 90
去掉
nopreempt
至此MariaDB+Keepalived雙主高可用配置MySQL-HA設置完畢。
可以試着把201上面的mariaDB停止
[root@localhost /]# service mariamysql stop;
會發現連接192.168.1.200還是可以連接上去的,keepalived會自動切換到202的服務器上面去。這樣,當一台數據庫服務器發生故障時,另一台服務器可以立即切換過來,保證高可用。