linux上安装maxscale配置mysql的读写分离

说明: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 &

猜你喜欢

转载自blog.csdn.net/zzhlinux911218/article/details/86084585