linux MySQL 5.7+keepalived 主備服務器自主切換


一、環境准備
1、關閉防火牆與selinux
systemctl stop firewalld
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

二、mysql5.7.20安裝
#MySQL5.6與MySQL5.7的區別在於初始化的時候,其他安裝步驟一致
1、創建目錄
mkdir -p /data/mysql/{data,logs,tmp}
touch /data/mysql/{mysql.pid,mysql.sock}
2、創建用戶
useradd mysql
3、安裝依賴包
yum install perl perl-devel perl-Data-Dumper libaio-devel -y
4、下載包
cd /usr/local/src
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
tar zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local
mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql
chown -R mysql:mysql /usr/local/mysql /data/mysql/


三、配置文件
========================================================

[client]
port = 16205
default-character-set=utf8mb4
socket = /data/mysql/mysql.sock

[mysqld]
user = mysql
port = 16205
server-id = 111
character_set_server=utf8mb4
socket = /data/mysql/mysql.sock
datadir = /data/mysql/data/
pid-file = /data/mysql/mysql.pid

auto-increment-increment = 2    #主主參數,主從可注釋(必填)
auto-increment-offset = 1      #主主參數,主從可注釋(必填)主:1;從:2

#bind-address = 10.26.25.28
#skip-name-resolve=1
#event_scheduler = on

federated
skip-ssl
secure-file-priv = /home/mysql
disable-partition-engine-check=1
explicit_defaults_for_timestamp=false

max_allowed_packet = 32M
innodb_file_per_table = 1
back_log = 300
max_connections = 8000
max_connect_errors = 1000
table_open_cache = 4096
open_files_limit = 10240
max_allowed_packet = 512M
wait_timeout = 300
interactive_timeout=300
sort_buffer_size = 16M
join_buffer_size = 16M
query_cache_size = 128M
transaction_isolation = REPEATABLE-READ
thread_stack = 512K

innodb_buffer_pool_size = 4G
innodb_data_file_path = ibdata1:512M:autoextend
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 16
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_lock_wait_timeout = 120

binlog-ignore-db=information_schema,mysql,performance_schema  #主主參數,主從可注釋
#replicate-ignore-db=information_schema,mysql,performance_schema

binlog_format=row
expire_logs_days=10
binlog_cache_size = 7M
log-error = /data/mysql/logs/error.log
log-bin = /data/mysql/logs/mysql_bin.log
log-slave-updates=true  #主主參數,主從可注釋
#slow log
slow-query-log = 1
long_query_time = 2
slow-query-log-file = /data/mysql/logs/slowquery.log
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[mysqld_safe]
pid-file=/data/mysql/mysql.pid

================================================================================  

四、初始化
1.MySQL5.7初始化:#注意: 要先初始化,再啟動
初始化: bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql --initialize
查看隨機密碼: cat /data/mysql/logs/error.log | grep password(查看后保存密碼)

2.啟動mysql
bin/mysqld_safe --defaults-file=/etc/my.cnf &

3.修改密碼: /usr/local/mysql/bin/mysqladmin -uroot -p password #輸入隨機密碼,再輸入兩次新密碼即可
# 初始化后數據目錄包含: mysql、information_schema、sys、performache_schema四個數據庫

登錄數據庫:
/usr/local/mysql/bin/mysql -uroot -p

退出數據庫:exit;

五、主從配置
# Master
1、my.cnf
server-id=1111
log-bin=(產生binglog日志。)

2、創建用於主從同步的賬號
repl(主從同步用戶名)192.168.28.135(從庫所在服務器的IP)
mysql> grant replication slave on *.* to 'repl'@'192.168.28.135' identified by 'a123456';(a123456表示密碼)
Query OK, 0 rows affected, 1 warning (0.06 sec)

mysql> flush privileges;(刷新權限)
Query OK, 0 rows affected (0.02 sec)

3、查看主庫當前bin_log文件和Position
mysql> show master status;
+---------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+--------------------------+-------------------+
| binlog.000008 | 25616 | | information_schema,mysql | |
+---------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

#以下是從庫操作

登錄數據庫
/usr/local/mysql/bin/mysql -uroot -p

4、與主庫建立連接
mysql> stop slave;(停止同步)
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host='192.168.28.136',master_user='repl',master_password='a123456',master_port=16205,master_log_file='mysql_bin.000007',master_log_pos=25616;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

master_host='192.168.28.136’, (主庫所在IP地址)
master_user='repl', (主從同步用戶名)
master_password='a.123456', (主從同步密碼)
master_port=16205, (主庫對外訪問端口號)
master_log_file='mysql_bin.000007',(主庫配置文件)
master_log_pos=25616; (主庫配置文件)

5、start slave;(開啟從庫同步主庫)

6、show slave status;(查看主從同步狀態)show slave status\G
。。。。。。
Slave_IO_Running: Yes (IO線程是否正常)
Slave_SQL_Running: Yes (sql線程是否正常)
#這兩個參數都為Yes的時候表示主從配置完成
==============================================================================

六、雙主配置(就是把主從反過在配一遍)

登錄數據庫
/usr/local/mysql/bin/mysql -uroot -p
從庫:

2、創建用於主從同步的賬號
repl(主從同步用戶名)192.168.28.135(從庫所在服務器的IP)
mysql> grant replication slave on *.* to 'repl1'@'192.168.28.135' identified by 'a123456';(a123456表示密碼)
Query OK, 0 rows affected, 1 warning (0.06 sec)

mysql> flush privileges;(刷新權限)
Query OK, 0 rows affected (0.02 sec)

3、查看主庫當前bin_log文件和Position
mysql> show master status;
+---------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+--------------------------+-------------------+
| binlog.000008 | 25616 | | information_schema,mysql | |
+---------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

#以下是從庫操作

4、與主庫建立連接
mysql> stop slave;(停止同步)
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host='192.168.28.135',master_user='repl1',master_password='a123456',master_port=16205,master_log_file='mysql_bin.000008',master_log_pos=25616;
Query OK, 0 rows affected, 2 warnings (0.03 sec)


master_host='172.16.1.20’, (主庫所在IP地址)
master_user='repl', (主從同步用戶名)
master_password='a123456', (主從同步密碼)
master_port=16205, (主庫對外訪問端口號)
master_log_file='mysql_bin.000004',(主庫配置文件)
master_log_pos=25618; (主庫配置文件)

 

5、start slave;(開啟從庫同步主庫)

6、show slave status;(查看主從同步狀態)show slave status\G


。。。。。。
Slave_IO_Running: Yes (IO線程是否正常)
Slave_SQL_Running: Yes (sql線程是否正常)
#這兩個參數都為Yes的時候表示主從配置完成(兩台數據庫服務器都為YES方為通過,一定要驗證!!!!!!!!!!)
。。。。。。

===========================================================================

如遇訪問權限問題:以下可以解決

mysql -uroot -p root
mysql->use mysql
mysql->update user set host = '%' where user ='root';
mysql->grant all privileges on *.* to 'root'@'%' with grant option;
mysql->flush privileges;
mysql->exit;
sudo service mysql restart;

**********************************************************************************************************************************

keepalived部署配置(安裝在mysql雙主服務器當中)

一、安裝keepalived

下載keepalived

官網: https://keepalived.org/download.html

 

上傳並解壓keepalived

/home

cd /home/

tar -zxvf keepalived-2.0.18.tar.gz -C /usr/local/src/

進入目錄/usr/local/src/keepalived-2.0.18

cd /usr/local/src/keepalived-2.0.18/

 

檢查安裝環境

./configure --prefix=/usr/local/keepalived  

 

第一次檢查:

configure: error:

  !!! OpenSSL is not properly installed on your system. !!!

  !!! Can not include OpenSSL headers files.            !!!

安裝openssl openssl-devel解決問題

yum -y install openssl openssl-devel

 

第二次檢查

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

安裝libnl libnl-devel解決問題

yum -y install libnl libnl-devel

 

其他問題

configure: error: libnfnetlink headers missing

安裝libnfnetlink-devel解決問題

yum -y install libnfnetlink-devel

 

編譯並安裝

make && make install

 

將keepalived添加到系統服務中

拷貝執行文件

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

 

將init.d文件拷貝到etc下,加入開機啟動項

cp /usr/local/src/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/keepalived

 

將keepalived文件拷貝到etc下

cp /usr/local/src/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

 

創建keepalived文件夾

mkdir -p /etc/keepalived

 

將keepalived配置文件拷貝到etc下

cp /usr/local/src/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

 

添加keepalived到開機啟動(看個人可隨意)

chkconfig --add keepalived

添加可執行權限

chmod +x /etc/init.d/keepalived

 

二、部署keepalived雙擊自主切換(一下配置文件和腳本,兩台機器都要重新布)

備份keepalived配置文件

cp keepalived.conf keepalived.conf.back

 

重新編輯配置文件

vim keepalived.conf

配置文件

===============================================================

! COnfiguration File for keepalived

global_defs {
router_id MASTER-HA  #主機標識
#router_id BACKUP   #備機標識

script_user root
enable_script_security


}

vrrp_script chk_mysql_port {
script "/etc/keepalived/chk_mysql.sh"   #腳本地址和名字,此處調用改腳本
interval 2
weight -5
fall 2
rise 1
}

vrrp_instance VI_1 {
state MASTER  #主機MASTER、備機BACKUP
interface eth0  #本機的網卡
mcast_src_ip 192.168.28.136  #網卡IP
virtual_router_id 51
priority 101           #主機101,備機小於101便可
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.28.188    #新的IP地址,需要在同機網段內
}

track_script {
chk_mysql_port
}

===============================================================================================

編寫腳本

vim chk_mysql.sh

========================================================

#!/bin/bash
#This scripts is check for Mysql Slave status
counter=$(netstat -na|grep "LISTEN"|grep "16205"|wc -l)
if [ "${counter}" -eq 0 ]; then
/etc/init.d/keepalived keepalived stop
killall keepalived
fi
ping 192.168.28.136 -w1 -c1 &>/dev/null
if [ $? -ne 0 ]
then
/etc/init.d/keepalived keepalived stop
killall keepalived
fi

========================================================

添加可執行權限

chmod +x /etc/init.d/keepalived

啟動keepalived

/etc/init.d/keepalived start

查看是否啟動成功

ps -ef | grep keepalived

 

啟動成功之后會生成一個新的服務器IP地址,可通過新IP直接連接數據庫

查看ip地址  ip addr

 連接數據庫地址

 

 

至此,數據庫連接成功。

可以自由關閉其中一台數據庫服務,keepalived會自動切換到另外一台數據庫服務器當中。

 


免責聲明!

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



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