说明:server1和server2上安装好mysql,做成主从
server1:192.168.0.1
server2:192.168.0.2
一、环境准备
1:安装依赖包
yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
2:安装maxscale,自行下载rpm包
rpm -ivh maxscale-1.4.3-1.centos.7.x86_64.rpm
3:备份maxscale配置文件
cp /etc/maxscale.cnf /etc/maxscale.cnfbak
二、准备MaxScale用的mysql用户(先保证主从同步ok)
在主数据库上为 MaxScale 创建两个用户,用于监控模块和路由模块(192.168.0.%也可以写成MaxScale服务器的ip,192.168.0.10)
1:创建监控账户
mysql> create user maxscalemon@'192.168.0.%' identified by "monitor911218";flush privileges;
mysql> grant replication slave, replication client on *.* to maxscalemon@'192.168.0.%';flush privileges;
2:创建路由用户
mysql> grant ALL PRIVILEGES on *.* to maxscale@'192.168.0.%' Identified by 'maxscale911218';flush privileges;
3:在主数据库上创建一个远程登陆的测试用户(生产环境中,配置在代码文件中使用)
mysql> grant ALL PRIVILEGES on *.* to dgg@'192.168.0.%' Identified by 'dggcale91~@#';flush privileges; #这个用户对所有库和表有所有权限
验证用户:
在MaxScale服务器上验证用户maxscalemon和maxscale以及dgg能登陆主和从库
三、更改MaxScale服务的配置文件
1:说明:[server1],和[server2]是主从,如果还有192.168.0.3是主,192.168.0.4是从,可以有多个在加[server3 server4....]
(根据数据库数量自行增加 server1 server2 server3 server4……)
2:环境准备:
创建配置文件中的目录:
mkdir -p /data/maxscale/data/
mkdir -p /data/maxscale/cache
3:修改配置文件
vim /etc/maxscale.cnf
[maxscale]
threads=auto ##开启线程个数,默认为1.设置为auto会同cpu核数相同
log_info=1 ##
logdir=/tmp/ ###日志位置
datadir=/data/maxscale/data/ #数据位置
cachedir=/data/maxscale/cache/ #缓存位置
piddir=/data/maxscale/ #pid文件位置
connection_timeout=300 #连接超时
max_connections=1000 #最大连接数
[server1]
type=server
address=192.168.0.1 ##
port=4006 #数据库的端口
protocol=MySQLBackend
#serversize=10 #权重设置
[server2]
type=server
address=192.168.0.2 ##
port=4006 #数据库的端口
protocol=MySQLBackend
#serversize=10 #权重设置
[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2 ##
user=maxscalemon ##
passwd=monitor911218 ##
monitor_interval=10000
detect_stale_master=true ##从服务器全部失效后,master不会失效,能正常提供服务---自行添加
#[Read-Only Service]
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2 ##
user=maxscale ##
passwd=maxscale911218 ##
max_slave_connections=100%
[MaxAdmin Service]
type=service
router=cli
#[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=3006 ##maxscaled服务连接的端口
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
port=6603 ##管理端口
四、启动和关闭maxscale服务:
1:启动:maxscale -f /etc/maxscale.cnf
2:关闭:killall maxscale
3:验证服务:netstat -lntp |grep maxscale
五、查看当前服务器状态
maxadmin list servers -pmariadb
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.144.223 | 3312 | 0 | Master, Running
server2 | 192.168.144.224 | 3310 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
# maxadmin list services -pmariadb 查看当前服务连接
Services.
--------------------------+----------------------+--------+---------------
Service Name | Router Module | #Users | Total Sessions
--------------------------+----------------------+--------+---------------
Read-Write Service | readwritesplit | 1 | 788
MaxAdmin Service | cli | 2 | 5
--------------------------+----------------------+--------+---------------
# maxadmin list listeners -pmariadb 查看当前运行端口
Listeners.
---------------------+--------------------+-----------------+-------+--------
Service Name | Protocol Module | Address | Port | State
---------------------+--------------------+-----------------+-------+--------
Read-Write Service | MySQLClient | * | 4006 | Running
MaxAdmin Service | maxscaled | * | 6603 | Running
---------------------+--------------------+-----------------+-------+--------
六、验证读写分离(客户端:在web机器上去连接MaxScale)
使用 Mysql 客户端到连接 MaxScale
mysql -h MaxScale所在的IP -P3306 -udgg -pdggcale91~@#
登陆验证:
select @@hostname;
db2(从)
start transaction;
select @@hostname;
db1(主)
rollback;
select @@hostname;
db2(从)
七、其他配置:
如果想改管理密码要在配置文件里加上
[MaxAdmin]
type=service
router=cli
user=maxscale
passwd=Mhu87p2D
八、生产环境中的使用
代码配置文件中
数据库用户:dgg
数据库密码:dggcale91~@#
数据库端口使用中间件的端口:3306 #之前使用mysql的端口,现在使用maxscaled服务连接的端口
数据库的ip使用中间件的ip:192.168.0.2 #之前使用mysql的ip,现在使用maxscaled的ip
九、优化配合maxscale服务使用
[root@maxscale local]# vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
[root@maxscale local]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
fs.file-max = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_max_tw_buckets = 20000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_orphans = 262144
使之生效:
sysctl -p
配合自动检查:
vim /mnt/max-chenck.sh
#!/bin/bash
for i in `seq 20`
do
AA=`maxadmin list servers -pmariadb | grep -c Running`
if [ $AA != 3 ];then
maxscale -f /etc/maxscale.cnf
fi
sleep 3
done
再加上任务计划
*/1 * * * * /bin/bash /mnt/max-chenck.sh 2>/dev/null &