在生产环境下,为防止数据库单点故障,编者在生产环境下采用了
Mysql+Keepalived
的方式部署了数据库主从同步。
当然,也可以采用failover
的方法,也是可以做到一个故障的切换。具体采用什么方式解决问题,还得根据个人的实际情况进行选择。
MySQL的安装
[root@scong ] wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
[root@scong ] yum -y localinstall mysql57-community-release-el7-8.noarch.rpm
[root@scong ] yum repolist enabled | grep "mysql.*-community.*"
[root@scong ] yum -y install mysql-community-server
[root@scong ] systemctl start mysqld
[root@scong ] grep 'temporary password' /var/log/mysqld.log
[root@scong ] mysql -uroot -p
当启动mysql的服务后,就可以查询的Mysql的初始化密码了,然后进行登录查看是否可行如下图所示。
如果不想那么麻烦,可以直接在my.cnf
文件下添加 skip-grant-tables
参数 直接跳过密码进行登录,然后使用update语句修改root的密码也是可以的:
Mysql数据库到这里就已经部署完成了,那么接下来就是部署Mysql的主从同步,编者这里将Mysql1作为主库,Mysql2作为从库进行主从同步的部署。
注意:两台数据库的数据必须保持一致
:
# 均在Mysql1以及Mysql2的Mysql配置文件上添加以下语句
[root@scong mysql1 ] vim /etc/my.cnf
server-id=1
log-bin=Sc-mysql1-bin
binlog_format=mixed
[root@scong mysql2 ] vim /etc/my.cnf
server-id=2
log-bin=Sc-mysql2-bin
binlog_format=mixed
sys-binlog=1
log_slave_updates=1 # 允许链式复制,在配置为互为主从时必须开启,编者在此次中只简单的做一主一从。
在修改完配置文件后,需要进入到两台数据库进行主从的配置操作:
注意: 具体操作对应哪台机器,切勿搞混
# Mysql1
[root@scong mysql1 ] mysql -uroot -p
mysql> show master status;
mysql> grant all on *.* to 'replicate'@'%' identified by '123456'; # 授权一个主从复制用户
# Mysql2
[root@scong mysql2 ] mysql -uroot -p
mysql> change master to master_host='192.168.16.31',
-> master_user='replicate',
-> master_password='123456',
-> master_log_file='Sc-mysql1-bin.000001',
-> master_log_pos=154;
mysql> start slave status\G;
# 如果以下都为yes,那么说明主从以及部署成功了
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
MySQL的主从同步已经搭建完成,那么接下来就是部署Keepalived。
Keepalived部署
Keepalived需要在两台主机上都进行安装,这样才能实现故障的切换。
在这里需要注意的几个点:
router_id
是唯一的;interface
必须是跟主机绑定的IP网卡名称一致;virtual_router_id
两台主机必须一致;virtual_ipaddress
两台主机的真实IP是不一样的;real_server
段的IP应该是主机对应的真是IP;
… …
[root@scong mysql1 ] yum -y install keepalived
[root@scong mysql1 ] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id Scon-keepalive1
}
# 检查数据库健康状态
vrrp_script monitor_mysql
{
script "/data/sh/check_mysql.sh"
interval 1
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736 # 配置网卡名称
virtual_router_id 51
priority 150
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.16.254
}
}
virtual_server 192.168.16.254 3306 {
delay_loop 2
lb_algo rr
lb_kind DR
# nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.16.31 3306 {
weight 2
inhibit_on_failure
notify_down /data/sh/check_mysql.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
配置好keepalived后,启动keepalived并查看虚拟IP是否已经生效,效果如下图:
[root@scong mysql1 ] systemctl start keepalived.service
[root@scong mysql1 ] systemctl status keepalived.service
[root@scong mysql1 ] ip addr | grep 192.168.16.254
最后,借助 检验数据库存活的脚本来判断数据库是否存活来做一个故障切换。我们可以将虚拟IP所在的主机数据库服务停止掉,看虚拟IP是否会漂移到从库的主机,如果主从同步部署成功。没有则需要查看下出错提示并解决!
感谢阅读,本文旨在提供参考,如有错误,欢迎大家指正。帮助编者不断的改进!