mysql の読み取りと書き込みの分離 (maxscale)

1. 環境アーキテクチャ

  • 3 つのサーバーが必要です。
  • 192.168.2.10(マスター)
  • 192.168.2.20(スレーブ)
  • 192.168.2.30(最大スケール)

2. mysql マスター/スレーブ同期をデプロイする

3. maxscale サービスをデプロイする

  • MaxScale ミドルウェア ソフトウェア
  • MySQL の兄弟会社である MariaDB によって開発されました。
  • ダウンロードアドレス: https:
    //downloads.mariadb.com/MaxScale/

3.1. maxscale のインストール

##下载软件包
[root@localhost ~]# wget https://downloads.mariadb.com/MaxScale/2.1.2/yum/centos/7/x86_64/maxscale-2.1.2-1.centos.7.x86_64.rpm
## 安装软件
[root@localhost ~]# yum -y install maxscale-2.1.2-1.centos.7.x86_64.rpm

3.2. 設定ファイルの変更

##备份配置文件
[root@localhost ~]# cp -r /etc/maxscale.cnf /etc/maxscale.cnf.bak
[root@localhost ~]# vim /etc/maxscale.cnf
[maxscale]
threads=auto     ----定义线程数,可以根据服务器性能填多少,或者选择auto,auto会根据本身服务器CPU核数来自动创建。
//下面内容定义mysql信息。
[server1]
type=server       --类型
address=192.168.2.10     ---ip地址
port=3306                ---端口号
protocol=MySQLBackend    ---协议

[server2]
type=server
address=192.168.2.20
port=3306
protocol=MySQLBackend

//定义代理服务器监视的服务器信息。
[MySQL Monitor]
type=monitor             ---类型为监视
module=mysqlmon          ---定义模块
servers=server1,server2    ----指定需要监视的服务器
user=maxscale                ---被监视的服务器用户名
passwd=1234               ---被监视的服务器密码
monitor_interval=10000    ---用户maxscalemon连接server1和server2的频率,单位是毫秒。
//注意这个用户名和密码等一下配置完需要在主库创建出来。
//下面是定义只读服务,而我这边是需要定义读写分离服务。
#[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=myuser        路由用户
passwd=mypwd       路由密码
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=4006
//定义管理服务器的监听端口等信息
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
prot=4016
socket=default

4.承認されたユーザーを作成する

//在主库创建监控用户
mysql> grant replication slave,replication client on *.* to 'maxscale'@'%' identified by '1234';
//创建路由用户
mysql> grant select on mysql.* to 'maxscale1'@'%' identified by '1234';

5. プロキシ サービスを開始する

//启动服务
[root@localhost ~]# maxscale -f /etc/maxscale.cnf
//查看进程是否存在
[root@localhost ~]# ps -C maxscale
   PID TTY          TIME CMD
  2359 ?        00:00:00 maxscale
//查看代理服务端口号是否启动
[root@localhost ~]# netstat -ntlp | grep maxscale
tcp6       0      0 :::4016                 :::*                    LISTEN      2359/maxscale
tcp6       0      0 :::4006                 :::*                    LISTEN      2359/maxscale

6. テスト構成

6.1. 監視ステータスの表示

管理用户密码默认的
[root@localhost ~]# maxadmin -uadmin -pmariadb -P4016
MaxScale> list servers     --显示监控列表
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.2.10    |  3306 |           0 | Master, Running
server2            | 192.168.2.20    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
//假如监控状态角色不对,看一下监控的授权用户是否和maxscale配置文件一致。

6.2. 書き込みがマスター ライブラリにあるかどうかを確認し、スレーブ ライブラリにあるかどうかを確認する

//在从库db1库t1表插入数据,这样主库和从库数据不一致
mysql> use db1;
mysql> create table t1(
    -> id int not null,name char(10) not null);
mysql> insert into t1 values('1','tom');
mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
//在主库查看这个表信息。
mysql> use db1;
Database changed
mysql> show tables;
Empty set (0.00 sec)      ----可以看的出来主库没有表格
//在客户端登录代理服务器查看db1.t1;
[root@localhost ~]# mysql -h 192.168.2.30 -P 4006 -utom -p1234
mysql> select * from db1.t1;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
1 row in set (0.00 sec)
可以看的出来读是在从库提取的。

おすすめ

転載: blog.csdn.net/weixin_45625174/article/details/129081919