• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql高可用方案之Keepalived+主主复制

mysql 搞代码 4年前 (2022-01-09) 39次浏览 已收录 0个评论

环境规划: node1: 192.168.1.250 node2: 192.168.1.251 vip: 192.168.1.201 数据库: mysql-5.6.23 mysqldba技术群 378190849 武汉-linux运维群 236415619 1.各节点的网络配置 node1节点: [root@node1 ~]# hostname node1 [root@node1 ~]# ip addr 1: lo: LOO

环境规划:

node1: 192.168.1.250

node2: 192.168.1.251

vip: 192.168.1.201

数据库: mysql-5.6.23

mysql dba技术群 378190849

武汉-linux运维群 236415619

1.各节点的网络配置

node1节点:

[root@node1 ~]# hostname
node1
[root@node1 ~]# ip addr
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 10:78:d2:c9:50:28 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.250/24 brd 192.168.1.255 scope global eth0
inet6 fe80::1278:d2ff:fec9:5028/64 scope link
valid_lft forever preferred_lft forever
[root@node1 ~]#

node2节点:

[root@node2 ~]# hostname
node2
[root@node2 ~]# ip addr
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc mq state UP qlen 1000
link/ether d0:27:88:7d:83:9b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.251/24 brd 192.168.1.255 scope global eth0
inet6 fe80::d227:88ff:fe7d:839b/64 scope link
valid_lft forever preferred_lft forever
[root@node2 ~]#

2.下载安装mysql数据库

node1节点和node2节点一样安装(下面红色部分不一样)

[root@node1 ~]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz

[root@node1 ~]# tar xvf mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

[root@node1 ~]# cd /usr/local/
[root@node1 local]# mv mysql-5.6.23-linux-glibc2.5-x86_64 mysql-5.6.23
[root@node1 local]# chown -R root:mysql mysql-5.6.23/
[root@node1 local]# chown -R mysql:mysql mysql-5.6.23/data/
[root@node1 local]# cd mysql-5.6.23/
[root@node1 mysql-5.6.23]# ./scripts/mysql_install_db –user=mysql –group=mysql –database=/usr/local/mysql-5.6.23/data –basedir=/usr/local/mysql-5.6.23
[root@node1 mysql-5.6.23]# cp -a my.cnf /etc/
[root@node1 mysql-5.6.23]# cp -a support-files/mysql.server /etc/init.d/mysqld
[root@node1 mysql-5.6.23]# vim /etc/my.cnf

basedir = /usr/local/mysql-5.6.23
datadir = /usr/local/mysql-5.6.23
port = 3306
server_id = 10 –将另一台主修改为20
socket = /tmp/mysql.sock

log-bin=mysql-bin
log-bin-index=mysql-bin-index

replicate-do-db=tong
replicate-ignore-db=mysql

auto_increment_offset=1 –将另一台主修改为2
auto_increment_increment=2

relay-log=relay-log
relay-log-index=relay-log-inde

log_slave_updates
sync-binlog=1

[root@node1 mysql-5.6.23]# /etc/init.d/mysqld restart
ERROR! MySQL server PID file could not be found!
Starting MySQL. SUCCESS!
[root@node1 mysql-5.6.23]#

3.配置主主复制

node1节点:

[root@node1 mysql-5.6.23]# /usr/local/mysql-5.6.23/bin/mysqladmin -u root password ‘system’ –修改初始密码为system
Warning: Using a password on the command line interface can be insecure.
[root@node1 mysql-5.6.23]# /usr/local/mysql-5.6.23/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> create database tong;
Query OK, 1 row affected (0.05 sec)

mysql> grant replication slave,replication client on *.* to repl_user@’192.168.1.251′ identified by ‘system!#%246’; –创建复制用户
Query OK, 0 rows affected (0.05 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)

mysql> show master status; –查看node1节点的二进制位置
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000001 | 690 | | | |
+——————+———-+————–+——————+——————-+
1 row in set (0.00 sec)

mysql>

node2节点:

[root@node2 mysql-5.6.23]# /usr/local/mysql-5.6.23/bin/mysqladmin -u root password ‘system’
Warning: Using a password on the command line interface can be insecure.

[root@node2 mysql-5.6.23]# /usr/local/mysql-5.6.23/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> create database tong;
Query OK, 1 row affected (0.03 sec)

mysql> grant replication slave,replication client on *.* to repl_user@’192.168.1.250′ identified by ‘system!#%246’;
Query OK, 0 rows affected (0.06 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

mysql> change master to master_host=’192.168.1.250′,master_port=3306,master_user=’repl_user’,master_password=’system!#%246′,master_log_file=’mysql-bin.000001′,master_log_pos=690; –同步node1的数据
Query OK, 0 rows affected, 2 warnings (0.39 sec)

mysql> show master status; –查看node2节点的二进制日志
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000001 | 690 | | | |
+——————+———-+————–+——————+——————-+
1 row in set (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.03 sec)

mysql>

node1节点:

mysql> change master to master_host=’192.168.1.251′,master_port=3306,master_user=’repl_user’,master_password=’system!#%246′,master_log_file=’mysql-bin.000001′,master_log_pos=690; –同步node2节点的数据
Query OK, 0 rows affected, 2 warnings (0.49 sec)

mysql> start slave;
Query OK, 0 rows affected (0.08 sec)

mysql>

4.测试主主同步是否正常(在两个节点各写一行数据,在两个节点查看数据)

node1节点:

mysql> \u tong
Database changed
mysql> create table t (a int);
Query OK, 0 rows affected (0.33 sec)

mysql> insert into t values(1);
Query OK, 1 row affected (0.08 sec)

mysql>

node2节点:

mysql> \u tong
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from t;
+——+
| a |
+——+
| 1 |
+——+
1 row in set (0.00 sec)

mysql> insert into t values(2);
Query OK, 1 row affected (0.12 sec)

mysql> select * from t;
+——+
| a |
+——+
| 1 |
| 2 |
+——+
2 rows in set (0.00 sec)

mysql>

node1节点:

mysql> select * from t;
+——+
| a |
+——+
| 1 |
| 2 |
+——+
2 rows in set (0.00 sec)

mysql>

5.下载安装keepalived软件(node1和node2是一样)

node1节点:

[root@node1 ~]# wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz

[root@node1 ~]# tar xvf keepalived-1.2.15.tar.gz
[root@node1 ~]# cd keepalived-1.2.15

[root@node1 keepalived-1.2.15]# ./configure –prefix=/usr/local/keepalived-1.2.15 –with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64

[root@node1 keepalived-1.2.15]# make && make install

[root@node1 keepalived-1.2.15]# echo $?
0
[root@node1 keepalived-1.2.15]# cd /usr/local/keepalived-1.2.15/

[root@node1 keepalived-1.2.15]# ll
total 16
drwxr-xr-x. 2 root root 4096 Apr 30 11:46 bin
drwxr-xr-x. 5 root root 4096 Apr 30 11:46 etc
drwxr-xr-x. 2 root root 4096 Apr 30 11:46 sbin
drwxr-xr-x. 3 root root 4096 Apr 30 11:46 share

[root@node1 keepalived-1.2.15]# mkdir /etc/keepalived –创建文件夹不能少,否则出错

[root@node1 keepalived-1.2.15]# cp -a etc/rc.d/init.d/keepalived /etc/init.d/

[root@node1 keepalived-1.2.15]# cp -a etc/keepalived/keepalived.conf /etc/keepalived

[root@node1 keepalived-1.2.15]# cp -a etc/sysconfig/keepalived /etc/sysconfig/

[root@node1 keepalived-1.2.15]# cd /etc/keepalived/
[root@node1 keepalived]# vim keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
[email protected] –邮件报警
}
notification_email_from [email protected]
smtp_server 127.0.0.1 –邮件服务器
smtp_connect_timeout 30 –连接超时30秒报警
router_id mysql-ha
}

vrrp_instance VI_1 {
state MASTER –主节点是MASTER,备节点是BACKUP
interface eth0
virtual_router_id 50 –id值在两台服务器必须一至
priority 100 –优先级,node1是100,node2是90
advert_int 1
nopreempt –不抢占资源
authentication {
auth_type PASS –两个节点认证的权限
auth_pass 1111
}
virtual_ipaddress { –VIP地址
192.168.1.201
}
}

virtual_server 192.168.1.201 3306 { –VIP地址和端口
delay_loop 6
lb_algo wrr –权纵
lb_kind DR –DR模式
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP –协议

real_server 192.168.1.250 3306 { –node1的IP地址和端口
weight 1
notify_down /usr/local/mysql-5.6.23/bin/mysql.sh –检测mysql宕机后执行的脚本
TCP_CHECK {
connect_timeout 3 –连接超时
nb_get_retry 3 –重试3秒
connect_port 3306 –连接端口

}
}
}

[root@node1 keepalived]# cat /usr/local/mysql-5.6.23/bin/mysql.sh –脚本内容
#!/bin/bash
pkill keepalived
/usr/bin/keepalived -D
[root@node1 keepalived]#

node2节点:

安装keepalived软件是一样

[root@node2 keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id mysql-ha
}

vrrp_instance VI_1 {
state BACKUP –与node1不一样
interface eth0
virtual_router_id 50
priority 99 –与node1不一样
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.201
}
}

virtual_server 192.168.1.201 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP

real_server 192.168.1.251 3306 { –node2的IP地址和端口
weight 1
notify_down /usr/local/mysql-5.6.23/bin/mysql.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
connect_port 3306
}
}

}

[root@node1 keepalived]# cat /usr/local/mysql-5.6.23/bin/mysql.sh –脚本内容
#!/bin/bash
pkill keepalived
/usr/bin/keepalived -D
[root@node1 keepalived]#

6.启动服务和测试状态

node1节点和node1节点:

[root@node2 keepalived]# /etc/init.d/mysqld restart –两个节点启动服务
ERROR! MySQL server PID file could not be found!
Starting MySQL. SUCCESS!
[root@node2 keepalived]# /etc/init.d/keepalived restart –两个节点启动服务
Stopping keepalived: [FAILED]
Starting keepalived: [ OK ]
[root@node2 etc]# /usr/local/mysql-5.6.23/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
aff来@源gao*daima.com搞@代#码网iliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> grant all privileges on *.* to remote@’%’ identified by ‘system’; –在两个节点创建相同的远程登陆用户
Query OK, 0 rows affected (0.07 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

mysql>

node2节点:

[root@node2 keepalived]# ip addr show
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc mq state UP qlen 1000
link/ether d0:27:88:7d:83:9b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.251/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.201/32 scope global eth0 –VIP地址在node2已经启动
inet6 fe80::d227:88ff:fe7d:839b/64 scope link
valid_lft forever preferred_lft forever
[root@node2 keepalived]#

用mysql客户端登陆VIP地址:

[root@node3 keepalived]# /usr/local/mysql-5.6.23/bin/mysql -u remote -p -h 192.168.1.201
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 27
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> \u tong
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table g (a int);
Query OK, 0 rows affected (0.29 sec)

mysql> insert into g values(1);
Query OK, 1 row affected (0.09 sec)

mysql> select * from g;
+——+
| a |
+——+
| 1 |
+——+
1 row in set (0.00 sec)

mysql> exit
Bye
[root@node2 keepalived]# /etc/init.d/mysqld stop –关闭node2节点的mysql服务
Shutting down MySQL…. SUCCESS!
[root@node2 keepalived]# ip addr show
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc mq state UP qlen 1000
link/ether d0:27:88:7d:83:9b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.251/24 brd 192.168.1.255 scope global eth0 –VIP不见了
inet6 fe80::d227:88ff:fe7d:839b/64 scope link
valid_lft forever preferred_lft forever
[root@node2 keepalived]#

node1节点:

[root@node1 keepalived]# ip addr show
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 10:78:d2:c9:50:28 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.250/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.201/32 scope global eth0 –VIP在node1启动了
inet6 fe80::1278:d2ff:fec9:5028/64 scope link
valid_lft forever preferred_lft forever
[root@node1 keepalived]#

用mysql客户端登陆VIP地址:

[root@node3 bin]# ./mysql -u remote -p -h 192.168.1.201 -P 3306
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 5.6.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> \u tong
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from g; –数据同步了
+——+
| a |
+——+
| 1 |
+——+
1 row in set (0.00 sec)

mysql>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql高可用方案之Keepalived+主主复制

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址