centos7.6 搭建MYSQL5.7.24 + MYCAT + MYCAT-WEB实现主从复制读写分离

一 准备工作

1. 系统环境

192.168.1.11 master
192.168.1.12 slave

在此配置两台服务器

master应用: mysql数据库主库 | mycat | mycat-web | zookeeper
slave 应用 : mysql数据库从库

2. 配置系统使用国内阿里云镜像
yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
3. 配置主机名

192.168.1.11上执行

hostnamectl set-hostname master

192.168.1.12上执行

hostnamectl set-hostname slave

二 安装mysql5.7.24

以下同时在master和slave上执行

1、下载mysql5.7.24

wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-boost-5.7.24.tar.gz

2、安装依赖包

yum install gcc gcc-c++ cmake ncurses-devel bison-devel ncurses-devel perl zlib-devel autoconf automake libxml-devel libmcrypt

3、源码包编译

cmake \
 	-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 	-DMYSQL_DATADIR=/data/mysql \
	-DSYSCONFDIR=/usr/local/mysql/etc \
 	-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
 	-DDEFAULT_CHARSET=utf8 \
 	-DEXTRA_CHARSETS=all \
 	-DDEFAULT_COLLATION=utf8_general_ci \
	-DWITH_BOOST=boost \
 	-DWITH_MYISAM_STORAGE_ENGINE=1 \
 	-DWITH_INNOBASE_STORAGE_ENGINE=1 \
 	-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
 	-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
 	-DWITH_PARTITION_STORAGE_ENGINE=1 \
 	-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
 	-DWITH_MEMORY_STORAGE_ENGINE=1 \
 	-DENABLED_LOCAL_INFILE=1 \
 	-DMYSQL_TCP_PORT=3308 

PREFIX:安装目录
DATADIR:数据目录
SYSCONFDIR:配置文件目录
UNIX_ADDR:指定sock位置
DEFAULT_CHARSET:默认字符集
DEFAULT_COLLATION:默认编码
EXTRA_CHARSETS:额外编码
TCP_PORT:端口
其他是安装一些数据库引擎

4、编译安装

make && make install

5、添加mysql用户和组

groupadd mysql && useradd -g mysql mysql

6、配置数据库存储目录及权限

mkdir /data/mysql  && chown -R mysql. /usr/local/mysql && chown -R mysql. /data/mysql

7、配置mysql主配置文件

vim /etc/my.cnf

[client]
port = 3308
socket=/data/mysql/mysql.sock

[mysqld]
user = mysql
port = 3308
datadir=/data/mysql
socket=/data/mysql/mysql.sock
pid-file=/data/mysql/mysqld.pid
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
pid-file=/data/mysql/mysqld.pid
log-error = /data/mysql/mysqld.log

log-bin=tanrui-bin
server-id=111	#注意这个地方每台服务器要不同
binlog-ignore-db=information_schema	#二进制日志忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=mycatweb
log-slave-updates
slave-net-timeout=60	#从库连接超时设置

[mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid

8、初始化数据库(这一步要保证/etc/my.cnf存在)

/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

–initialize-insecure 表示初始化root用户为空密码
–initialize 表示初始化root用户为随机密码,密码在日志里面查看,在此的日志目录为/data/mysql/mysqld.log

9、配置启动服务

chown mysql.mysql /etc/my.cnf && cp /usr/local/mysql/support-files/mysql.server /etc/init.d/ 

10、启动测试

service mysql.server start 

11、开机启动

chkconfig mysql.server on

12、也可以使用命令行启动方式,效果是相同的

nohup /usr/local/mysql/bin/mysqld --defaults-extra-file=/usr/local/mysql/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysqld.log --pid-file=/data/mysql/mysqld.pid --socket=/data/mysql/mysql.sock --port=3308 &

13、测试mysql是否运行正常及登录数据库

/usr/local/mysql/bin/mysql -S /data/mysql/mysql.sock

14、授权远程登录

grant all privileges on *.* to root@'%' identified by '123456';flush privileges;

15、配置环境变量

echo -e "PATH=$PATH:${JAVA_HOME}/bin:/usr/local/mysql/bin:/usr/local/mysql/lib\nexport PATH" >> /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

16、验证mysql -V

17、到此mysql5.7.24部署完成,主从库安装都是一样的,测试远程连接数据库操作,在此不详述了,下面开始配置主从

三 mysql主从配置

在master上如下操作

1、登录master库

mysql -S /data/mysql/mysql.sock

2、添加一个用户用作主从复制用

grant replication slave on *.* to 'repl'@'192.168.1.%' identified by 'repl';

3、show master status;记住File和Position字段的值,要在slave用到centos7.6 搭建MYSQL5.7.24 + MYCAT + MYCAT-WEB实现主从复制读写分离_第1张图片

在slave上如下操作

1、登录从库

mysql -S /data/mysql/mysql.sock

2、配置主从连接

change master to master_host='192.168.1.11',master_port=3308,master_user='repl',master_password='repl’,master_log_file='tanrui-bin.000006',master_log_pos=154;

3、启动主从复制

start slave;

4、验证主从:

show slave status\G
	Slave_IO_Running: Yes
	Slave_SQL_Running: Yes
	以上两个参数都为Yes即成功

如果是配置有数据的主从就需要先备份主数据库的文件,恢复到从库,再执行以上步骤。

四 安装mycat mycat-web zookeeper

下载解压
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
wget http://dl.mycat.io/zookeeper-3.4.6.tar.gz

tar zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
tar zxvf zookeeper-3.4.6.tar.gz && mv zookeeper-3.4.6 /usr/local/zookeeper
tar zxvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz -C /usr/local/
配置mycat

准备数据:

新建3个数据库xing1、xing2、xing3,并都在数据库下面创建1张测试表做测试用

CREATE TABLE `test` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

所有表都插入两条数据,区分主从库数据内容

INSERT INTO `TRDB1`.`test` (`id`, `name`) VALUES ('1', 'xing');
INSERT INTO `TRDB1`.`test` (`id`, `name`) VALUES ('2', @@hostname)

2、配置读写分离

cd /usr/local/mycat/conf

vim schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="xing1" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'></schema>
        <schema name="xing2" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn2'></schema>
        <schema name="xing3" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn3'></schema>

        <dataNode name="dn1" dataHost="db1" database="xing1" />
        <dataNode name="dn2" dataHost="db1" database="xing2" />
        <dataNode name="dn3" dataHost="db1" database="xing3" />

        <dataHost name="db1" maxCon="1000" minCon="5" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
                <heartbeat>show slave status</heartbeat>
                <writeHost host="hostMaster1" url="192.168.1.11:3308" user="root" password="123456">
                </writeHost>
                <writeHost host="hostMaster2" url="192.168.1.12:3308" user="root" password="123456">
                </writeHost>
        </dataHost>

</mycat:schema>
schema:逻辑库标签
	--name:逻辑库名称
	--checkSQLschema:是否开启namespace,开启后SQL语句可以在前面加上逻辑库的名字.表名的方式。默认关闭
	--sqlMaxLimit:查询语句如未带limit则在后面加limit 参数
	--dataNode:逻辑库需要访问的数据节点
dataNode:数据节点标签
	--name:数据节点名称
	--dataHost:对应的物理存储节点名称
	--database:对应的实际物理节点上的数据库名称
dataHost:物理节点标签
	--name:物理节点名称
	--maxCon:最大并发连接数
	--minCon:最小初始连接数
	--balance:读负载均衡模式。
		0:不负载均衡,读写都在第一个writehost上
		1:负载均衡到除了写入那台节点的其他所有节点
		2:所有节点负载均衡
		3:只负载均衡到readhost,writehost不负责读操作。
	--writeType:写操作切换
		0:写操作发送到第一个writeHost,第一个挂了切到第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties. 
		1:所有写操作都随机地发送到配置的writeHost,1.5以后废弃不推荐。
	--dbType:数据库类型,有mysql、oracle、MongoDB等
	--dbDriver:数据库驱动连接
	--switchType:切换模式
		0:不自动切换
		1:自动切换
		2:基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status 
		3:基于MySQLgalary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’
	--slaveThreshold:主从延迟毫秒数,如大于这个数则不参与负载均衡
	--heartbeat:心跳检查命令
writeHost:配置物理节点的真是连接信息
	--host:名称,可以自定义
	--url:真是数据库的连接地址,为IP地址或者域名
	--user:真是数据库的连接用户名
	--password:密码
readHost:与writeHost是一样的
		
	

3、配置系统参数

vim server.xml

<!-- system标签下修改端口号 -->
<property name="serverPort">33666</property>
<property name="managerPort">33667</property>

<!-- 开启防火墙配置 -->
        <firewall>
          <whitehost>
            <host host="192.168.1.*" user="user,user_read"/></whitehost>	<!-- 配置白名单 -->
          <blacklist check="false">
            <property name="dropTableAllow">false</property>
          </blacklist>
        </firewall>
<!-- 添加用户,权限为之前在schema里面配置的host标签下user用户相同,在此可以调,但在此可以缩小不能调大 -->
        <user defaultAccount="true" name="user">
                <property name="password">112233</property>
                <property name="schemas">xing1,xing2,xing3</property>
        </user>
<!-- 添加只读用户-->
        <user name="user_read">
                <property name="password">112233</property>
                <property name="schemas">xing1,xing2,xing3</property>
                <property name="readOnly">true</property>
        </user>

4、添加启动用户和授权

useradd mycat && chown -R mycat.mycat /usr/local/mycat

5、切换用户和启动

su mycat
/usr/local/mycat/bin/mycat start

6、检查日志查看有没有报错

tail -f /usr/local/mycat/logs/mycat.log

7、测试

数据节点:mysql -h 192.168.1.11 -P 33666 -uuser -p112233 -e "show databases;"
管理节点:mysql -h 192.168.1.11 -P 33667 -uuser -p112233 -e "show @@help;"

需要查看更详细日志请调整日志到DEBUG级别

vim /usr/local/mycat/conf/log4j2.xml

<asyncRoot level="info" includeLocation="true">改为<asyncRoot level="debug" includeLocation="true">
配置zookeeper

以下只在master上配置

1、添加数据目录与日志目录

cd /usr/local/zookeeper
mkdir {data,logs} && cd conf

2、配置zookeeper配置文件

cp zoo_sample.cfg zoo.cfg
echo -e "dataDir=/usr/local/zookeeper/data\ndataLogDir=/usr/local/zookeeper/logs" >> zoo.cfg

4、启动zookeeper

/usr/local/zookeeper/bin/zkServer.sh start

5、检测与配置环境变量

netstat -tunlp | grep 2181
echo -e "PATH=$PATH:/usr/local/zookeeper/bin\nexport PATH" >> /etc/profile.d/zoo.sh
source /etc/profile.d/zoo.sh

6、登录测试

zkCli.sh -server 127.0.0.1:2181
配置mycat-web

以下只在master上配置

1、创建mycatweb数据库用于存放mycat-web监控收集的数据

mysql -h 192.168.1.11 -P 3308 -uroot -p123456 -e "CREATE database mycatweb;"

2、导入初始数据结构

mysql -h 192.168.1.11 -P 3308 -uroot -p123456 mycatweb < /usr/local/mycat-web/mycat-web/WEB-INF/db/mycat-web.sql

3、添加mycat-web连接数据库的用户mycat和授权

mysql -h 192.168.1.11 -P 3308 -uroot -p123456 -e "grant all privileges on mycatweb.* to mycat@'192.168.1.%' identified by 'mycat123';flush privileges;"

4、配置mycat属性

vim /usr/local/mycat-web/mycat-web/WEB-INF/classes/mycat.properties
zookeeper=192.168.1.11:2181
sqlonline.server=192.168.1.11
sqlonline.user=mycat
sqlonline.passwd=abc123

5、配置mycat数据库连接

vim /usr/local/mycat-web/mycat-web/WEB-INF/classes/jdbc.properties
jdbc.maxActive=50
jdbc.initialSize=20
jdbc.maxWait=300000
jdbc.minIdle=20
jdbc.url=jdbc:mysql://192.168.1.11:3308/mycatweb
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=mycat
jdbc.password=mycat123

6、修改mycat端口和访问目录

vim /usr/local/mycat-web/etc/jetty.xml

<!-- 修改URI -->
<Set name="contextPath">/mycat</Set>改为<Set name="contextPath">/</Set>

<!-- 修改端口 -->
<Set name="port"><SystemProperty name="jetty.port" default="8082"/></Set> 改为<Set name="port"><SystemProperty name="jetty.port" default="8888"/></Set>

7、如果有需要可修改mycat-web jmx远程端口号

vim /usr/local/mycat-web/start.sh

-Dcom.sun.management.jmxremote.port=8999 ## 改为你想要的端口,在下面添加VM管理的时候要用到,在此我不修改。##

8、后台启动

    cd /usr/local/mycat-web/ && start.sh &

9、测试,浏览器打开http://192.168.1.11:8888

10、添加监控参数

1)服务管理-新增
centos7.6 搭建MYSQL5.7.24 + MYCAT + MYCAT-WEB实现主从复制读写分离_第2张图片
xing2和xing3库一样的添加
用户名:在前面mycat配置server.xml配置的用户
密码:在前面mycat配置server.xml配置的用户密码

2)VM管理-新增
centos7.6 搭建MYSQL5.7.24 + MYCAT + MYCAT-WEB实现主从复制读写分离_第3张图片
端口:上面start.sh里面你修改的端口,默认8999
用户名:在mycat-web里面配置mycat.properties的用户
密码:在mycat-web里面配置mycat.properties用户的密码

五 至此配置全部完成,可以使用mycat-web监控mycat了。

有很多图片报表和曲线统计等,观赏性较强。如下示例

centos7.6 搭建MYSQL5.7.24 + MYCAT + MYCAT-WEB实现主从复制读写分离_第4张图片

centos7.6 搭建MYSQL5.7.24 + MYCAT + MYCAT-WEB实现主从复制读写分离_第5张图片

centos7.6 搭建MYSQL5.7.24 + MYCAT + MYCAT-WEB实现主从复制读写分离_第6张图片

你可能感兴趣的:(数据库)