读写分离器,把所有的读都路由到从节点上,所有的写都路由的主节点上
工具:mysql-proxy()
atlas
mysql-router
maxscale ;功能比较强大,配置麻烦
这里以proxysql为列
相关网站:
https://github.com/sysown/proxysql/releases
配置:
服务器:主服务器:192.168.1.101
从节点: 192.168.1.103
从节点:192.168.1.105
路由: 192.168.1.106 (一般路由有两个网卡,一个公网,一个内部网络用于与各节点通信)
1 先配置主从复制
在安装路由器的节点上,下载proxysql包-1.3.6
配置文件:
datadir="/var/lib/proxysql" 它自己的状态数据目录
admin_variables=
{ admin_credentials="admin:admin"
mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
}
mysql_variables=
{
threads=4 几个线程,一般看cpu核心数
max_connections=2048 最大并发数
default_query_delay=0
default_query_timeout=36000000
have_compress=true
poll_timeout=2000
interfaces="0.0.0.0:3306;/tmp/mysql.sock"
#default_schema="information_schema" 默认数据库
default_schema=“mydb”
stacksize=1048576
server_version="5.5.30"
connect_timeout_server=3000
monitor_history=600000
monitor_connect_interval=60000
monitor_ping_interval=10000
monitor_read_only_interval=1500
monitor_read_only_timeout=500
ping_interval_server=120000
ping_timeout_server=500
commands_stats=true
sessions_sort=true
connect_retries_on_failure=10
}
mysql_servers = 开始记录服务器,每个{}记录一台服务器
(
{
address = "172.18.0.67"
port = 3306
hostgroup = 0 组
status=“ONLINE”
weight = 1 权重
compression = 0
max_connextions=200
default: 0
}
{
address = "172.18.0.68"
port = 3306
hostgroup = 1 组
status=“ONLINE”
weight = 1 权重
compression = 0
max_connextions=200
default: 0
}
{
address = "172.18.0.69"
port = 3306
hostgroup = 1 组
status=“ONLINE”
weight = 1 权重
compression = 0
max_connextions=200
default: 0
}
)
mysql_users: 定义用户
在主节点上 授权一个用户账号: > GRANT ALL ON *.* TO ‘myadmin’@’172.16.0.%’ IDENTIFIED BY ‘mypass’;
> FIUSH PRIVILEGES
mysql_users:
(
{
username = "myadmin"
password = "mypass"
default_hostgroup = 0 连接到那个组上
max_connections=1000
default_schema="mydb" 默认用那个数据库
active = 1
}
)
mysql_query_rules: 定义规则
scheduler= 调度器
mysql_replication_hostgroups= 定义那是读组那是写组
(
{
writer_hostgroup=0 写组
reader_hostgroup=1 读组
}
)
启动服务:service proxysql start
通过路由器端连接mysql
#mysql -umyadmin -h172.16.0.6 -pmypass
>
监听3306端口:
#tcpdump -I etn33 -nn tcp port 3306
proxysql自己的管理接口: 支持运行时修改
#mysql -uadmin -padmin -hlocalhost -S ….. .sock
> SHOW DATABASES; 自己的管理库,
第五节: relocation
对于主从复制 ,万一主节点宕机,这么办
1对主节点做冗余
2 提升一个从节点为主节点
MHA服务:主节点高可用 MHA 就是一台主机,负责监控多个主机 必须基于ssh互相通信,
配置:
主从节点都需要配置二进制日志和中继日志
主节点:
[mysqld]
innodb-file_per_table=ON
skip_name_resolve=ON
server_id=1
log-bin=master-log
relay_log=relay-log
重启服务
从节点:
[mysqld]
innodb-file_per_table=ON
skip_name_resolve=ON
server_id=7
log-bin=master-log
relay_log=relay-log
relay_log_purge=0
read_only=1
重启服务: systemctl restart mariadb.service
定义ssh
# ssh-keygen -t rsa -p ‘ ’
#ssh-copy-id -I .ssh/id_rsa.pub root@172.16.0.67 (先复制给本机)
#这个文件保存在 ~/.ssh/authorized_keys
复制到另外节点:
scp -p .ssh/aurhorized_key .ssh/id_rsa.pub .ssh/id_rsa root@172.16.0.68:/root/.ssh/
四个节点都需要复制
#ssh root@172.16.0.27 ‘ifconfig’ 测试
安装MHA 两个包都需要装,而其他节点安装node就可以
https://glthub.com
下载包 mha4mysql-manager-0.56 mha4mysql-node-0.56
yum install mha4mysql-*.rpm
l另外节点安装mha4mysql-node-0.56
初始化MHA
编辑配置文件:
mkdir /etc/masterha
vim /etc/masterha/app1.cnf
[server default] 默认配置
user= mhaadmin
>SHOW MASTER STATUS;
账号可以在主节点上创建一个: GRANT ALL ON *.* TO ‘mhaadmin’ @’172.16.0.%’ IDENTIFIED BY ‘mhapass’
>FIUSH PRIVILEGES;
password= mhapass
manager_workdir=/data/materha/app1
manage_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
repl_user=repluser
repl_password=replpass
ping_interval=1
[server1]
hostname=172.16.0.67
candidate_master=1
[server2]
hostname=172.16.0.68
candidate_master=1
[server3]
hostname=172.16.0.69
candidate_master=1
检查管理mysql复制集群的连接配置参数是否ok 是否可以连接各节点
#masterha_check_ssh –conf=/etc/masterha/app1.cnf 检查ssh
检查节点集群, 最后一行 Heath is ok (报从节点没有用户账号)
#masterha_check_repl –conf=/etc/masterha/app1.cnf
在主节点上:创建用户复制到从节点
> SHOW MASTER STATUS;
> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO ‘repladmin’@’172.16.0.%’ IDENTIFIED BY ‘replpasswd’ ;
> FLUSH PRIVIEGES;
启动:
#nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /data/masterha/app1/manger.log & (后台)
启动成功后 课通过命令查看master节点状态
#masterha_check_status --conf=/etc/masterha/app1.cnf
手动停止MHA
#masterha_stop --conf=/etc/masterha/app1.cnf
测试故障转移
1 直接把主节点kill掉
killall -9 mysqld mysqld_safe
在MHA 看日志是否切换
#less /data/masterha/app1/manage.log
修复之前的主节点,转化为一个从节点
1 修改配置文件
2 备份恢复
3 连接主节点