搭建 mysql 主从集群
安装 mariadb
yum install mariadb mariadb-server
配置 my.cnf,添加参数
bind-address = 0.0.0.0
symbolic-links = 0
server-id = 10
log_bin = mysql-bin
binlog-format = statement
relay-log = relay-log
read_only = 1
relay_log_purge = 0
innodb_file_per_table
修改 server-id 参数,后启动数据库
id=$(ip -o a s dev eth0|grep -Po "(?<=inet 192.168.4.)\d+")
sed "s,^\(server-id\t= \).*,\1${id}," -i /etc/my.cnf
启动服务
systemctl start mariadb
添加用户,开启主从同步
m01:
reset master;
create user 'repl'@'%' IDENTIFIED BY 'lper';
grant replication client,replication slave on *.* to repl@'%';
node{1..3}
reset slave;
change master to master_host='192.168.4.10',master_user='repl',master_password='lper';
start slave;
# 在 master 上配置 root 登录权限及密码
drop database test;
use mysql;
truncate db;
delete from user where User="";
delete from user where User="root" limit 2;
update user set Host="::1" where User="root" and Host="%";
update user set Host="127.0.0.1" where User="root" and Host="localhost";
update user set password=password('toor') where User="root";
flush privileges;
# 至此,mysql 主从已经创建完成
创建库、表及测试数据
读写分离
实现读写分离方式:
1、程序代码兼容,对除 select 以外的操作在 master 上执行,select 在 slave 上执行
2、中间件读写分离,对应用端透明
mycat 读写分离和分布式架构中间件,Mycat 使用 java 开发,由于使用了JDK7的一些特性,所以必须 JDK7 或更高版本.
安装依赖包
yum install java-1.8.0-openjdk
配置一个用户用来读,一个用户用来执行写操作
create user 'read_user'@'%' IDENTIFIED BY 'user_read';
grant select on *.* to 'read_user'@'%';
找一台机器安装 mycat 中间件,不建议复用
mycat 解压拷贝到 /usr/local/ 下
修改配置文件 schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mydb" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="m01" url="192.168.4.10:3306" user="root" password="toor">
<!-- can have multi read hosts -->
<readHost host="node1" url="192.168.4.11:3306" user="read_user" password="user_read" />
<readHost host="node2" url="192.168.4.12:3306" user="read_user" password="user_read" />
<readHost host="node3" url="192.168.4.13:3306" user="read_user" password="user_read" />
</writeHost>
</dataHost>
</mycat:schema>
配置文件注意事项:
conf/server.xml 可以不修改,但要注意
<property name="schemas">TESTDB</property>
虚拟库名称,要和后面对应
schemas是这个用户下的逻辑数据库可以有多个逻辑数据库可以用“,”逗号隔开
用户名和密码是连接 mycat 的用户名和密码,与 mysql 实例的用户名密码无关
mycat默认的普通连接端口是8066,管理连接端口是9066
schema:逻辑数据库
dataNode:节点
dataHost:节点对应的读库写库的地址和连接
balance指的负载均衡类型,目前的取值有4种:
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡
balance="2",所有读操作都随机的在writeHost、readhost上分发。
balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
switchType指的是切换的模式,目前的取值也有4种:
switchType='-1' 表示不自动切换
switchType='1' 默认值,表示自动切换
switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
switchType='3' 基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'
WriteType参数设置:
writeType=“0”, 所有写操作都发送到可用的writeHost上。
writeType=“1”,所有写操作都随机的发送到readHost。
writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
配置完成以后连接 mycat 查询
mysql -uroot -p123456 -h192.168.4.20 -P 8066 -e 'select @@hostname;'
多查询几次,可以看到轮询效果
读写分离了,mycat 单点故障, mysql master 单点故障怎么解决 ?
官方推荐高可用方案
+-------------+ +-----------+ +--------------------------+
| keepalived | | +-----+ | | +--------+ +--------+ |
|------------ | | |mycat| | ==> | |mysql(M)|<==>|mysql(M)| |
| +-------+ | | +-----+ | | +--------+ +--------+ |
| |haproxy|=>| ==> | | | MHA或其他多主高可用方案 |
| +-------+ | | +-----+ | |-~-~-~-~-~-~~~~-~-~-~-~-~-|
client --> vip | |高| | | |mycat| | ==> | +--------+ +--------+ |
| |可| | | +-----+ | | |mysql(S)| 从 |mysql(S)| |
| |用| | | | | +--------+ 库 +--------+ |
| +-------+ | | +-----+ | | +--------+ 集 +--------+ |
| |haproxy|=>| ==> | |mycat| | ==> | |mysql(S)| 群 |mysql(S)| |
| +-------+ | | +-----+ | | +--------+ +--------+ |
+-------------+ +-----------+ +--------------------------+
# 安装 haproxy 和 keepalived
yum install haproxy keepalived
haproxy 配置
listen mysql_3306 *:3308
mode tcp
option tcpka
balance leastconn
server mycat_01 192.168.4.15:8066 check inter 3000 rise 1 maxconn 1000 fall 3
server mycat_02 192.168.4.20:8066 check inter 3000 rise 1 maxconn 1000 fall 3
keepalived 配置,vip 配置
global_defs {
router_id mycat
}
vrrp_instance Mycat {
state BACKUP
interface eth0
track_interface {
eth0
}
virtual_router_id 150
priority 200
nopreempt
advert_int 5
authentication {
auth_type PASS
auth_pass test_mycat
}
virtual_ipaddress {
192.168.4.150/24 brd 192.168.4.255 dev eth0 label eth0:1
}
}
day002 搭建 mysql 主从集群
猜你喜欢
转载自blog.csdn.net/weixin_40447206/article/details/81166557
今日推荐
周排行