从节点I/O Thread SQL Thread
主服务器:192.168.68.200
从服务器1:192.168.68.30
从服务器2:192.168.69.105
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y ntp ##安装主服务器时间同步
[root@localhost ~]# vim /etc/ntp.conf
server 127.127.68.0
fudge 127.127.68.0 stratum 8
[root@localhost ~]# systemctl start ntpd
[root@localhost ~]# vim /etc/my.cnf
server-id = 1
log-bin=master-bin
binlog_format=MIXED
log-slave-updates=true
[root@localhost ~]# systemctl restart mysqld.service
[root@localhost ~]# mysql -u root -p123123 ##进入数据库
mysql> grant replication slave on *.* to 'myslave'@'192.168.68.%' identified by '123456';
mysql> flush privileges;
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 603 | | | |
+-------------------+----------+--------------+------------------+-------------------+
[root@localhost ~]# vim /etc/ntp.conf
127.127.68.0 要在自己网段上
[root@localhost ~]# vim /etc/my.cnf
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y ntp ntpdate.x86_64
[root@localhost ~]# service ntpd start
[root@localhost ~]# /usr/sbin/ntpdate 192.168.68.200
##创建定时任务
[root@localhost ~]# crontab -e
*/30 * * * * /bin/sbin/ntpdate 192.168.68.200
[root@localhost ~]# vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
[root@localhost ~]# systemctl restart mysqld.service
[root@localhost ~]# mysql -u root -padmin123
mysql> change master to master_host='192.168.68.200',master_user='myslave',master_password='123456'23456',master_log_file='master-bin.000001',master_log_pos=603;
mysql> start slave;
mysql> show slave status\G
[root@localhost ~]# crontab -e
命令要写绝对路径,用which+命令就可以知道该命令的绝对路径了
[root@localhost ~]# vim /etc/my.cnf
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y ntp ntpdate.x86_64
[root@localhost ~]# service ntpd start
[root@localhost ~]# /usr/sbin/ntpdate 192.168.68.200
##创建定时任务
[root@localhost ~]# crontab -e
*/30 * * * * /bin/sbin/ntpdate 192.168.68.200
[root@localhost ~]# vim /etc/my.cnf
server-id = 3
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
[root@localhost ~]# systemctl restart mysqld.service
[root@localhost ~]# mysql -u root -pa123123
mysql> change master to master_host='192.168.68.200',master_user='myslave',master_password='123456'23456',master_log_file='master-bin.000001',master_log_pos=603;
mysql> start slave;
mysql> show slave status\G
[root@localhost ~]# crontab -e
命令要写绝对路径,用which+命令就可以知道该命令的绝对路径了
[root@localhost ~]# vim /etc/my.cnf
主服务器192.168.68.200
从服务器192.168.68.30
从服务器192.168.68.105
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。
数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把主数据库上事务性查询导致的变更同步到集群中的从数据库。
性能较好
需要开发人员来实现,运维人员无从下手
一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序。
(1)MySQL-Proxy
(2)Atlas
(3)Amoeba
因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。
但是数据库的“读”(读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。
数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用。
利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。
主服务器:192.168.68.200
从服务器1:192.168.68.30
从服务器2:192.168.68.105
amoeba:192.168.68.40
客户端:192.168.68.10
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
jdk-6u14-linux-x64.bin Python-3.7.7 Python-3.7.7_.tgz rh
[root@localhost opt]# cp jdk-6u14-linux-x64.bin /usr/local/
[root@localhost opt]# cd /usr/local/
[root@localhost local]# chmod +x jdk-6u14-linux-x64.bin
[root@localhost local]# ./jdk-6u14-linux-x64.bin
[root@localhost local]# mv jdk1.6.0_14/ jdk1.6
[root@localhost local]# 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
[root@localhost local]# source /etc/profile
[root@localhost local]# java -version
[root@localhost local]# mkdir amoeba
[root@localhost local]# cd /opt/
[root@localhost opt]# ls
amoeba-mysql-binary-2.2.0.tar.gz Python-3.7.7 rh
jdk-6u14-linux-x64.bin Python-3.7.7_.tgz
[root@localhost opt]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@localhost amoeba]# chmod -R 755 /usr/local/amoeba/
[root@localhost amoeba]# /usr/local/amoeba/bin/amoeba
amoeba start|stop
[root@localhost amoeba]# amoeba
amoeba start|stop
安装java环境,将jdk-6u14-linux-x64.bin拖到/opt目录下
最后出现done就说明安装好了
将jdk1.6.0_14/移动到 /usr/local/并修改名称为:jdk1.6
[root@localhost local]# vim /etc/profile 在最后加入以下配置
解压amoeba
赋予权限并运行
在Master、slave1和slave2服务器开启amoeba访问
Amoeba服务器设置amoeba服务
[root@localhost ~]# cd /usr/local/amoeba/conf/
[root@localhost conf]# cp amoeba.xml amoeba.xml.bak
[root@localhost conf]# vim amoeba.xml
30 <property name="user">amoeba</property> ##设置登录用户名
32 <property name="password">123456</property> ##设置密码
115<property name="defaultPool">master</property> ##设置默认池为master
将117行的注释删掉
118<property name="writePool">master</property> ##设置写池
119<property name="readPool">slaves</property> ##设置读池
[root@localhost conf]# cp dbServers.xml dbServers.xml.bak
[root@localhost conf]# vim dbServers.xm
23 <!-- <property name="schema">test</property> --> ##将23行注释掉
26 <property name="user">test</property> ##设置登录用户
29 <property name="password">123123</property> ##删掉28和30行,并设置密码
45 <dbServer name="master" parent="abstractServer">
46 <factoryConfig>
47 <!-- mysql ip -->
48 <property name="ipAddress">192.168.68.200</property>
49 </factoryConfig>
50 </dbServer>
51
52 <dbServer name="slave1" parent="abstractServer">
53 <factoryConfig>
54 <!-- mysql ip -->
55 <property name="ipAddress">192.168.68.30</property>
56 </factoryConfig>
57 </dbServer>
58 <dbServer name="slave2" parent="abstractServer">
59 <factoryConfig>
60 <!-- mysql ip -->
61 <property name="ipAddress">192.168.68.105</property>
62 </factoryConfig>
63 </dbServer>
65 <dbServer name="slaves" virtual="true">
66 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
67 <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
68 <property name="loadbalance">1</property>
69
70 <!-- Separated by commas,such as: server1,server2,server1 -->
71 <property name="poolNames">slave1,slave2</property>
[root@localhost conf]# amoeba start &
[root@localhost conf]# netstat -natp |grep java
[root@localhost conf]# vim amoeba.xml 全局配置
[root@localhost conf]# vim dbServers.xm
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y mariadb mariadb-server
[root@localhost ~]# mysql -uamoeba -p123123 -h 192.168.68.40 -P8066
在两台从服务器上关掉主从复制
在slave1上
在slave2上
在客户机上
在master,slave1,slave2,amoeba服务器上
在主从服务器上
在slave1从服务器上
在客户端上
在主从服务器上
在slave1从服务器上
此时读写分离已经完成
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/a568911/article/details/122044573
内容来源于网络,如有侵权,请联系作者删除!