共计 5949 个字符,预计需要花费 15 分钟才能阅读完成。
这篇文章将为大家详细讲解有关如何理解基于 keepalived 的 MySQL 主主复制,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
系统环境:Linux red hat 6.3
mysql 版本:mysql 5.6.34
mater1 节点 ip:192.168.140.222 主机名:red1
mater2 节点 ip:192.168.140.224 主机名:red2
一、分别在两个节点安装 mysql 数据库。
二、1 节点修改 /etc/my.cnf 参数
server_id =1 // 标志,节点之间不能重复
log-bin=/var/lib/mysql/xbinlog/binlog // 开启 binlog,并保存在位置 /var/lib/mysql/xbinlog/ 下
binlog-format=ROW //binlog 的模式是 row 模式
log_slave_updates=1 // 开启 log-slave-updates 参数后,从库从主库复制的数据会写入 log-bin 日志文件里
sync_binlog=1 // 当每进行 1 次事务提交之后,MySQL 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强制写入磁盘。
innodb_flush_log_at_trx_commit=1 // 代表每 1 次事务提交或事务外的指令都需要把日志写入(flush)硬盘
slave-parallel-workers=2 // 设定从服务器的 SQL 线程数位 2 个;0 表示关闭多线程复制功能
replicate-do-db=replicate // 同步的数据库是 replicate
并且给 /var/lib/mysql/xbinlog/ 目录赋予 mysql:mysql 权限,否则会起不来 chown mysql:mysql /var/lib/mysql/xbinlog/
重启 mysql 服务
2 节点修改 /etc/my.cnf 参数
server_id =2 // 这个参数要保证 2 个节点不一致
log_bin=/opt/mysql/data/ybinlog/binlog
binlog-format=ROW
log_slave_updates=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
slave-parallel-workers=2
replicate-do-db=replicate
并且给 /var/lib/mysql/ybinlog/ 目录赋予 mysql:mysql 权限,否则会起不来 chown mysql:mysql /var/lib/mysql/ybinlog/
重启 mysql 服务
三、在 1 节点:
mysql grant replication slave on *.* to replicate @ 192.168.140.224 identified by replicate
Query OK, 0 rows affected (0.00 sec)
mysql flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
mysql show master status;
+—————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+——————-+
| binlog.000002 | 337 | | | |
+—————+———-+————–+——————+——————-+
1 row in set (0.00 sec)
mysql unlock tables;
Query OK, 0 rows affected (0.00 sec)
在 2 节点
mysql change master to master_host= 192.168.140.222 ,master_user= replicate ,master_password= replicate ,master_log_file= binlog.000002 ,master_log_pos=337;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql show slave status\G // 查看 Slave_IO_Running 和 Slave_SQL_Running 两项是不是 yes 状态
mysql show master status;
+—————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+——————-+
| binlog.000001 | 120 | | | |
+—————+———-+————–+——————+——————-+
在 1 节点
mysql change master to master_host= 192.168.140.224 ,master_user= replicate , master_password= replicate ,master_log_file= binlog.000001 ,master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql show slave status\G // 查看 Slave_IO_Running 和 Slave_SQL_Running 两项是不是 yes 状态
四、测试,在 2 个节点都插入数据,然后 select 验证一下
五、下载 keepalived
http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
解压:tar xvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
初始化:./configure –disable-fwmark
编译安装:make make install
keepalived 的配置前提
1、本机的主机名与 hosts 中定义的主机保持一致。
2、各节点要能互相解析主机名,也就是说 hosts 文件中要有本机的和对方的 ip 和对应的主机名
3、各个节点的时间必须同步
关闭 selinux 并清空防火墙规则
[root@red1 ~]# setenforce 0
[root@red1 ~]# iptables -F
配置 keepalived
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/bin/
cp /software/keepalived/keepalived-1.2.13/keepalived/etc/init.d/keepalived.init /etc/init.d
mkdir -p /etc/keepalived
cp /software/keepalived/keepalived-1.2.13/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
节点 1 上配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { // 全局配置段
notification_email { // 定义故障通知邮箱
root@localhost // 邮箱地址,可以多个
}
notification_email_from root@localhost // 发件人地址
smtp_server localhost // 邮件服务器地址
smtp_connect_timeout 30 // 联系邮件服务器的超时时长
router_id red1 // 当前物理设备在网络中的唯一 ID 标识
}
vrrp_instance VI_1 { // 实例名在配置文件中不能重复
state MASTER //MASTER 或 BACKUP,定义当前节点默认为主或从节点
interface eth0
virtual_router_id 51 // 当前虚拟路由的标识符,必须全局唯一
priority 100 // 定义当前实例的优先级,备机要小于主机
advert_int 1 // 状态通告周期(秒)— 用于主节点向 BACKUP 节点通告心跳信息
authentication { / 消息认证配置
auth_type PASS // 认证方式(MD5 或 PASS 简单字符认证)
auth_pass 1111 // 认证密码,所有同一虚拟实例节点的必须保持一致
}
virtual_ipaddress { // 自动配置在 interface 上的(vip) 虚拟 IP 地址, 可以是多个
192.168.140.66 // 虚拟 ip
}
}
virtual_server 192.168.140.66 { // 虚拟 ip
delay_loop 6 //RealServer 的健康状态探查的时间间隔
lb_algo rr // 负载均衡的调度算法(Scheduler)
lb_kind DR //LVS 类型。支持 NAT/DR/TUN
persistence_timeout 50 // 持久连接超时时间
protocol TCP // 只能适用 TCP,若适用 UDP 则使用 ops 参数
real_server 192.168.140.222 { // 1 节点 ip
weight 1 权重
TCP_CHECK {
connect_timeout 3 健康状态监测超时时间
nb_get_retry 3 number of get retry
delay_before_retry 3 每次重试之前延迟 3 秒
# connect_port 3306
}
}
}
节点 2 上配置
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id red2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.140.66
}
}
virtual_server 192.168.140.66 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.140.224{
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
#connect_port 3306
}
}
}
开启服务 service keepalived start
查看状态 service keepalived status
查看 VIP 是否在本节点 ip add //VIP:192.168.140.66 会在节点 1 上,因为 1 节点的优先级高。
六、测试 keepalived
此时在 1 节点和 2 节点上执行 ip add,会发现 VIP 192.168.140.66 会飘在 1 节点上。
然后在 1 节点上执行 service keepalived stop,然后在 2 节点上执行 ip add,会发现 vip 飘到了 2 节点。
然后在 1 节点 service keepalived start,会发现 vip 又回到了 1 节点。
到此,测试成功
关于如何理解基于 keepalived 的 MySQL 主主复制就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。