Linux使用mysql+keepalived双主实现
环境准备
主机名 | ip | 服务 |
---|---|---|
mysql-1 | 192.168.58.131 | mysql+keepalived |
mysql-2 | 192.168.58.131 | mysql+keepalived |
一. 配置数据库mariadb
1. 安装数据库mariadb
以下为yum一键安装方式:
yum install -y mariadb-server
2. 修改配置文件
mysql-1 服务器
输入vim /etc/my.cnf 修改配置文件
vim /etc/my.cnf
在[mysqld]下插入两行
server-id=1
log-bin=master-bin
mysql-2 服务器
vim /etc/my.cnf
在[mysqld]下插入两行
server-id=2
log-bin=master-bin
3. 启动mariadb(mysql-1/mysql-2操作一样)
systemctl start mariadb
ps -ef|grep mariadb
4. 将mysql-2设置为mysql-1的从服务器
1.在mysql-1 服务器终端上
输入:
mysql -uroot -p
输入后回车,让输入密码继续回车(yum一键安装mariadb默认密码为空!)
(http://anishell.cn/image/student/mysql-4.png)](http://anishell.cn/image/student/mysql-4.png)
2. 在mysql-1上创建授权用户
在mysql-1的数据库中输入
mysql> grant replication slave on *.* to 'tongbu'@'%' identified by '123456';
mysql> grant all on *.* to 'root'@'%' ; #授权本地用户访问
mysql> flush privileges;
3.查看mysql-1的当前binlog状态信息
mysql> show master status\G
*************************** 1. row ***************************
File: master-bin.000003
Position: 389
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
mysql>
记下
File: master-bin.000003
Position: 389
4. 在mysql-2服务器上指向mysql-1为master,并开启slave功能
mysql> change master to master_host='192.168.58.131',master_user='tongbu',master_password='123456',master_log_file='master-bin.000003',master_log_pos=389;#启动slave功能
mysql> start slave;#确定配置成功
mysql> show slave status\G #查看slave状态
****************************1.row ****************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.58.131
Master_User: tongbu
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000009
Relay_Log_Pos: 318
Relay_Master_Log_File: master-bin.000003
Slave_IO_Running: Yes # 这个值必须为Yes
Slave_SQL_Running: Yes # 这个值也必须为Yes
4. 将mysql-1设置为mysql-2的从服务器
1.在mysql-2 服务器终端上
输入:
mysql -uroot -p
输入后回车,让输入密码继续回车(yum一键安装mariadb默认密码为空!)
2. 在mysql-2上创建授权用户
在mysql-2的数据库中输入
mysql> grant replication slave on *.* to 'tongbu'@'%' identified by '123456';
mysql> grant all on *.* to 'root'@'%' ; #授权本地用户访问
mysql> flush privileges;
3.查看mysql-2的当前binlog状态信息
mysql> show master status\G
*************************** 1. row ***************************
File: master-bin.000003
Position: 389
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
mysql>
记下
File: master-bin.000003
Position: 389
4. 在mysql-1服务器上指向mysql-2为master,并开启slave功能
mysql> change master to master_host='192.168.58.130',master_user='tongbu',master_password='123456',master_log_file='master-bin.000003',master_log_pos=389;#启动slave功能
mysql> start slave;#确定配置成功
mysql> show slave status\G #查看slave状态
****************************1.row ****************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.58.130
Master_User: tongbu
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000009
Relay_Log_Pos: 318
Relay_Master_Log_File: master-bin.000003
Slave_IO_Running: Yes # 这个值必须为Yes
Slave_SQL_Running: Yes # 这个值也必须为Yes
5. 测试同步
远程连接mysql-1 和 mysql-2的数据库
在mysql-1新建数据库表ceshi
刷新mysql-2数据库,查询到ceshi,同步测试完成。
二. 配置keepalived高可用
1. 两台服务器mysql-1/mysql-2 都执行以下操作
yum -y install keepalived
2. 修改 mysql-1服务器的keepalived配置文件
vim /etc/keepalived/keepalived.conf
按o或i进入编辑模式
[root@mysql1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql-1 #此处的值必须唯一
}
vrrp_instance VI_1 {
state BACKUP #指定角色为backup,两台MySQL服务器的角色均为backup,设置backup将根据优先级决定主从
interface ens33 #指定承载虚拟IP的网卡
virtual_router_id 51 #指定组,同一个集群内的值必须一致。并且不可和局域网中的其他组冲突
priority 100 #优先级范围为:0~100
advert_int 1 #发vrrp包的时间间隔,即多久进行一次master选举(可认为是健康检查时间间隔)
nopreempt #不抢占,即允许一个priority比较低的节点作为master,
authentication { #认证区域
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VIP区域,指定vip地址
192.168.58.100
}
}
virtual_server 192.168.58.100 3306 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 2 #设置运行情况检查时间,单位是秒
lb_algo rr #设置后端调度算法
lb_kind DR #设置lvs实现负载均衡的机制,有NAT、TUN、DR三个模式,DR模式效率最高
persistence_timeout 60 #会话保持时间,单位是秒
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.58.131 3306 { #配置服务节点,这里指定的也就是本机的真实IP
weight -20 #设置权重
notify_down /etc/keepalived/bin/mysql.sh #检测到real_server的MySQL服务宕机后执行的脚本。
TCP_CHECK {
connect_port 3306 #健康检查端口
connect_timeout 3 #连接超时时间
retry 3 #重试次数
delay_before_retry 3 #重连间隔时间
}
}
}
3. 指定mysql-1的脚本目录
mkdir /etc/keepalived/bin
cd /etc/keepalived/bin
vim bin/mysql.sh
mysql.sh脚本内容
#!/bin/bash
pkill keepalived #停止keepalived服务
chmod +x bin/mysql.sh #赋予脚本执行权限
systemctl start keepalived #启动keepalived服务
4. 修改主机mysql-2的keepalived配置文件
cd /etc/keepalived/
vim /etc/keepalived/keepalived.conf
按o或i进入编辑模式
[root@mysql1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql-1 #此处的值必须唯一
}
vrrp_instance VI_1 {
state BACKUP #指定角色为backup,两台MySQL服务器的角色均为backup,设置backup将根据优先级决定主从
interface ens33 #指定承载虚拟IP的网卡
virtual_router_id 51 #指定组,同一个集群内的值必须一致。并且不可和局域网中的其他组冲突
priority 100 #优先级范围为:0~100
advert_int 1 #发vrrp包的时间间隔,即多久进行一次master选举(可认为是健康检查时间间隔)
nopreempt #不抢占,即允许一个priority比较低的节点作为master,
authentication { #认证区域
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VIP区域,指定vip地址
192.168.58.100
}
}
virtual_server 192.168.58.100 3306 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 2 #设置运行情况检查时间,单位是秒
lb_algo rr #设置后端调度算法
lb_kind DR #设置lvs实现负载均衡的机制,有NAT、TUN、DR三个模式,DR模式效率最高
persistence_timeout 60 #会话保持时间,单位是秒
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.58.130 3306 { #配置服务节点,这里指定的也就是本机的真实IP
weight -20 #设置权重
notify_down /etc/keepalived/bin/mysql.sh #检测到real_server的MySQL服务宕机后执行的脚本。
TCP_CHECK {
connect_port 3306 #健康检查端口
connect_timeout 3 #连接超时时间
retry 3 #重试次数
delay_before_retry 3 #重连间隔时间
}
}
}
5. 指定mysql-2的脚本目录
mkdir /etc/keepalived/bin
cd /etc/keepalived/bin
vim bin/mysql.sh
mysql.sh脚本内容
#!/bin/bash
pkill keepalived #停止keepalived服务
chmod +x bin/mysql.sh #赋予脚本执行权限
systemctl start keepalived #启动keepalived服务
三.测试高可用
现有192.168.58.131 192.168.58.130两台数据库服务器,互为主从
使用keepalived配置虚拟ip为 192.168.137.100
测试在连接到的 192.168.58.100数据库中新建一个表 ceshi2
刷新mysql-1/mysql-2 查询到ceshi2 完成
总结:
mariadb主要配置
grant replication slave on *.* to 'tongbu'@'%' identified by '123456'; #创建授权用户
show master status;
update user set host ='%' where user ='root';
grant all on *.* to 'root'@'%' ;
change master to master_host='192.168.xx.xx', #mysql-*的ip
master_user='tongbu',
master_password='123456',
master_log_file='master-bin.000003', #必须和master上查看到的名字一样
master_log_pos=389; #同上,这个值也是在master上查看到的
建议
1.使用scp远程复制或ssh连接工具传输相关配置文件keepalived.conf
scp /etc/keepalived/keepalived.conf root@192.168.58.xx.xx:/etc/keepalived
2.如果 Slave_IO_Running: No
通过查询master端的binlog状态信息
mysql> show master status\G
使用
change master to Master_Log_File='master-bin.000003',Master_Log_Pos=0;
命令保持一致
不足之处:
1. 简化了 /etc/my.cnf文件的配置
2. 没有配置时间同步(用于生产环境必须配置)
3. 没有演示停用任意一台mysql服务器测试 停用-启动后自动实现主从复制
4.等等...
版权申明
本文系作者 @admin 原创发布在安忆笔记站点。未经许可,禁止转载。
全部评论 1
纯路人
Google Chrome Android