机器
角色
mysql-0
master\slave
mysql-1
slave\master
最近对线上集群做高可用升级,在对比了几个集群策略之后,综合现有资源、复杂度、可用度之后,选择了两个:
MySQL双主的互为备份的2节点集群
MySQL基于wsrep协议的Galera Cluster的mysql多主集群
初步处于复杂度考虑,选择了方案一。
方案一又有两个版本:
利用keepalived做活跃监督
利用k8s service做负载均衡,达到和活跃监督一样的效果
我们选择最简单的k8s service,先做测试。无论哪一种,首先都要实现双主的互为备份的2节点部署。
一、部署
选择 dockerhub上的MySQL:5.7.32作为基础镜像。依赖于镜像本身的启动命令,做修改,然后部署。
1.Dockerfile
以dockerhub上的mysql为基础镜像
From mysql:5.7.32
COPY my.cnf /etc/mysql/
COPY replication.sh /usr/local/bin/
COPY docker-entrypoint.sh /usr/local/bin/
ENV MYSQL_ROOT_PASSWORD=123456
RUN chmod 755 /usr/local/bin/replication.sh && \
chmod a+x /usr/local/bin/replication.sh && \
chmod 755 /usr/local/bin/docker-entrypoint.sh && \
chmod a+x /usr/local/bin/docker-entrypoint.sh && \
chmod 755 /etc/mysql/my.cnf && \
chmod a+x /etc/mysql/my.cnf && \
chown -R mysql:mysql /usr/local/bin/replication.sh && \
chown -R mysql:mysql /usr/sbin/mysqld && \
chown -R mysql:mysql /etc/mysql/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3306 33060
CMD ["mysqld"]
2.docker-entrypoint.sh
新增一个方法:mysql_replication
mysql_replication() {
echo 'start to do the mysql replication'
master_host=''
if [[ $MY_POD_NAME = 'mysql-0' ]];then
master_host='mys