ディレクトリ
プロセスを構築
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