Mysql+Keepalived實現(xiàn)雙主熱備方式
我們通常說的雙機熱備是指兩臺機器都在運行,但并不是兩臺機器都同時在提供服務。當提供服務的一臺出現(xiàn)故障的時候,另外一臺會馬上自動接管并且提供服務,而且切換的時間非常短
MySQL雙主復制,即互為Master-Slave(默認只使用一臺MasterA負責數(shù)據(jù)寫入,另一臺MasterB備用),可以實現(xiàn)數(shù)據(jù)庫服務器的熱備,但是一臺Master宕機后不能實現(xiàn)動態(tài)切換。
使用Keepalived,可以通過虛擬IP,實現(xiàn)雙主對外的統(tǒng)一接口以及自動檢查、失敗切換機制,從而實現(xiàn)MySQL數(shù)據(jù)庫的高可用方案。
一、Mysql安裝、配置和安全啟動
把mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz上傳到/usr/local/src/
1、mysql安裝
cd /usr/local/src/ tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz mkdir -p /usr/local/mysql/ mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql/mysql-5.7.28
2、創(chuàng)建mysql用戶組和用戶
cd /usr/local groupadd mysql useradd -r -g mysql -s /bin/false mysql chown -R mysql:mysql mysql
3、初始化數(shù)據(jù)
cd /usr/local/mysql/mysql-5.7.28 bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-5.7.28/ --datadir=/data1/mysql/data --lc_messages_dir=/usr/local/mysql/mysql-5.7.28/share --lc_messages=en_US bin/mysql_ssl_rsa_setup --datadir=/data1/mysql/data
4、修改配置
vi /etc/my.cnf basedir=/usr/local/mysql/mysql-5.7.28 datadir=/data1/mysql/data
5、配置環(huán)境變量
#編輯環(huán)境變量 .bash_profile表示當前用戶個人配置 只對當前用戶生效 vi ~/.bash_profile #將mysql的bin目錄配置到環(huán)境變量中 PATH=$PATH:$HOME/bin:/usr/local/mysql/mysql-5.7.28/bin export PATH #使配置修改后立即生效 source ~/.bash_profile
6、修改密碼、配置遠程訪問和安全啟動
#啟動前先設置免密登錄 vi /etc/my.cnf #添加如下配置并保存 跳過權(quán)限驗證 skip-grant-tables=1 #安全啟動 cd /usr/local/mysql/mysql-5.7.28/bin ./mysqld_safe --user=mysql & #修改密碼 #進入mysql mysql use mysql update user set authentication_string=password("123456") where user="root"; #刷新權(quán)限表 flush privileges; #配置遠程訪問 use mysql #允許所有機器訪問root用戶 %代表所有機器 update user set host='%' where user='root'; #授權(quán)所有機器的root用戶擁有所有數(shù)據(jù)庫的所有權(quán)限 遠程訪問密碼root %代表所有機器 grant all privileges on *.* to root@'%' identified by 'root'; #刷新權(quán)限表 flush privileges; #退出mysql exit #安全關閉 ./mysqladmin -uroot -p shutdown #刪除免密登錄配置 vi /etc/my.cnf #刪除skip-grant-tables=1并保存 #安全啟動 ./mysqld_safe --user=mysql &
二、 兩臺Mysql配置雙主
1、創(chuàng)建主從同步replication用戶
2、授權(quán)
192.168.0.101
#授權(quán)IP192.168.0.102的從數(shù)據(jù)庫replication用戶擁有所有數(shù)據(jù)庫的同步權(quán)限 遠程訪問密碼replication grant replication slave on *.* to 'replication'@'192.168.0.102' identified by 'replication'; #刷新權(quán)限表 flush privileges;
192.168.0.102
#授權(quán)IP192.168.0.101的從數(shù)據(jù)庫replication用戶擁有所有數(shù)據(jù)庫的同步權(quán)限 遠程訪問密碼replication grant replication slave on *.* to 'replication'@'192.168.0.101' identified by 'replication'; #刷新權(quán)限表 flush privileges;
3、添加配置文件
[mysqld] basedir=/usr/local/mysql/mysql-5.7.28 datadir=/data1/mysql/data server-id = 101 skip-external-locking log_bin = mysql-binlog binlog_do_db = sample binlog-ignore-db = mysql binlog-ignore-db = performance_schema binlog-ignore-db = information_schema binlog_group_commit_sync_delay = 100000 # 單位微妙 binlog_group_commit_sync_no_delay_count = 20 # 單位每組事物數(shù)量 #設置復制類型 slave-parallel-type=LOGICAL_CLOCK #設置并行數(shù)量 slave-parallel-workers=4 #主主需要加的部分 replicate-do-db = sample log-slave-updates=true #sync_binlog=1 auto_increment_offset=1 auto_increment_increment=2 innodb_buffer_pool_size = 12G innodb_buffer_pool_instances = 8 innodb_buffer_pool_chunk_size = 128M innodb_log_file_size = 256M innodb_log_buffer_size = 32M innodb_flush_method = O_DIRECT innodb_lock_wait_timeout = 120 slow_query_log = ON slow_query_log_file = /usr/local/mysql/log/slow.log long_query_time = 5 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION secure_file_priv=/usr/local/mysqlcsvfiles/ expire_logs_days=7 max_binlog_size=1024M !includedir /etc/my.cnf.d
4、添加之后
mkdir -p /usr/local/mysql/log mkdir -p /usr/local/mysqlcsvfiles
5、安全關閉
./mysqladmin -uroot -p shutdown
6、安全啟動
./mysqld_safe --user=mysql &
7、進入mysql執(zhí)行
#進入mysql執(zhí)行 show master status\G; #分別記錄主的binlog位置,在101的角度上102為主,在102的角度上,101為主 File:mysql-bin.000001 Position: 154 #設置同步關系(兩個主都要設置) #其中master_log_file和master_log_pos要登錄到對方機器執(zhí)行show master status\G;去查看 stop slave; (在192.168.0.101) change master to master_host='192.168.0.102',master_user='replication',master_password='replication',master_log_file='mysql-bin.000001',master_log_pos=154; (在192.168.0.102) change master to master_host='192.168.0.101',master_user='replication',master_password='replication',master_log_file='mysql-bin.000001',master_log_pos=154; #分別啟動slave start slave;
三、安裝Keepalived
1、安裝編譯依賴包
yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel
2、安裝Keepalived
#解壓keepalived壓縮包放到/usr/local/并重命名為keepalived cd /usr/local/src tar -zxvf keepalived-2.0.7.tar.gz mv keepalived-2.0.7 /usr/local/keepalived #配置keepalived 得到一個Makefile的文件夾 #--prefix:keepalived安裝目錄 #--sysconf:keepalived的核心配置文件,必須要在/etc目錄下面,改為其他位置會導致啟動不了,不配置在該目錄下的話,啟動keepalived時日志文件里面會報錯,顯示找不到/etc這個文件夾 cd /usr/local/keepalived ./configure --prefix=/usr/local/keepalived/ --sysconf /etc #編譯和安裝keepalived make && make install #創(chuàng)建keepalived軟鏈接 /usr/sbin/如果存在keepalived就先刪除 ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/ #復制keepalived腳本文件到/etc/init.d/目錄下 cd keepalived cp /usr/local/keepalived/etc/init.d/keepalived /etc/init.d/ #設置Keepalived開機自啟動 chkconfig --add keepalived chkconfig keepalived on #啟動keepalived service keepalived start
四、配置Keepalived
1、編輯keepalived配置文件
vi /etc/keepalived/keepalived.conf
2、主服務器添加對應配置文件
global_defs { router_id LVS_LEVEL1 #主服務器名稱 } vrrp_script check_run { script "/etc/keepalived/mysql_check.sh" interval 5 #5秒執(zhí)行一次腳本 } vrrp_instance VI_1 { state MASTER #主服務器 interface eth0 #承載VIP地址到物理接口 virtual_router_id 51 #虛擬路由器ID號,每個熱播組保持一致 priority 100 #優(yōu)先級,數(shù)值越大優(yōu)先級越高 advert_int 1 #檢查間隔,默認為1s authentication { #認證信息,每個熱播組保持一致 auth_type PASS #認證類型 auth_pass 1111 #密碼字串 } virtual_ipaddress { 192.168.0.144 #VIP地址(內(nèi)網(wǎng)地址) } track_script { check_run } }
3、備份服務器添加對應配置文件
global_defs { router_id LVS_LEVEL2 #備份服務器名稱 } vrrp_script check_run { script "/etc/keepalived/mysql_check.sh" interval 5 #5秒執(zhí)行一次腳本 } vrrp_instance VI_1 { state BACKUP #備份服務器 interface eth0 #承載VIP地址到物理接口 virtual_router_id 51 #虛擬路由器ID號,每個熱播組保持一致 priority 50 #優(yōu)先級,數(shù)值越大優(yōu)先級越高 advert_int 1 #檢查間隔,默認為1s authentication { #認證信息,每個熱播組保持一致 auth_type PASS #認證類型 auth_pass 1111 #密碼字串 } virtual_ipaddress { 192.168.0.144 #VIP地址(和主服務器設置一樣) } track_script { check_run } }
附mysql_check.sh
#!/bin/bash /usr/bin/mysql -uroot -p'你自己的數(shù)據(jù)庫密碼' -e "show status" &>/dev/null if [ $? -ne 0 ] ;then systemctl stop keepalived fi
chmod +x /etc/keepalived/mysql_check.sh
4、重啟keepalived
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Mysql?optimize?table?時報錯:Temporary?file?write?fail的解決
這篇文章主要介紹了Mysql?optimize?table?時報錯:Temporary?file?write?fail的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09