MySQLのアーキテクチャ

プロセスを構築

1、インストールmysql5726

実装
の機能を
10.0.0.65 10.0.0.66 10.0.0.67
65 66 67
ホスト 10.0.0.65 65
10.0.0.66 66
10.0.0.67 67
10.0.0.65 65
10.0.0.66 66
10.0.0.67 67
10.0.0.65 65
10.0.0.66 66
10.0.0.67 67
GTIDコピー メインライブラリー ライブラリから ライブラリから
ハイアベイラビリティ VIP - MHA
Eメールのアラーム 別々の読み取りと書き込み -

65 \ 66 \ 67

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y libaio-devel
mkdir -p /server/tools
cd /server/tools/
mkdir /application
# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.26-linux-glibc2.12-x86_64  /application/mysql
yum remove mariadb-libs-5.5.60-1.el7_5.x86_64 -y
rpm -qa |grep mariadb
useradd -s /sbin/nologin mysql
#设置环境变量
echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
source /etc/profile
mysql -V
#创建数据路径并授权
#1. 添加一块新磁盘模拟数据盘
#2. 格式化并挂载磁盘
# mkfs.xfs /dev/sdb
# mkdir /data
# blkid
# vim /etc/fstab 
# UUID="b21ec3e0-e251-4ded-bc12-2d940f938dd5" /data xfs defaults 0 0
# mount -a
# df -h
chown -R mysql.mysql /application/*
#初始化数据(创建系统数据)
# 5.6 版本 初始化命令  /application/mysql/scripts/mysql_install_db 
# 5.7 版本
mkdir /data/mysql/data -p 
chown -R mysql.mysql /data
mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data  #自动创建密码
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data   #无密码

cat >/etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF

mkdir /data/mysql/data/binlog
chown -R mysql.mysql /data

65

cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql/
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=65
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/mysql/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=65 [\\\d]>
EOF
systemctl restart mysqld
systemctl status mysqld

66

cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=66
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/mysql/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=66 [\\\d]>
EOF
systemctl restart mysqld
systemctl status mysqld

67

cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=67
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/mysql/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=67 [\\\d]>
EOF
systemctl restart mysqld
systemctl status mysqld

GTIDマスタースレーブのレプリケーション

65

mysql -e "grant replication slave on *.* to repl@'10.0.0.%' identified by '123';"

66 \ 67

mysql -e "change master to master_host='10.0.0.65',master_user='repl',master_password='123' ,MASTER_AUTO_POSITION=1;start slave; "
mysql -e "show slave status \G"|grep Yes

ハイアベイラビリティ

65 \ 66 \ 67

ln -s /application/mysql/bin/mysqlbinlog    /usr/bin/mysqlbinlog
ln -s /application/mysql/bin/mysql          /usr/bin/mysql

65

rm -rf /root/.ssh 
/bin/ssh-keygen -t rsa -f /root/.ssh/id_rsa  -P ""
sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.66 -o StrictHostKeyChecking=no
sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.67 -o StrictHostKeyChecking=no
mysql -e "grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';"

65 \ 66 \ 67

ssh 10.0.0.65 date
ssh 10.0.0.66 date
ssh 10.0.0.67 date
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

67

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

#创建配置文件目录
 mkdir -p /etc/mha
#创建日志目录
 mkdir -p /var/log/mha/app1
#编辑mha配置文件
cat > /etc/mha/app1.cnf<<EOF
[server default]
manager_log=/var/log/mha/app1/manager        
manager_workdir=/var/log/mha/app1            
master_binlog_dir=/data/mysql/data/binlog       
user=mha                                   
password=mha                               
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root                               
[server1]                                   
hostname=10.0.0.65
port=3306                                  
[server2]            
hostname=10.0.0.66
port=3306
[server3]
hostname=10.0.0.67
port=3306
EOF
masterha_check_ssh  --conf=/etc/mha/app1.cnf 
masterha_check_repl  --conf=/etc/mha/app1.cnf 
#开启MHA(db03):
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
#查看MHA状态
masterha_check_status --conf=/etc/mha/app1.cnf

VIP機能のMHA

67

cd /usr/local/bin/
rz master_ip_failover
dos2unix /usr/local/bin/master_ip_failover 
chmod +x /usr/local/bin/master_ip_failover 
vim  /usr/local/bin/master_ip_failover
my $vip = '10.0.0.55/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
# 
vim /etc/mha/app1.cnf
添加:
master_ip_failover_script=/usr/local/bin/master_ip_failover

65

ifconfig eth0:1 10.0.0.55/24

67

masterha_stop --conf=/etc/mha/app1.cnf
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

電子メールアラート

67

cd /usr/local/bin/
rz send  sendEmail  testpl
vim testpl  #修改报警邮箱
vim /etc/mha/app1.cnf
# 添加一行
report_script=/usr/local/bin/send
#重启mha
masterha_stop --conf=/etc/mha/app1.cnf
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

2.個別の読み取りと書き込み

メインライブラリー

yum install -y Atlas*
cd /usr/local/mysql-proxy/conf
mv test.cnf test.cnf.bak
 vi test.cnf
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses = 10.0.0.55:3306
proxy-read-only-backend-addresses = 10.0.0.66:3306,10.0.0.67:3306
pwds = repl:3yb5jEku5h4=,mha:O2jBXONX098=
daemon = true
keepalive = true
event-threads = 8
log-level = message
log-path = /usr/local/mysql-proxy/log
sql-log=ON
proxy-address = 0.0.0.0:33060
admin-address = 0.0.0.0:2345
charset=utf8
# 启动atlas
    /usr/local/mysql-proxy/bin/mysql-proxyd test start
    ps -ef |grep proxy
# 3. Atlas功能测试
# 测试读操作:
mysql -umha -pmha  -h 10.0.0.55 -P 33060
66 [(none)]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
|          67 |
+-------------+
1 row in set (0.00 sec)

66 [(none)]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
|          65 |
+-------------+
1 row in set (0.00 sec)
# 测试写操作:
66 [(none)]>begin;select @@server_id;commit;
Query OK, 0 rows affected (0.00 sec)

+-------------+
| @@server_id |
+-------------+
|          66 |
+-------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

66 [(none)]>begin;select @@server_id;commit;
Query OK, 0 rows affected (0.00 sec)

+-------------+
| @@server_id |
+-------------+
|          66 |
+-------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

IPドリフトテスト

`` `` ``
查看VIP
[ルート@ 65 /サーバ/ツール]#1のIP A |はgrep eth0を
2:eth0の:<ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc 1000年QLEN状態UPグループのデフォルトのpfifo_fast
INET 10.0.0.65 / 24 BRD 10.0.0.255スコープグローバルnoprefixroute用のeth0
INET 10.0.0.55/24 BRD 10.0.0.255範囲グローバル二はeth0:1

ログ66

"ショースレーブ状態の\ G" -eのMySQL
*************************** 1行********** *****************
Slave_IO_State:イベント送信するためのマスターを待っている
10.0.0.65 //主库是51:MASTER_HOST
Master_User:担当者の
MASTER_PORT:3306
Connect_Retry:60
MASTER_LOG_FILEます。mysql-binが0.000007
Read_Master_Log_Pos:191
RELAY_LOG_FILEます。mysql-DB02-リレー-bin.000002
RELAY_LOG_POS:361
のRelay_Master_Log_Fileます。mysql-bin.000007という
Slave_IO_Running:はい
Slave_SQL_Running:はい

メインライブラリ65をオフにします

systemctl停止mysqldは//メインライブラリMySQLのテストをオフにします

ライブラリー67から表示に切り替えます

"ショースレーブ状態の\ G" -eのMySQL
*************************** 1行********** *****************
Slave_IO_State:イベントを送信するためにマスターを待っている
MASTER_HOST:10.0.0.66 //主库切换到52
Master_User:担当者
MASTER_PORT:3306
Connect_Retry:60
MASTER_LOG_FILE:はmysql- bin.000006
Read_Master_Log_Pos:191
RELAY_LOG_FILEます。mysql-DB03-リレー-bin.000002
RELAY_LOG_POS:361
のRelay_Master_Log_Fileます。mysql-bin.000006
Slave_IO_Running:はい
Slave_SQL_Running:はい

VIP 65の情報を見ます

| IP了没有のgrep eth0を// VIP
はeth0:2千QLEN状態UPグループのデフォルトのpfifo_fast <ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc
のinet 10.0.0.65/24 BRD 10.0.0.255スコープグローバルnoprefixroute eth0を

VIP 66の情報を見ます

[ルート@ mysqlの-DB02〜]#1のIP A |はgrep eth0を// DB02の出现のvip55
2:eth0の:1000 QLEN状態UP pfifo_fast <ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc
のinet 10.0.0.52/24 BRD 10.0.0.255スコープグローバルのeth0
のinet 10.0.0.55/24 BRD 10.0.0.255スコープグローバルセカンダリはeth0:0

VIPドリフトテストは成功です

nohupをmasterha_manager --conf =の/ etc / MHA / app1.cnf --remove_dead_master_conf --ignore_last_failover <を/ dev / null> /var/log/mha/app1/manager.log 2>&1&
//后台运行MHA

masterha_check_repl --conf =の/ etc / MHA / app1.cnf // テストMHA複製
MySQLのレプリケーションの状態をOK IS
[DB03のMHAルート@] =#masterha_check_status --confの/ etc / MHA / app1.cnf // MHA検出状態、DB03メインライブラリ66切り替えるかどうかをチェックし
APP1(PID:9849)を(0:PING_OK)を実行して、マスター:10.0.0.66

MHA正常に動作し

おすすめ

転載: www.cnblogs.com/jiangyatao/p/11371462.html