高可用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

九、相关参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】电大中专办公设备使用与维护 (2)_1作业 题库

1以下哪个不是现代办公硬件需求的主要依赖()。 A扫描仪 B计算机 C办公桌 D打印机 错误 正确答案:左边查询 学生答案:B 2现代办公设备可分为计算机、通信()三大类。 A电子工具 B办公机械 C路由器 D碎纸机 错…

无服务器冷启动不是问题-这就是为什么(对于大多数应用程序)

从无服务器开始时,您很快就会学习/听到有关函数冷启动的信息(我相信无服务器云功能 API )。 首次调用云功能时或长时间不调用后会发生冷启动。 基本上,服务器(是的,有服务器!)需要一…

【渝粤教育】电大中专学前儿童健康教育作业 题库

1健康的定义是()年,世界卫生组织提出的。 A1945 B1948 C1955 D1958 错误 正确答案:左边查询 学生答案:A 2健康不仅仅是没有疾病或虚弱,而是包括身体、心理和()方面的完好状态。 A精神 B躯体 C社会 D道德 错误 正确答案&#xff1a…

python学习与数据挖掘_Python学习之数据挖掘(三)

Pandas基础处理Pandas是什么?为什么用?核心数据结构DataFramePanelSeries基本操作运算画图文件的读取与存储高级处理4.1Pandas介绍4.1.1 Pandas介绍 - 数据处理工具panel data analysispanel面板数据 - 计量经济学 三维数据4.1.2 为什么使用Pandas便捷…

【渝粤教育】电大中专学前儿童科学教育 (14)作业 题库

1学前儿童科学教育的学习重点是() A学前儿童科学教育的内涵 B学前儿童科学教育的概念 C科学的概念 D技术的概念 错误 正确答案:左边查询 学生答案:A 2学前儿童科学教育的学习难点是() A学前儿童科学教育的内涵 B学前儿童科学教育在儿童发展中的意义 C学前…

生成器作为(快速失败)状态机

这个想法是几周前在设计“ Generator”类时想到的,该类必须将输入发送给封装的Writer 。 实际上,它是Builder模式。 但是,规则有些复杂,用户必须以某种方式调用add...()方法,才能正确生成输出。 不用说,我…

【渝粤教育】电大中专市场营销管理20作业 题库

1.市场营销没有宏观市场营销和微观市场营销之分。该说法:( ) A.错误 B.正确 错误 正确答案:左边查询 学生答案:B 2.战略选择的陷阱有:盲目跟随、墨守成规、军备竞赛、多方出击、孤注一掷、本末倒置。该说法…

源码包编译安装python_Python3.7源码包编译安装-Go语言中文社区

环境:[rootlocalhost python3]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)[rootlocalhost python3]#1、下载Python方式一:方式二:进入https://www.python.org/ftp/python/ 这里存放着所有版本的Python源码。往下拉看到最…

【渝粤教育】电大中专建筑力学 (4)作业 题库

1.下列说法不正确的是()。 A.力偶在任何坐标轴上的投形恒为零 B.力可以平移到刚体内的任意一点 C.力系的合力在某一轴上的投形等于各分力在同一轴上投形的代数和 D.力使物体绕某一点转动的效应取决于力的大小和力作用线到该点的垂直距离 正确 正确答案&a…

java criteria and_criteria用法

Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如:Java代码Criteria criteria session.createCriteria(User.class);criteria.add(Expression.eq(&q…

【渝粤教育】电大中专新媒体营销实务 (4)作业 题库

1.( )对新媒体的定义为:“以数字信息技术为基础,以互动传播为特点,具有创新形态的媒体。” A.新传媒产业联盟秘书长王斌 B.联合国教科文组织 C.华纳兄弟总裁施瓦茨威格 正确 正确答案:左边查询 学生答案&am…

服务网格:Istio和AWS App Mesh

本周在AWS re:Invent上的重大公告之一是AWS App Mesh 。 在谈论它之前,让我们先看一下网格到底是什么…… 什么是服务网格? 服务网格是微服务体系结构的基础结构层。 它处理服务之间的通信问题,使该通信更加可见(或“…

【渝粤教育】电大中专消费者心理学_1作业 题库

1.在西方,早期思想家也有论及消费时令和消费季节的朴素思想。该说法() A.错误 B.正确 正确 正确答案:左边查询 学生答案:A 2.体系凝构阶段大致自20世纪70年代延至20世纪末或21世纪初。该说法() …

java按键发出声音代码_怎么在java中给按钮添加声音?

可以加入GTM时间,代码如下:public class ShowCurrentTime {public static void main(String args[]){//Obtain the total milliseconds since midnight,Jan 1,1970long totalMillisecondsSystem.currentTimeMillis();//Obtain the total seconds since i…

Spring字段依赖注入示例

学习如何编写Spring Field Injection示例 。 字段注入是Spring框架 依赖注入的一种 。 在本教程中,我们将编写几个类,并看一看现场注入工程。 有关Spring依赖注入的更多信息: Spring Setter依赖注入示例 Spring构造函数依赖注入示例 Spri…

java8 新特性之流式数据处理_Java8新特性 - 集合流式编程 - 最终操作

2、数据源的获取2.1、数据源的简介数据源,顾名思义,既是流中的数据的来源。是集合的流式编程的第一步,将数据源中的数据读取到流中,进行处理。注意:将数据读取到流中进行处理的时候,与数据源中的数据没有关…

【渝粤教育】电大中专电大中专职业健康与安全考试考核试题作业 题库

试卷答案 1根据系统安全工程的观点,危险是指系统中存在导致发生不期望后果的可能性超过了( ) A极限 B人们的承受程度 C危险度 D安全系数 错误 正确答案:左边查询 学生答案:A 2对职工来说,安全是&#xff0…

java jdt_在JDT中使用Java 8 Lambda

java jdt旧 Curmudgeon 认识Smalltalk的Dude 在修改Eclipse Java开发工具 (JDT)项目正在开发的Java 8支持时,我一直在使用这种语言。 我承认我对Java 8中的lambda有点不满意。 当然,这来自于知道Smalltalk (和LISP…

java 1.8签名apk_给Android的APK程序签名和重新签名的方法

签名工具的使用Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的。使用格式:java –jar signapk.jar [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar-w 是指对ROM签名时需使用的参数publickey.x509[.pem] 是公钥文件pri…

【渝粤教育】电大中专职业生涯规划 (3)作业 题库

1职业价值观具有明确的目的性、( )和坚定性的职业选择的态度和行为。 A自由性 B动机性 C自觉性 D制约性 错误 正确答案:左边查询 学生答案:A 2不属于探索价值观方法的是( )。 A澄清反应法 B意见表决法 C间接…