MariaDB+Keepalived雙主高可用配置MySQL-HA


利用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 
#啟動二進制文件
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 
#啟動二進制文件
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
        }
    }
}
~                
          
 
編輯mysql服務停止后的切換腳本:mysql.sh
[root@localhost /]# vi /usr/local/keepalived/etc/keepalived/mysql.sh
內容如下:
#!/bin/bash
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的服務器上面去。這樣,當一台數據庫服務器發生故障時,另一台服務器可以立即切換過來,保證高可用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM