Mysql主从复制的主要目的:
分担数据库的读负载
为什么读写分离:
只能在主库上写
读在从裤上完成
读在多个从服务器上进行,如何分配读操作,所以需要读的负载均衡
读写分离:
【1.程序实现】
【优点】: 由开发人员决定在什么库上执行,比较灵活。
程序直接连接数据库,所以性能损耗比较小
【缺点】: 增加工作量,使程序代码更复杂
人为控制,比较容易出错误
【2.使用中间件】
【mysql-proxy】:可以实现读写分离和从数据库的读负载均衡,不过稳定性较差,不推荐使用
【maxScale】:
【优点】: 根据查询语法的分析,自动完成读写分离(存储过程除外)
对程序透明,已有程序不需要做任何更改
【缺点】: 增加了中间层,所以对查询效率有损耗
对需要实时性高的查询语句,无法自动在主库执行
读写分离:解决的是如何在复制集群中主从库上,执行不同的sql语句
读负载均衡:具有相同角色的数据库如何分配分担读的请求
【maxSccale】:
authentication:认证插件
protocal:协议插件(mysql客户端协议插件|mysql协议端)
router:路由插件
【readconnroute】:实现多台从服务器读的负载均衡
【readwritesplit】:实现读写分离
monitor:监控插件。对数据库的监控
filter&logging:日志和过滤插件
【安装maxSccale】:
【1.下载安装包】:
官方下载地址:
https://downloads.mariadb.com/MaxScale/
选择版本:
低版本的直接可运行安装
https://downloads.mariadb.com/MaxScale/1.4.4/centos/6Server/x86_64/maxscale-1.4.4-1.centos.6.x86_64.rpm
-------------------------------------------------------------------------------------------------------------------
安装高版本的坑
#https://downloads.mariadb.com/MaxScale/2.1.8/rhel/7/x86_64/maxscale-2.1.8-1.rhel.7.x86_64.rpm
[root@localhost ~]# rpm -ivh maxscale-2.1.8-1.rhel.7.x86_64.rpm
warning: maxscale-2.1.8-1.rhel.7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 8167ee24: NOKEY
error: Failed dependencies:
libc.so.6(GLIBC_2.14)(64bit) is needed by maxscale-2.1.8-1.x86_64
liblzma.so.5()(64bit) is needed by maxscale-2.1.8-1.x86_64
liblzma.so.5(XZ_5.0)(64bit) is needed by maxscale-2.1.8-1.x86_64
yum list glibc*
glibc.i686 2.12-1.209.el6_9.2 @updates
glibc.x86_64 2.12-1.209.el6_9.2 @updates
glibc-common.x86_64 2.12-1.209.el6_9.2 @updates
glibc-devel.x86_64 2.12-1.209.el6_9.2 @updates
glibc-headers.x86_64 2.12-1.209.el6_9.2 @updates
glibc-static.x86_64 2.12-1.209.el6_9.2 @updates
glibc-utils.x86_64 2.12-1.209.el6_9.2 @updates
Available Packages
glibc-devel.i686 2.12-1.209.el6_9.2 updates
glibc-static.i686 2.12-1.209.el6_9.2
发现现有的glicb库都是2.12版本,安装程序需要2.14版本,升级glibc
【升级glibc至2.14】:
【1.下载和安装glibc2.14】:
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
tar -xzvf glibc-2.14.tar.gz
cd glibc-2.14
mkdir build
cd build
../configure --prefix=/opt/glibc-2.14
make && make install
【2.创建软链接】
1、删除原来软链
rm -rf /lib64/libc.so.6 //谨慎操作后不要乱动
【3.解决补救问题】
LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
【4.创建新软链接】:
ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
【5.查看当前新的glibc版本库】
strings /lib64/libc.so.6 |grep GLIBC_
-------------------------------------------------------------------------------------------------------------------
【2.安装支持的软件库】:
yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 -y
【3.安装maxSccale】:
rpm -ivh maxscale-1.4.4-1.centos.6.x86_64.rpm
warning: maxscale-1.4.4-1.centos.6.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 8167ee24: NOKEY
Preparing... ########################################### [100%]
1:maxscale ########################################### [100%]
【4.maxscale命令】:
maxadmin:
maxkeys:
maxscale:
maxbinlogcheck:
maxpasswd
【5.主数据库上建立监控模块使用账号】:
select user,host from mysql.user;
CREATE USER 'scale_mon'@'192.168.164.%' IDENTIFIED BY '112358';
grant replication slave,replication client on *.* to scale_mon@'192.168.164.%';
【5.主数据库上建立路由模块使用账号】:需要读取mysql的用户信息,所以需要赋给mysql库的信息
select user,host from mysql.user;
CREATE USER 'maxscale'@'192.168.164.%' IDENTIFIED BY '112358';
grant select on mysql.* to maxscale@'192.168.164.%';
【7.安装maxscale后在/etc目录下会自动创建配置文件】:
cd /etc
vim maxscale.cnf
【8.编辑配置文件】:
[maxscale]
threads=4 #进程数量,8就差不多了,虚拟机环境,给个4就可以
-----------------------------------------
[server1] #从服务器的配置
type=server
address=192.168.164.135
port=3306
protocol=MySQLBackend
-----------------------------------------
[server2] #从服务器的配置
type=server
address=192.168.164.136
port=3306
protocol=MySQLBackend
-----------------------------------------
[server3] #主服务器的配置
type=server
address=192.168.164.137
port=3306
protocol=MySQLBackend
-----------------------------------------
[MySQL Monitor] #监控模块
type=monitor
module=mysqlmon
servers=server1,server2,server3 #把所有集群中的服务器都填进来
user=scale_mon #监控模块用户名
passwd=112358 #监控模块用户密码
monitor_interval=10000 #监控的时间间隔,ms(毫秒)单位
-----------------------------------------
读写分离模块可以实现读负载,所以这个可以删除,不用配置
#[read-Only Service] #只读模块
#type=service
#router=readconnroute
#servers=server1
#user=maxscale
#passwd=112358
#router_options=slave #是否只在slave集群中执行读的负载均衡,如果想在master上也可以读负载
-----------------------------------------
[Read-Write Service] #读写分离模块
type=service
router=readwritesplit
servers=server1,server2,server3 #把所有集群中的服务器都填进来
user=maxscale #读取mysql的用户信息
passwd=112358
max_slave_connections=100% #最大可用从服务器的数量,百分比
max_slave_replication_lag=60 #当延迟大于多少秒之后,从服务器不参与读写分离的工作中来了,可以把延迟较大的从服务器剔除读负载集群
-----------------------------------------
#[Read-Only Listener] #没有配置只读服务,所以注释掉
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
-----------------------------------------
[Read-Write Listener] #读写分离监听模块
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006 #端口号没有特别需求,改成mysql默认的
【9.启动测试maxscale】:
启动:maxscale --config=/etc/maxscale.cnf
查看:
ps -ef | grep maxscale
[root@localhost etc]# ps -ef | grep maxscale
root 48585 1 0 11:13 ? 00:00:00 maxscale --config=/etc/maxscale.cnf
root 48615 42123 0 11:15 pts/0 00:00:00 grep --color maxscale
netstat -ntelp
[root@localhost etc]# netstat -ntelp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 0 12846 3011/pure-ftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 11709 1894/sshd
tcp 0 0 127.0.0.1:88 0.0.0.0:* LISTEN 0 12611 2924/httpd
tcp 0 0 192.168.164.136:9989 0.0.0.0:* LISTEN 0 256187 33513/mmm_agentd
tcp 0 0 0.0.0.0:4006 0.0.0.0:* LISTEN 0 387196 48585/maxscale
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 501 262916 34765/mysqld
tcp 0 0 0.0.0.0:6603 0.0.0.0:* LISTEN 0 387197 48585/maxscale
查看管理命令
默认的用户名密码
maxadmin --user=admin --password=mariadb
【list servers】 查看运行服务器信息
[root@localhost etc]# maxadmin --user=admin --password=mariadb
MaxScale> lister sev
Command 'lister' not known, type help for a list of available commands
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.164.135 | 3306 | 0 | Slave, Running
server2 | 192.168.164.136 | 3306 | 0 | Slave, Running
server3 | 192.168.164.137 | 3306 | 0 | Master, Running
-------------------+-----------------+-------+-------------+--------------------
【show dbusers "Read-Write Service"】 查看指定模块用户信息
MaxScale> show dbusers "Read-Write Service"
Users table data
Hashtable: 0x1a44a30, size 52
No. of entries: 13
Average chain length: 0.2
Longest chain length: 2
User names: jiankong@%, test123@%, slave_user2@%, zyx123@192.168.164.136, zyx@192.168.164.136, maxscale@192.168.164.%, daili@%, mha@192.168.164.%, scale_mon@192.168.164.%, repl@192.168.164.%, rep@192.168.164.%, mysql.sys@127.0.0.1, slave_user@192.168.164.%