MySQLの分散アーキテクチャ
サブマシン:サブライブラリー
1.設定SSH
2.ファイアウォールのiptables(ブロックポート)、SELinuxの(改ざん)
service iptables stop
リモートユーザーが開く必要が3.mysql
grant all privileges on *.* to 'hal'@'%' identified by '123456' with grant option;
[mysqldを]モジュールファイルを探す4。
マスターコピーからMySQLは、バイナリファイル転送であります
別々の読み取りと書き込み、データベースの分散圧を行い、バックアップデータは、リアルタイムかもしれ
プライマリサーバ:サーバに、IPアドレス、ポート番号、バイナリファイル、パスワードの名前を自分のアカウントを開きます。
プライマリサーバへのサーバからの情報は、設定が完了した後、それがメインサーバに滞在し、IP、ポートを所有する、サーバからメインサーバにアクセスするために行くだろう、設定項目に記録されています。
プライマリサーバの動作を操作する場合は、サービスインフォームからメインサーバは、プライマリサーバから新しいサービス接続、コピーされたバイナリログファイルには、文の中でbinlogの実行します。
操作の操作は、サーバーから行われた場合、他のサーバーに影響を与えないから、プライマリサーバは、影響されることはありません
1.プロファイリングのプロセス
- 1.まず、mysqlの設定ファイルを見つけます
找到[mysqld]模块
查看到数据文件的存储位置 例如/data/mysql
进入到数据存储目录中查看log日志的文件前缀
配置log-bin=日志的文件前缀
配置server-id=ip地址不加上点 (备注:不能重复)
配置的是黑洞引擎log-slave-updates=1(备注:将二进制文件同步)(级联复制)
#master必须要配置的
binlog-do-db=test #需要同步的数据库
binlog-ignore-db=mysql #避免同步的数据库
#slave必须要配置的
replicate-do-db=test #需要复制的数据库
replicate-ignore-db=mysql #避免复制mysql库
- 2.サーバーを再起動します
service mysqld restart
systemctl stop mysqld.service
systemctl start mysqld.service
- 3.端末が入ります
#主服务器
show master status\G #显示当前的主服务器状态
*************************** 1. row ***************************
File: mysql-bin.000059 #从服务器拷贝当前的文件
Position: 154 #对接口令
Binlog_Do_DB: #同步哪个数据中的数据,值为空复制所有的库
Binlog_Ignore_DB: #避免同步那个数据中的数据
Executed_Gtid_Set:
#从服务器
stop slave; #停止从服务器的运行
#配置项
change master to
master_host='10.11.52.111' ,
master_user='hal',
master_password='123456',
master_log_file='mysql-bin.000022',
master_log_pos=3064;
#开启从服务
start slave;
#查看从服务器的状态
show slave status\G;
######下个两个配置项必须是yes##########
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#innodb引擎配置
###############################服务器#################
log-bin=mysql-bin
#将主服务器的log文件更新到mysql-bin中
log-slave-updates=1
server-id = 101152106
#master必须要配置的
binlog-do-db=test #需要同步的数据库
binlog-ignore-db=mysql #避免同步的数据库
######################################################
default_storage_engine = InnoDB
#blackhole引擎配置
###############################服务器#################
log-bin=mysql-bin
#将主服务器的log文件更新到mysql-bin中
log-slave-updates=1
server-id = 101152105
#master必须要配置的
binlog-do-db=test #需要同步的数据库
binlog-ignore-db=mysql #避免同步的数据库
#slave必须要配置的
replicate-do-db=test #需要复制的数据库
replicate-ignore-db=mysql #避免复制mysql库
#默认使用BLACKHOLE
default-storage-engine = BLACKHOLE
#不使用innodb
skip-innodb
######################################################
#default_storage_engine = InnoDB
#default-storage-engine = MyISAM
#myisam服务器
#从服务器引擎
log-bin=mysql-bin
#将主服务器的log文件更新到mysql-bin中
log-slave-updates=1 #级联复制的时候使用的
server-id = 101152103
#slave必须要配置的
replicate-do-db=test #需要复制的数据库
replicate-ignore-db=mysql #避免复制mysql库
#默认使用
default-storage-engine = myisam
#不使用innodb
skip-innodb
##################################################
#default_storage_engine = InnoDB
マスターコピーとは異なり2
- マスタースレーブ
- 主からの相互
- カスケードレプリケーション
- ブラックホール最適化された複製
メインの顔の質問から
障害なし:
- ブラックホールエンジンを構成するので、サーバのリンクからブラックホールこと、従ってメインサーバー上の圧力を緩和
- 複製、サーバからマスタサーバ、下からだけでなく、サーバーからサーバーをカスケード接続、サーバーは、以下の3つから5つのサーバーを追加することができます。
3.別の読み取りと書き込み
なぜ別の読み取りと書き込みを使うのか?
- 単一のサーバーのボトルネックのパフォーマンスにアクセスするための巨大な圧力に直面し、負荷を共有する必要性
読み書きモード:
-
それらを設定するためのコードで1:
- 内部アプリケーションは、ロングコードモジュールとして使用して構築することができるようロジック判定コードは、分割された使用します
- いくつかの困難の展開を削減
import pymysql class MyCat(): def __init__(self,sql): self.sql = sql.strip() def query(self): #select * from table_name; head = self.sql.split(' ')[0] if head == 'select': return self.read() else: return self.write() def write(self): conn = pymysql.connect(host='10.11.52.106', user='hal', passwd="123456", db='test', port=3306) cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) try: cursor.execute(self.sql) conn.commit() return [{'res':'ok'}] except Exception as e: conn.rollback() return '语句执行失败:\n'+str(e) finally: cursor.close() conn.close() def read(self): conn = pymysql.connect(host='10.11.52.103', user='hal', passwd="123456", db='test', port=3306) cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) try: cursor.execute(self.sql) conn.commit() result = cursor.fetchall() return result except Exception as e: conn.rollback() print('查询失败:\n'+str(e)) finally: cursor.close() conn.close() sql = "insert into `qwer1` set id=2" action = MyCat(sql) print(action.query())
-
2.ミドルウェア層を達成するために
- 管理がより便利に(mycat、Javaが書かれました)
- 非常に面倒を構築
准备jdk
准备mycat
#下载
scp root@10.11.52.106:/root/mycat.tar.gz .
scp root@10.11.52.106:/root/jdk8.tar.gz .
#上传
scp mycat.tar.gz root@101.123.186.200:/root/.
JDKのインストール構成
#解压
tar fx jdk8.tar.gz -C /usr/java
#进入目录
cd /usr/java
#修改名称
mv jdk1.8.0_161/ jdk1.8.0
#配置环境变量
vim /etc/profile +
##########################javaenv############################
JAVA_HOME=/usr/java/jdk1.8.0
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin/
export JAVA_HOME CLASSPATH PATH
#刷新
source /etc/profile
設定とインストールmycat
#解压
tar fx mycat.tar.gz -C /usr/local/
#切换目录
cd /usr/local/mycat
#主要目录介绍
conf-------->配置项
logs-------->查看mycat的运行状态
#配置环境变量
vim /etc/profile +
########################mycatenv##############################
MYCAT_HOME=/usr/local/mycat
PATH=$PATH:$MYCAT_HOME/bin/
export MYCAT_HOME PATH
#刷新
source /etc/profile
#条件
vim /etc/hosts #本地DNS
#10.11.52.105 Centos7
ユーザーのログイン情報を設定します
#配置mycat连接服务器
vim /usr/local/mycat/conf/server.xml
#
</system>
#配置用户名
<user name="root">
#密码
<property name="password">123456</property>
#可以访问的库
<property name="schemas">test</property>
</user>
<user name="hal">
<property name="password">123456</property>
<property name="schemas">test</property>
#读写权限
<property name="readOnly">false</property>
</user>
4.メイン高可用性(フェイルオーバー)から
仮想冗長ルーティングの設定
keepalivedのインストール
yum install keepalived -y
#配置文件路径
vim /etc/keepalived/keepalived.conf
構成アイテム
#主机器配置
global_defs {
#出故障了把信息发给谁,邮件
notification_email {
[email protected]
}
#用谁的邮件发送
notification_email_from [email protected]
#smtp邮件服务器
smtp_server smtp.qq.com
#邮件如果30秒内没有发出去
smtp_connect_timeout 30
#昵称
router_id lvs_1
}
#router_id
vrrp_instance lvs_1 {
#确定主机身份
state MASTER
#绑定使用的网卡,可以使用ifconfig来查看
interface ens33
#路由id,要求主从相同(备注:如果不相同,会裂脑)
virtual_router_id 1
#权重大的为主
priority 100
#故障切换需要消耗的时间 ,单位是秒
advert_int 1
#主机的口令,两边必须一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟的路由地址,在公网中的话,需要多使用一张网卡,可以多接入一个空闲的ip
#局域网中空闲的ip很多
virtual_ipaddress {
10.11.52.200
10.11.52.201
10.11.52.202
}
}
#从机器
global_defs {
#出故障了把信息发给谁,邮件
notification_email {
[email protected]
}
#用谁的邮件发送
notification_email_from [email protected]
#smtp邮件服务器
smtp_server smtp.qq.com
#邮件如果30秒内没有发出去
smtp_connect_timeout 30
#昵称
router_id lvs_2
}
#router_id
vrrp_instance lvs_2 {
#确定主机身份
state BACKUP
#绑定使用的网卡,可以使用ifconfig来查看
interface eth0
#路由id,要求主从相同(备注:如果不相同,会裂脑)
virtual_router_id 1
#权重大的为主
priority 99
#故障切换需要消耗的时间 ,单位是秒
advert_int 1
#主机的口令,两边必须一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟的路由地址,在公网中的话,需要多使用一张网卡,可以多接入一个空闲的ip
#局域网中空闲的ip很多
virtual_ipaddress {
10.11.52.200
10.11.52.201
10.11.52.202
}
}
スタートkeepalivedの
service keepalived start
どのように設定するかどうかを検証します
ip addr #获取当前的ip 也可以获取代理ip