高可用mysql笔记_MySQL笔记-高可用方案
MySQL筆記-高可用方案
一、概述
MYSQL高可用方案有多種,本次針對其中部分方案進行實踐。包括主從,雙主,myql+keepalived, mysql+mycat+keepalived。
紙上得來終覺淺,親自實驗一下。
環境信息
注意兩臺機器時間需要保持同步,網絡和端口權限
臨時關閉防火墻:systemctl stop firewalld.service
服務器環境:CentOS7.6
MySQL版本:mysql-community-server-5.7.28-1
mysql, master:192.168.1.100
mysql, slave:192.168.1.101
二、主從復制(一主一從)
2.1、配置參數(my.cnf)
注意修改后需要重啟數據庫服務
mysql主從復制重要配置參數說明(my.cnf)
#通用重要配置
server-id=1 # 不能和其他重復,必須全局唯一
log-bin=mysql-bin
#從庫重要配置
relay_log=mysql-relay-bin
log-slave-updates=1
#其他重要參數
binlog-ignore-db=mysql
replicate-ignore-db=mysql
max_binlog_size=1G
expire_logs_days=15 #日志保留天數
我的Master完整配置(my.cnf)
[mysqld]
server-id=1
#binlog_format=ROW
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
#innodb_flush_log_at_trx_commit=1
#sync_binlog=1
max_binlog_size=1G
expire_logs_days=15 #日志保留天數
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 只同步哪些數據庫,除此之外,其他不同步
# binlog-do-db=testdb
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_connections=3000
lower_case_table_names=1
max_allowed_packet=40M
wait_timeout=1800
interactive_timeout=1800
max_connect_errors=3000
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[mysqldump]
user=local
password=123456
我的Slave完整配置(my.cnf)
[mysqld]
server-id=2
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
log-slave-updates=1 # 在作為從數據庫的時候,有寫入操作也要更新二進制日志文件(主主配置一定要)
#innodb_flush_log_at_trx_commit=1
#sync_binlog=1
max_binlog_size=1G
expire_logs_days=15 #日志保留天數
# 不同步mysql,information_schema,performance_schema和sys庫
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
relay_log=/var/lib/mysql/mysql-relay-bin
#read_only=1
#Enhanced Multi-Threaded Slave配置
#根據實際情況決定開啟多少個線程用于主從復制
slave_parallel_workers=4
#基于組提交的并行復制方式
slave_parallel_type=LOGICAL_CLOCK
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_connections=3000
lower_case_table_names=1
max_allowed_packet=40M
wait_timeout=1800
interactive_timeout=1800
max_connect_errors=3000
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[mysqldump]
user=local
password=123456
2.2、Master數據庫,創建復制用戶并授權
mysql> create user repl identified by '123456';
Query OK, 0 rows affected (0.03 sec)
mysql> grant replication slave on *.* to repl@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
mysql> show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000001 | 1078 | | mysql,information_schema,performance_schema,sys | |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)
2.3、Slave數據庫,指定Master及啟用slave
mysql> change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1078;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.100
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1078
Relay_Log_File: 0002-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql,information_schema,performance_schema,sys
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1078
Relay_Log_Space: 526
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 77f466ff-926e-11ea-bbba-408d5c963463
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
2.3、驗證主從復制
主庫創建測試庫、表和數據
mysql> CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0.03 sec)
mysql> CREATE TABLE `testdb`.`t_user`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NULL,PRIMARY KEY (`id`));
Query OK, 0 rows affected (0.21 sec)
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('jack');
Query OK, 1 row affected (0.07 sec)
mysql> select * from `testdb`.`t_user`;
+----+------+
| id | name |
+----+------+
| 1 | jack |
+----+------+
1 row in set (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000001 | 1813 | | mysql,information_schema,performance_schema,sys | |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)
從庫查看同步情況
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Read_Master_Log_Pos: 1813
Relay_Log_File: 0002-relay-bin.000002
Relay_Log_Pos: 1055
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 1813
Relay_Log_Space: 1261
...
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
mysql> select * from `testdb`.`t_user`;
+----+------+
| id | name |
+----+------+
| 1 | jack |
+----+------+
1 row in set (0.00 sec)
三、雙主配置
3.1 配置說明
實驗環境:
服務器環境:CentOS7.6
MySQL版本:mysql-community-server-5.7.28-1
mysql,master1:192.168.1.100
mysql,master2:192.168.1.101
雙主與一主一從,配置差不多,區別是:
1.兩臺機器都配置對方為從,即
在master1上執行
change master to master_host='192.168.1.101',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;
在master2上執行
change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;
2.兩方都配置replicate-ignore-db,binlog-ignore-db
3.為保險起見,調整兩方自增ID規則(非必須);把兩個節點的auto_increment_increment(自增步長)和auto_increment_offset(字增起始值)設置成不同值,其目的是為了避免master節點意外宕機時,可能會有部分binlog未能及時復制到slave上被應用,從而會導致slave新寫入數據的自增值和原master上沖突,因此一開始就錯開;
#masterA自增長ID
auto_increment_offset=1
auto_increment_increment=2 #奇數ID
#masterB自增加ID
auto_increment_offset=2
auto_increment_increment=2 #偶數ID
3.2 完整配置(my.cnf),master1
[mysqld]
server-id=1
#binlog_format=ROW
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
#innodb_flush_log_at_trx_commit=1
#sync_binlog=1
max_binlog_size=1G
#日志保留天數
expire_logs_days=15
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 不同步mysql,information_schema,performance_schema和sys庫
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
auto_increment_offset=1
#奇數ID
auto_increment_increment=2
# 只同步哪些數據庫,除此之外,其他不同步
# binlog-do-db=testdb
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_connections=3000
lower_case_table_names=1
max_allowed_packet=40M
wait_timeout=1800
interactive_timeout=1800
max_connect_errors=3000
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[mysqldump]
user=local
password=123456
3.2 完整配置(my.cnf),master2
[mysqld]
server-id=2
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
log-slave-updates=1 # 在作為從數據庫的時候,有寫入操作也要更新二進制日志文件(主主配置一定要)
#innodb_flush_log_at_trx_commit=1
#sync_binlog=1
max_binlog_size=1G
#日志保留天數
expire_logs_days=15
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 不同步mysql,information_schema,performance_schema和sys庫
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
auto_increment_offset=2
#偶數ID
auto_increment_increment=2
relay_log=/var/lib/mysql/mysql-relay-bin
#read_only=1
#Enhanced Multi-Threaded Slave配置
#根據實際情況決定開啟多少個線程用于主從復制
slave_parallel_workers=4
#基于組提交的并行復制方式
slave_parallel_type=LOGICAL_CLOCK
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_connections=3000
lower_case_table_names=1
max_allowed_packet=40M
wait_timeout=1800
interactive_timeout=1800
max_connect_errors=3000
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[mysqldump]
user=local
password=123456
3.3 配置同步
#master1 (192.168.1.100):
mysql> create user repl identified by '123456';
mysql> grant replication slave on *.* to repl@'%' identified by '123456';
mysql> change master to master_host='192.168.1.101',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;
mysql> start slave;
#master1 (192.168.1.101):
mysql> create user repl identified by '123456';
mysql> grant replication slave on *.* to repl@'%' identified by '123456';
mysql> change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1098;
mysql> start slave;
3.4 驗證雙主
# 連接 master1 (192.168.1.100):
mysql> CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql> CREATE TABLE `testdb`.`t_user`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) NULL,PRIMARY KEY (`id`));
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('jack');
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('rose');
# 連接 master2 (192.168.1.101):
mysql> select * from `testdb`.`t_user`;
+----+------+
| id | name |
+----+------+
| 1 | jack |
| 3 | rose |
+----+------+
INSERT INTO `testdb`.`t_user`(`name`) VALUES ('tony');
INSERT INTO `testdb`.`t_user`(`name`) VALUES ('alice');
# 連接 master1 (192.168.1.100):
mysql> select * from `testdb`.`t_user`;
+----+-------+
| id | name |
+----+-------+
| 1 | jack |
| 3 | rose |
| 4 | tony |
| 6 | alice |
+----+-------+
4 rows in set (0.00 sec)
至此,雙主環境配置和驗證完畢
四、基于Keeplived配置雙主高可用
4.1、實驗環境
實驗環境:
基于上述雙主配置,
服務器環境:CentOS7.6
MySQL版本:mysql-community-server-5.7.28-1
mysql,master1:192.168.1.100
mysql,master2:192.168.1.101
虛擬mysql-IP(VIP),192.168.1.102
驗證方式:
通過虛擬IP(192.168.1.102:3306)連接訪問mysql,然后插入記錄,期望記錄ID為奇數;
然后關閉master1,期望通過虛擬IP(192.168.1.102:3306)仍能連接訪問MYSQL服務;
再插入記錄,期望記錄ID為偶數。
4.2、Keepalived安裝
一、yum安裝方式:
yum install keepalived -y
二、編譯安裝方式
# yum -y install gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools
# cd /usr/local/src/
# wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
# mv keepalived-2.0.20 /usr/local/keepalived
# cd /usr/local/keepalived/
# ./configure
# make && make install
# mkdir /etc/keepalived
# cp /usr/local/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
# cp /usr/local/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/sbin/keepalived /usr/sbin/
安裝參考: CentOS安裝Keepalived https://www.cnblogs.com/kingsonfu/p/11392470.html
服務啟動和暫停
# service keepalived start 啟動服務
# service keepalived stop //停止服務
# service keepalived status //查看服務狀態
查看keepalived日志
# tail -f /var/log/message
4.3 mysql-keepalived配置
采用keepalived作為高可用方案時,兩個節點最好都設置成BACKUP模式,避免因為意外情況下相互搶占導致兩個節點內寫入相同的數據而引發沖突;
master1配置(/etc/keepalived/keepalived.conf)
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA
}
vrrp_instance VI_1 {
state BACKUP
interface p4p1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.102/24
}
}
virtual_server 192.168.1.102 3306 {
delay_loop 6
protocol TCP
real_server 192.168.1.100 3306 {
notify_down "kill -9 $(cat /var/run/keepalived.pid)"
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
master2配置(/etc/keepalived/keepalived.conf)
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA
}
vrrp_instance VI_1 {
state BACKUP
interface p4p1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.102/24
}
}
virtual_server 192.168.1.102 3306 {
delay_loop 6
protocol TCP
real_server 192.168.1.101 3306 {
notify_down "kill -9 $(cat /var/run/keepalived.pid)"
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
4.4、驗證
-
五、基于Keepalived+MyCat配置雙主高可用
5.1、實驗環境
實驗環境:
基于上述雙主配置環境,
服務器環境:CentOS7.6
MySQL版本:mysql-community-server-5.7.28-1
MyCat版本:Mycat-server-1.6.7.4-release-20200105164103-linux
mysql, master1:192.168.1.100
mysql, master2:192.168.1.101
mycat, mycat1: 192.168.1.102
5.2、安裝配置MyCat
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
cd mycat
5.3、MyCat配置(最簡)
mycat主要配置 server.xml和schema.xml兩個即可。
這里需要注意:相應mysql用戶需要能其他服務器可訪問
-- 默認root用戶,其他機器無法訪問
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
/conf/server.xml
123456
testdb
/conf/schema.xml
dbType="mysql" dbDriver="native">
select user()
dataHost標簽上屬性釋義:
balance:負載均衡類型
0:不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上
1:全部的readHost與stand by writeHost參與select語句的負載均衡,
2:所有讀操作都隨機在writeHost、readHost上分發
3:所有讀請求隨機分發到writeHost對應的readHost執行,writeHost不負擔讀壓力
writeType:負載均衡類型
0:所有寫操作發送到配置的第一個writeHost,當第一個writeHost宕機時,切換到第二個writeHost,重新啟動后以切換后的為準,切換記錄在配置文件:dnindex.properties中
1:所有寫操作都隨發送到配置的writeHost
2:尚未實現
switchType:切換方式
-1:不自動切換
1:自動切換(默認)
2:基于MySql主從同步的狀態來決定是否切換
5.4、啟動MyCat
./bin/mycat start
查看日志
logs目錄下 有 mycat.log switch.log wrapper.log
5.5、驗證MyCat
驗證方式:
通過mycat端口8066連接mysql, 插入記錄,期望記錄ID為奇數;
然后停掉192.168.1.100上mysql服務,然后再插入記錄,期望記錄ID為偶數;
第一步:插入3條記錄
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat1');
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat2');
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat3');
mysql> select * from `testdb`.`t_user`;
+----+--------+
| id | name |
+----+--------+
| 1 | jack |
| 3 | rose |
| 4 | tony |
| 6 | alice |
| 7 | mycat1 |
| 9 | mycat2 |
| 11 | mycat3 |
+----+--------+
7 rows in set (0.00 sec)
ID都是奇數,說明請求在master1上
第二步:停止master1,再插入3條記錄
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat4');
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat5');
mysql> INSERT INTO `testdb`.`t_user`(`name`) VALUES ('mycat6');
mysql> select * from `testdb`.`t_user`;
+----+--------+
| id | name |
+----+--------+
| 1 | jack |
| 3 | rose |
| 4 | tony |
| 6 | alice |
| 7 | mycat1 |
| 9 | mycat2 |
| 11 | mycat3 |
| 12 | mycat4 |
| 14 | mycat5 |
| 16 | mycat6 |
+----+--------+
10 rows in set (0.00 sec)
ID都是偶數,說明請求都在master2
至此MyCat驗證完畢
5.7、通過Keepalived配置MyCat高可用
實驗環境:
服務器環境:CentOS7.6
MySQL版本:mysql-community-server-5.7.28-1
MyCat版本:Mycat-server-1.6.7.4-release-20200105164103-linux
mysql, master1:192.168.1.100
mysql, master2:192.168.1.101
mycat, mycat1: 192.168.1.103
mycat, mycat2: 192.168.1.104
虛擬mycat-IP(VIP): 192.168.1.105
基于上面mysql雙主和mycat配置(mycat1,mycat2配置完全相同)
驗證方式:
通過連接 192.168.1.105:8066 訪問MySQL服務,通過切換關閉mycat1、mycat2服務,驗證mycat的高可用性。
5.8、附,mycat的keepalived配置
mycat1-keepalived配置,(/etc/keepalived/keepalived.conf)
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYCAT_HA
}
vrrp_instance VI_1 {
state MASTER
interface p4p1
virtual_router_id 53
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.105/24
}
}
virtual_server 192.168.1.105 8066 {
delay_loop 6
protocol TCP
real_server 192.168.1.103 8066 {
notify_down "kill -9 $(cat /var/run/keepalived.pid)"
TCP_CHECK {
connect_port 8066
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
mycat2-keepalived配置,(/etc/keepalived/keepalived.conf)
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYCAT_HA
}
vrrp_instance VI_1 {
state BACKUP
interface p4p1
virtual_router_id 53
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.105/24
}
}
virtual_server 192.168.1.105 8066 {
delay_loop 6
protocol TCP
real_server 192.168.1.104 8066 {
notify_down "kill -9 $(cat /var/run/keepalived.pid)"
TCP_CHECK {
connect_port 8066
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
六、雙主雙從讀寫分離
dbType="mysql" dbDriver="native">
select user()
七、附,其他一些配置參考
mycat-server.xml
123456
testdb
keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id web1
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_mycat {
script "/etc/keepalived/mycat_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 { //實例,定義虛擬路由
state MASTER //節點的初始狀態,主為master,備為backup
interface ens160 //綁定虛擬ip的網絡接口,必須與本地ip所在接口相同
virtual_router_id 51 //虛擬路由id號,兩個節點必須一樣
priority 100 //節點優先級,master要比backup高
advert_int 1 //兩個節點發送組播信息間隔時間,主備需要設置相同的時間,默認為秒
authentication { //配置認證
auth_type PASS //PASS即為密碼認證
auth_pass 1111 //設置密碼,可自定義
}
track_script {
check_mycat
}
virtual_ipaddress { //設置虛擬ip(VIP),兩個節點需要一樣
192.168.1.105
}
}
------------------
mycat_check.sh
#!/bin/bash
result=`nc -v -z $1 $2`
flag="succeeded"
if [[ $result =~ $flag ]]
then
exit 0
else;
exit 1
fi
mycat_check.sh
#!/bin/bash
result=`nc -v -z $1 $2`
flag="succeeded"
if [[ $result =~ $flag ]]
then
exit 0
else;
exit 1
fi
八、其他MySQL高可用方案
1.MGR(MySQL Group Replication、Galera Cluster,MySQL Cluster、PXC(Percona XtraDB Cluster)
2.客戶端解決方案(應用層):TDDL、 Sharding-Jdbc (常用shardding-jdbc)
3.中間件解決方案(代理層):mysql proxy、mycat、altas ,ProxySQL
4.Canal,Otter
九、相關參考
總結
以上是生活随笔為你收集整理的高可用mysql笔记_MySQL笔记-高可用方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孩子压岁钱理财方案有哪些?
- 下一篇: java连接到mysql_[操作系统]J