MySQL5.7.25雙機熱備搭建

環境

IP 主機名 作用
10.1.24.128 bd128 MySQL 節點1
10.1.24.131 bd131 MySQL 節點2
10.1.24.9 VIP 虛擬地址

下載安裝包:
鏈接:https://pan.baidu.com/s/1fXandH31xPp3Xxna5kFKlg
提取碼:ygiu

準備

關閉防火牆

systemctl  stop  firewalld

systemctl  disable  firewalld

配置NTP同步時間

yum -y install ntp
vim /etc/ntp.conf

driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict 10.1.24.0 mask 255.255.255.0 nomodify notrap
server bd134 prefer
restrict bd134 nomodify notrap noquery
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 8
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
tinker panic 0
disable monitor

然後啓動並設置開啓自啓。

systemctl start ntpd
systemctl enable ntpd

MySQL安裝


groupadd mysql
useradd -r -g mysql mysql
cp mysql-5.7.25-linux-glibc2.12-x86_64.fast.tar.gz /usr/local/
tar -xzvf mysql-5.7.25-linux-glibc2.12-x86_64.fast.tar.gz
cp -rf mysql/my.cnf /etc/my.cnf
ln -s /usr/local/mysql/data/mysql.sock /tmp/mysql.sock
cp mysql/support-files/mysql.server /etc/init.d/mysql
service mysql start
chkconfig mysql on

# 測試是否安裝成功
bin/mysql -uroot -pbicon@123456 mysql

# 如果成功,退出添加以下內容
mkdir /usr/local/mysql/log
chown mysql:mysql /usr/local/mysql/log

主從複製

打開bd128/etc/my.cnf文件,並添加如下內容:

character-set-server=utf8
group_concat_max_len = 200000  # 改變數據長度
lower_case_table_names=1     # 數據庫不區分大小
server_id=1
log_bin = /usr/local/mysql/log/mysql-bin.log
log_bin_index = /usr/local/mysql/log/mysql-bin.log.index
relay_log = /usr/local/mysql/log/mysql-relay-bin
relay_log_index = /usr/local/mysql/log/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 1024M
log_slave_updates = 1
#binlog-do-db = test   #用來限制同步的庫,註釋掉就是所有庫都可同步
#binlog-ignore-db = mysql
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2
#replicate-do-db = test  #限制備份的數據庫,註釋掉就是所有庫都可同步
replicate-ignore-db = mysql,information_schema  #忽略互相備份的數據庫
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
socket=/usr/local/mysql/data/mysql.sock

打開bd131/etc/my.cnf文件,並添加如下內容:

character-set-server=utf8
group_concat_max_len = 200000    # 改變數據長度
lower_case_table_names=1   # 數據庫不區分大小
server_id=2
log_bin=/usr/local/mysql/log/mysql-bin.log
log_bin_index = /usr/local/mysql/log/mysql-bin.log.index
relay_log = /usr/local/mysql/log/mysql-relay-bin
relay_log_index = /usr/local/mysql/log/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 1024M
log_slave_updates = 1
#binlog-do-db = test
#binlog-ignore-db = mysql
sync_binlog = 1
auto_increment_offset = 2
auto_increment_increment = 2
#replicate-do-db = test  #限制備份的數據庫
replicate-ignore-db = mysql,information_schema,performance_schema  #忽略互相備份的數據庫
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
socket=/usr/local/mysql/data/mysql.sock

然後重新啓動兩個MySQL,這個時候需要保證兩個MySQL的表結構是一樣的。

service mysql restart
bin/mysql -uroot -pbicon@123456 mysql

# 服務器bd128
grant replication slave on *.* to 'replicate'@'10.1.24.131' identified by '123456';
flush privileges;

# 服務器bd131
grant replication slave on *.* to 'replicate'@'10.1.24.128' identified by '123456';
flush privileges;

然後再次重啓MySQL(service mysql restart)。

# 1. 查看master 狀態
show master status;

# 2. 注意用戶名和密碼是上一步創建的,且用戶和密碼兩邊【切記】不能有空格。
# master_log_file和master_log_pos根據show master status修改,注意是另一個MySQL的。

# bd128執行
Change master to master_host='10.1.24.131',master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

# bd131執行
Change master to master_host='10.1.24.128',master_user='replicate',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=775;

# 3. 啓動slave
start slave;
show slave status;

# 看到如下配置,說明成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

# 如果出錯,則執行下面兩條語句,然後重新執行 1,2,3
stop slave;
reset slave;

show slave status是可以看到錯誤的具體信息的。
1) 如果報錯uuid重複,就刪除從庫的auto.cnf,然後重啓從庫。
2) 如果報錯數據庫不一致,就刪除兩邊不相等的數據庫,然後重啓數據庫,重新添加 slave。

keepalived

安裝依賴服務

首先安裝一些依賴服務。

yum install -y httpd
# 啓動
systemctl start httpd
# 設置開啓自啓
systemctl enable httpd

yum -y install gcc
yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel

安裝keepalived

mkdir -p /home/keepalived
cd /home/keepalived
wget https://www.keepalived.org/software/keepalived-2.0.0.tar.gz
tar -zxvf keepalived-2.0.0.tar.gz
cd keepalived-2.0.0
# 創建安裝路徑
mkdir -p /home/keepalived/keepalived_path
./configure --prefix=/home/keepalived/keepalived_path
make && make install
mkdir /etc/keepalived
cp /home/keepalived/keepalived_path/etc/keepalived/keepalived.conf  /etc/keepalived/ # 安裝目錄
cp /home/keepalived/keepalived_path/sbin/keepalived /usr/sbin/ # 安裝目錄
cp /home/keepalived/keepalived-2.0.0/keepalived/etc/init.d/keepalived /etc/init.d/ # 解壓目錄
cp /home/keepalived/keepalived-2.0.0/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ # 解壓目錄

配置

bd128/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
    bd128 #修改爲自己的主機名
}

vrrp_instance VI_1 {
    state BACKUP  #都修改成BACKUP
    interface eth160 #你的網卡名稱
    virtual_router_id 60 #默認51 主從都修改爲60
    priority 100 #優先級(1-254之間),另一臺改爲90,備用節點必須比主節點優先級低。
    advert_int 1
    nopreempt #不搶佔資源,意思就是它活了之後也不會再把主搶回來
    authentication {
    	#設置驗證信息,兩個節點必須一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.24.9 # vip這臺機器的ip
    }
}

# 下面也是vip這臺機器的ip
virtual_server 10.1.24.9 3306 {
    delay_loop 6
    lb_algo wrr  #LVS算法
    lb_kind DR  #LVS模式
    nat_mask 255.255.255.0
    persistence_timeout 50 #會話保持時間
    protocol TCP
	# 當前這臺機器的真實ip
    real_server 10.1.24.128 3306 {
        weight 1
        notify_down /home/keepalived/keepalived_path/mysql.sh #檢測到服務down後執行的腳本
        TCP_CHECK {
            connect_timeout 10    #連接超時時間
            nb_get_retry    3     #重連次數
            connect_port 3306     #健康檢查端口
        }
    }
}

bd131/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
    bd131 #修改爲自己的主機名
}

vrrp_instance VI_1 {
    state BACKUP  #都修改成BACKUP
    interface eth160 #你的網卡名稱
    virtual_router_id 60 #默認51 主從都修改爲60
    priority 90  #優先級(1-254之間),另一臺改爲90,備用節點必須比主節點優先級低。
    advert_int 1
    nopreempt #不搶佔資源,意思就是它活了之後也不會再把主搶回來
    authentication {
    	#設置驗證信息,兩個節點必須一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.24.9 # vip這臺機器的ip
    }
}

# 下面也是vip這臺機器的ip
virtual_server 10.1.24.9 3306 {
    delay_loop 6
    lb_algo wrr  #LVS算法
    lb_kind DR  #LVS模式
    nat_mask 255.255.255.0
    persistence_timeout 50 #會話保持時間
    protocol TCP
	# 當前這臺機器的真實ip
    real_server 10.1.24.131 3306 {
        weight 1
        notify_down /home/keepalived/keepalived_path/mysql.sh #檢測到服務down後執行的腳本
        TCP_CHECK {
            connect_timeout 10    #連接超時時間
            nb_get_retry    3     #重連次數
            connect_port 3306     #健康檢查端口
        }
    }
}

mysql.sh腳本

vim /home/keepalived/keepalived_path/mysql.sh
# 文件內容如下:
#!/bin/sh
service mysql restart
# 保存,然後退出
chmod +x /home/keepalived/keepalived_path/mysql.sh

啓動

service keepalived start

連接

這時候就可以直接連接10.1.24.9:3306的數據庫了。

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