标签:修改 proxy eid erp 安装mysql mysl 版本 iptable 服务
在实际的生产环境中,由单台Mysql作为独立的数据库并在上面进行读和写操作是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。因此一般来说,通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。工作原理如下图所示:
基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器接到客户端请求通过判断后转发到后端数据库,有两个代表性程序:
(1)MySQL-Proxy。MySQL-Proxy为MySQL开源项目,通过其自带的lua脚本进行SQL判断,虽然是MySQL官方产品,但是MySQL官方并不建议将MySQL-Proxy用到生产环境。
(2)Amoeba。这个软件致力于MySQL的分布式数据库前端代理层,它主要为应用层访问MySQL时充当SQL路由,并具有负载均衡、高可用性、SQL过滤、读写分离、可路由到相关目标数据库、可并发请求多台数据库。它不支持事务和存储过程。
通过程序代码实现MySQL读写分离是一个不错的选择,但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的Java应用,一般会考虑使用代理层来实现。
主机 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
Master | CentOS7.4 x86_64 | 192.168.113.164 | mysql-5.7.17.tar.gz |
Slave1 | CentOS7.4 x86_64 | 192.168.113.171 | mysql-5.7.17.tar.gz |
Slave2 | CentOS7.4 x86_64 | 192.168.113.172 | mysql-5.7.17.tar.gz |
Amoeba | CentOS7.4 x86_64 | 192.168.113.173 | jdk-6u14-linux-x64.bin / amoeba-mysql-binary-2.2.0.tar.gz |
客户端 | Redhat6.5 x86_64 | 192.168.113.174 |
yum -y install ntp
vim /etc/ntp.conf #添加如下两行
server 127.127.113.0 #本地是时钟源
fudge 127.127.113.0 stratum 8
service ntpd start
yum install ntp ntpdate -y
service ntpd start
/usr/sbin/ntpdate 192.168.113
systemctl stop firewalld.service
setenforce 0
安装详细步骤参考Linux平台上安装MySQL服务之新版本mysql5.7的安装。
vim /etc/my.cnf
server-id = 11 //修改
log-bin=master-bin //主服务器日志文件
log-slave-updates=true //从服务器更新二进制日志
systemctl restrat mysqld.service
[root@promote ~]# mysql -uroot -pabc123
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘myslave‘@‘192.168.113.%‘ IDENTIFIED BY ‘123456‘;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 604 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
其中File列显示日志名,Position列显示偏移量,这两个值在后面配置从服务器会用到。Slave应从该点在Master上进行新的更新。
vim /etc/my.cnf
server-id = 22 //修改
relay-log=relay-log-bin //从主服务器上同步日志文件记录到本地//
relay-log-index=slave-relay-bin.index //定义relay-log的位置和名称//
这里要注意server-id不能与主服务器相同,每台服务器的server-id都不能相同。
systemctl restrat mysqld.service
[root@promote ~]# mysql -uroot -pabc123
mysql> change master to
-> master_host=‘192.168.113.164‘,
-> master_user=‘myslave‘,
-> master_password=‘123456‘,
-> master_log_file=‘master-bin.000001‘,
-> master_log_pos=604;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
按照主服务器结果更改下面命令中master_log_file和master_log_pos的参数。
mysql> start slave;
mysql> create database dba;
Query OK, 1 row affected (0.11 sec)
因为Amoeba是基于jdk1.5开发的,所以官方推荐使用jdk1.5或1.6版本,高版本不建议使用。
[root@localhost ~]# cp jdk-6u14-linux-x64.bin /usr/local/
[root@localhost ~]# cd /usr/local
[root@localhost local]# ./jdk-6u14-linux-x64.bin //安装jdk ,根据提示按enter键完成即可
[root@localhost local]# mv jdk1.6.0_14/ /usr/local/jdk1.6
在/etc/profile文件配置Java环境变量:
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
生效环境变量。
source /etc/profile
查看Java环境是否配置成功。
[root@localhost local]# java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
[root@localhost ~]# mkdir /usr/local/amoeba/
[root@localhost ~]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ //解压amoeba软件至 /usr/local/amoeba/目录下
[root@localhost ~]# chmod -R 755 /usr/local/amoeba/ //设置权限
[root@localhost ~]# /usr/local/amoeba/bin/amoeba
amoeba start|stop //显示此内容说明Amoeba安装成功
grant all on *.* to test@‘192.168.113.%‘ identified by ‘123.com‘;
[root@localhost ~]# cd /usr/local/amoeba/
[root@localhost amoeba]# vim conf/dbServers.xml
abstractServer配置:
---23修改----
<property name="schema">mysql</property>
--26-29--去掉注释--
<property name="user">test</property>
<property name="password">123.com</property>
主从数据库定义:
-----42-主服务器主机名和地址---
<dbServer name="master" parent="abstractServer">
<property name="ipAddress">192.168.113.164</property>
--52-从服务器主机名----
<dbServer name="slave1" parent="abstractServer">
--55-从服务器地址----
<property name="ipAddress">192.168.113.171</property>
<dbServer name="slaves" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
--末尾--
<property name="poolNames">slave1,slave2</property>
</poolConfig>
amoeba连接验证配置:
[root@localhost ~]# cd /usr/local/amoeba/
[root@localhost amoeba]# vim conf/amoeba.xml
----30行-----
<property name="user">amoeba</property>
----32行---------
<property name="password">123456</property>
---117-去掉注释---
<property name="defaultPool">master</property>
<property name="writePool">master</property>
<property name="readPool">slaves</property>
[root@localhost amoeba]# /usr/local/amoeba/bin/amoeba start&
[1] 3257
[root@localhost amoeba]# log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
2018-07-16 14:52:37,783 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.2.0
log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
2018-07-16 14:52:38,023 INFO net.ServerableConnectionManager - Amoeba for Mysql listening on 0.0.0.0/0.0.0.0:8066.
2018-07-16 14:52:38,026 INFO net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:9337.
^C
[root@localhost amoeba]# netstat -ntap | grep java //查看java端口是否启动
tcp6 0 0 127.0.0.1:9337 :::* LISTEN 3257/java
tcp6 0 0 :::8066 :::* LISTEN 3257/java
tcp6 0 0 192.168.113.173:57378 192.168.113.171:3306 ESTABLISHED 3257/java
tcp6 0 0 192.168.113.173:35876 192.168.113.172:3306 ESTABLISHED 3257/java
tcp6 0 0 192.168.113.173:58654 192.168.113.164:3306 ESTABLISHED 3257/java
yum -y install mysql
可以通过代理访问MySQL:
[root@RedHat6-1 ~]# mysql -u amoeba -p123456 -h 192.168.113.173 -P8066
mysql>
mysql> use dba;
Database changed
mysql> create table zang (id int(10),name varchar(10),address varchar(20));
Query OK, 0 rows affected (0.01 sec)
分别在两台从服务器上关闭slave功能:
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
然后在主服务器上插入区别语句:
mysql> insert into zang values(‘1‘,‘zhang‘,‘this_is_master‘);
Query OK, 1 row affected (0.00 sec)
slave1:
mysql> use dba;
Database changed
mysql> insert into zang values(‘2‘,‘zhang‘,‘this_is_slave1‘);
Query OK, 1 row affected (0.35 sec)
slave2:
mysql> use dba;
Database changed
mysql> insert into zang values(‘3‘,‘zhang‘,‘this_is_slave2‘);
Query OK, 1 row affected (0.01 sec)
在Client主机上第一次查询的结果如下:
第二次查询的结果如下:
第三次查询的结果如下:
在Client主机上插入一条语句:
mysql> insert into zang values(‘5‘,‘zhang‘,‘write_test‘);
Query OK, 1 row affected (0.02 sec)
但在Client上查询不到,最终只有在Master上才能查到这条语句内容,说明写操作在Master服务器上。
由此验证,MySQL实现了读写分离,目前所有写操作全部在Master主服务器上,避免数据的不同步;所有的读操作都分摊给slave从服务器,分担数据库的压力。
标签:修改 proxy eid erp 安装mysql mysl 版本 iptable 服务
原文地址:http://blog.51cto.com/11134648/2145027