简介:
Keepalived的作用是检测服务器的状态,如果有一台服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
Keepalived 的工作流程主要包括以下几个关键步骤:
vrrp_instance
,设置主从状态(MASTER
和 BACKUP
)、优先级、虚拟路由器 ID 等。vrrp_script
定义检测脚本,通常用于检测服务(如 MySQL 服务)的状态或服务器的健康状况。interval
)执行检测脚本。总的来说,Keepalived 通过心跳检测和优先级机制,实现了服务的高可用性和自动故障切换。
以下是在两台 CentOS 7 服务器上实现 MySQL 数据库主从备份,并利用 Keepalived 实现主服务器故障自动切换从服务器功能的详细步骤:
yum install mysql-server
/etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
server-id = 1
是指数据库的唯一ID号,默认从1开始。
log-bin = mysql-bin
启用二进制日志,备份复制其实就是根据日志来的。
systemctl restart mysqld
mysql> CREATE USER'epl'@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO'epl'@'%';
mysql> FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 2259 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
记录下 File
和 Position
的值。
/etc/my.cnf
[mysqld]
server-id=2
log-bin = mysql-bin
replicate-do-db = testdb
以上选项中,server-id = 2
表示从数据库ID,一定不能和主数据库一样。
replicate-do-db = testdb
设置了允许同步复制的数据库为testdb,如果不设置则可注释掉该行。
重启 MySQL 服务(同主服务器步骤)
执行同步命令
mysql> CHANGE MASTER TO MASTER_HOST='主服务器 IP', MASTER_USER='epl', MASTER_PASSWORD='password', MASTER_LOG_FILE='主服务器的 File 值', MASTER_LOG_POS=主服务器的 Position 值;
mysql> START SLAVE;
如果主数据库不断的写入数据,那么Position一直变化,不容易同步。可以到主数据库中,使用以下命令停止数据库写入操作
flush tables with read lock;
操作后别忘记恢复锁定进行解锁
unlock tables;
mysql> SHOW SLAVE STATUS\G;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.161
Master_User: epl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.00001
Read_Master_Log_Pos: 711642
Relay_Log_File: mariadb-relay-bin.000040
Relay_Log_Pos: 567390
Relay_Master_Log_File: mysql-bin.00001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: testdb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
查看Slave_IO_Running
和Slave_SQL_Running
是否都为yes(一定要全部为yes)
yum install keepalived
/etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
}
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_mysql
}
virtual_ipaddress {
10.0.0.167
}
nopreempt
}
以下是对上述 Keepalived 配置中每个参数的详细解释:
global_defs
: 全局定义部分。
router_id LVS_DEVEL
: 为 Keepalived 实例设置一个标识,通常用于在多个 Keepalived 实例之间进行区分。vrrp_script
: 用于定义一个 VRRP 脚本。
check_mysql
: 脚本的名称。script "/etc/keepalived/check_mysql.sh"
: 指定要执行的脚本路径。interval 5
: 表示每隔 5 秒执行一次该脚本。vrrp_instance
: 定义一个 VRRP 实例。
state MASTER
: 初始状态为主服务器。interface ens33
: 指定用于 VRRP 通信的网络接口。virtual_router_id 51
: 虚拟路由器的标识符,同一组 VRRP 实例的此值必须相同。priority 100
: 节点的优先级,数值越大优先级越高,决定主服务器的选举。advert_int 1
: 通告间隔,即向其他节点发送通告的时间间隔(单位为秒)。nopreempt
: 表示当此节点恢复正常时,不抢占当前的主服务器角色。authentication:
认证相关设置。
auth_type PASS
: 认证类型为密码认证。auth_pass 1111
: 认证密码。track_script
: 跟踪指定的脚本。
check_mysql
: 跟踪前面定义的名为 check_mysql
的脚本。virtual_ipaddress
: 定义虚拟 IP 地址,当此节点成为主服务器时,该 IP 地址将被绑定到指定的接口上。外部连接使用此虚拟IP地址创建vi /etc/keepalived/check_mysql.sh脚本文件:
#!/bin/bash
# 检查 MySQL 进程是否存在,存在返回0
if pgrep -f "mysqld" > /dev/null; then
exit 0
else
exit 1
fi
启动 Keepalived 服务,并设置开机启动
systemctl start keepalived
systemctl enable keepalived
/etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
}
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.167
}
track_script {
check_mysql
}
}
state BACKUP
:初始状态为备份服务器。
priority
:节点的优先级,数值越大优先级越高,决定主服务器的选举。
systemctl restart keepalived
systemctl enable keepalived
以上配置完毕后。测试停止主服务器或者关机主服务器后,MySQL连接都会切换到从服务器上。且主服务恢复后,不会抢占,等到从服务器故障后,主服务器再切回来。
请确保在配置过程中,根据实际的服务器环境和需求进行相应的调整。同时,要注意防火墙和网络设置,以确保服务器之间的通信正常。