赞
踩
GreatSQL Docker 镜像不支持在 Docker 中使用 VIP 功能。原因如下:
在 Docker 中,无法用 systemd 方式来启动 GreatSQL。
在打包时,也没有将 mysqld 程序文件属主改为 root,并加上 setcap 提权。
因此,想要在 Docker 中使用 GreatSQL VIP 的话,需要自行处理。下面介绍如何在 Docker 容器中使用 GreatSQL 绑定 VIP 功能。
如果想要在 Docker 中使用 GreatSQL VIP,可以采用以下方式实现:
创建一个全新容器,并加上 --privileged
参数。
安装 GreatSQL 软件包(二进制包或 RPM 包都行)。
修改 mysqld 程序文件属主为 root,并利用 setcap 给 mysqld 程序文件加上提权属性。
正确配置相关参数。
正常地,在 Docker 容器中是无法执行绑定 VIP 等影响操作系统层的操作,以避免发生安全风险,这就需要先行提权。
想要在 Docker 容器中使用 VIP,在创建容器时,需要先加上 --privileged
参数,例如:
$ docker run -itd --privileged --hostname t1 --name t1 centos:8 bash
进入容器,并查看初始 IP 信息:
- [root@t1 /]# ip a
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- 233: eth0@if234: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
- link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
- inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
- valid_lft forever preferred_lft forever
接下来,安装 GreatSQL,这里采用 RPM 包方式,具体过程不赘述。
执行提权操作并确认:
- [root@t1 /]# setcap CAP_NET_ADMIN,CAP_NET_RAW+ep /usr/sbin/mysqld
- [root@t1 /]# chown root:root /usr/sbin/mysqld
-
- [root@t1 /]# getcap /usr/sbin/mysqld
- /usr/sbin/mysqld = cap_net_admin,cap_net_raw+ep
-
- [root@t1 /]# ls -la /usr/sbin/mysqld
- -rwxr-xr-x 1 root root 67858088 Jul 30 08:18 /usr/sbin/mysqld
修改 /etc/my.cnf 配置文件(只展示部分相关内容):
- [mysqld]
- ...
- user = root
- ...
- loose-plugin_load_add = 'greatdb_ha.so'
- loose-greatdb_ha_enable_mgr_vip = ON
- loose-greatdb_ha_mgr_vip_nic = 'eth0'
- loose-greatdb_ha_mgr_vip_ip = '172.17.0.40'
- loose-greatdb_ha_mgr_vip_mask = '255.255.0.0'
- loose-greatdb_ha_port = 33062
- #loose-greatdb_ha_mgr_read_vip_ips = "172.17.0.41,172.17.0.42"
- loose-greatdb_ha_mgr_read_vip_floating_type = "TO_ANOTHER_SECONDARY"
- loose-greatdb_ha_send_arp_packge_times = 5
- loose-greatdb_ha_mgr_exit_primary_kill_connection_mode = OFF
- report_host = 172.17.0.4
- report_port = 3306
- ...
在已经完成 GreatSQL 数据初始化操作之后,启动 GreatSQL 服务进程(确认是以 root 身份运行):
- [root@t1 /]# /usr/sbin/mysqld &
-
- [root@t1 /]# ps -ef | grep mysqld
- root 1518 1 1 07:02 ? 00:00:23 /usr/sbin/mysqld
进入 GreatSQL 查看 VIP 绑定/运行状态:
- [root@GreatSQL][(none)]> SHOW GLOBAL VARIABLES LIKE 'greatdb_ha%';
- +--------------------------------------------------+---------------------------------------------------+
- | Variable_name | Value |
- +--------------------------------------------------+---------------------------------------------------+
- | greatdb_ha_enable_mgr_vip | ON |
- | greatdb_ha_force_change_mgr_vip | OFF |
- | greatdb_ha_gateway_address | |
- | greatdb_ha_mgr_exit_primary_kill_connection_mode | OFF |
- | greatdb_ha_mgr_read_vip_floating_type | TO_ANOTHER_SECONDARY |
- | greatdb_ha_mgr_read_vip_ips | |
- | greatdb_ha_mgr_vip_broad | 255.255.255.255 |
- | greatdb_ha_mgr_vip_ip | 172.17.0.40 |
- | greatdb_ha_mgr_vip_mask | 255.255.0.0 |
- | greatdb_ha_mgr_vip_nic | eth0 |
- | greatdb_ha_port | 33062 |
- | greatdb_ha_send_arp_packge_times | 5 |
- | greatdb_ha_vip_tope | bcd374fc-593c-11ef-a05e-0242ac110004::172.17.0.40 |
- +--------------------------------------------------+---------------------------------------------------+
- 13 rows in set (0.00 sec)
查看 VIP 绑定状态:
- [root@t1 /]# ip a
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- 233: eth0@if234: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
- link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
- inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
- valid_lft forever preferred_lft forever
- inet 172.17.0.40/16 brd 172.17.255.255 scope global secondary eth0:0
- valid_lft forever preferred_lft forever
在外部宿主系统环境下检测 VIP 是否可连通:
- $ ping 172.17.0.40
- PING 172.17.0.40 (172.17.0.40) 56(84) bytes of data.
- 64 bytes from 172.17.0.40: icmp_seq=1 ttl=64 time=0.038 ms
- 64 bytes from 172.17.0.40: icmp_seq=2 ttl=64 time=0.032 ms
- ...
可以看到,已经正确绑定 VIP 并且可连通。
Enjoy GreatSQL :)
文章推荐:
想看更多技术好文,点个“在看”吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。