Project

General

Profile

Openstack Installation TTNN » History » Version 249

Mehdi Abaakouk, 11/04/2015 12:15 PM

1 43 Laurent GUERBY
{{>toc}}
2 43 Laurent GUERBY
3 159 Laurent GUERBY
h1. Openstack Installation tetaneutral.net
4 1 Mehdi Abaakouk
5 44 Laurent GUERBY
h2. Liens
6 44 Laurent GUERBY
7 204 Mehdi Abaakouk
* [[Openstack Management TTNN]]
8 204 Mehdi Abaakouk
* [[Openstack Setup VM pas dans openstack]]
9 242 Mehdi Abaakouk
* [[Openstack Installation nouvelle node du cluster]]
10 44 Laurent GUERBY
* http://ceph.com/docs/master/rados/operations/cache-tiering/
11 44 Laurent GUERBY
* http://ceph.com/docs/master/rados/operations/crush-map/
12 44 Laurent GUERBY
13 4 Mehdi Abaakouk
h2. Installation
14 4 Mehdi Abaakouk
15 213 Laurent GUERBY
L'installation initiale est composée de :
16 4 Mehdi Abaakouk
17 4 Mehdi Abaakouk
* 3 hyperviseurs (compute node) qui contiendront 1 ceph-mon, N ceph-osd, nova-compute (qui lance les VM), neutron-openvswitch-agent (qui configure le réseau des vms)
18 4 Mehdi Abaakouk
* 1 VM (controler node), qui contient tous les services de management d'openstack (nova, cinder, glance, neutron)
19 4 Mehdi Abaakouk
20 4 Mehdi Abaakouk
Les étapes d'installation sont les suivantes:
21 4 Mehdi Abaakouk
* Préparation manuelle de la VM de management sur un des hyperviseurs
22 4 Mehdi Abaakouk
* Installation de ceph et openstack sur toutes les machines avec puppet
23 4 Mehdi Abaakouk
* Déplacement de la VM de management d'openstack dans openstack.
24 4 Mehdi Abaakouk
25 33 Mehdi Abaakouk
h3. Information sur le puppet master:
26 33 Mehdi Abaakouk
27 213 Laurent GUERBY
La configuration et les modules puppet utilisés par tetaneutral.net se trouvent la:
28 33 Mehdi Abaakouk
29 33 Mehdi Abaakouk
> http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster
30 33 Mehdi Abaakouk
> http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp
31 33 Mehdi Abaakouk
32 213 Laurent GUERBY
Seulement les 3 classes suivantes sont spécifique à http://tetaneutral.net, le reste est réutilisable à condition de changer les ip, hostname, uuid et password :
33 33 Mehdi Abaakouk
34 36 Mehdi Abaakouk
> class { 'ttnn::server': }
35 36 Mehdi Abaakouk
> class { 'backup::client': }
36 36 Mehdi Abaakouk
> class { 'sexymotd': }
37 33 Mehdi Abaakouk
38 213 Laurent GUERBY
Les modules qui sont nécessaire pour openstack pour le reste du fichier sont :
39 33 Mehdi Abaakouk
40 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-apache.git 
41 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-apt 
42 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-ceph.git 
43 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-cinder.git 
44 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-concat.git 
45 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-glance.git 
46 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-horizon.git 
47 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-inifile.git 
48 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-keystone.git 
49 33 Mehdi Abaakouk
> https://github.com/camptocamp/puppet-kmod.git 
50 33 Mehdi Abaakouk
> https://github.com/saz/puppet-memcached.git 
51 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-mysql.git 
52 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-neutron.git 
53 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-nova.git 
54 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-rabbitmq.git 
55 33 Mehdi Abaakouk
> https://github.com/nanliu/puppet-staging.git 
56 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-stdlib.git 
57 33 Mehdi Abaakouk
> https://github.com/duritong/puppet-sysctl.git 
58 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-vcsrepo.git 
59 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-vswitch.git 
60 36 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-xinetd.git
61 33 Mehdi Abaakouk
62 33 Mehdi Abaakouk
h3. Préparation réseaux des hosts:
63 29 Mehdi Abaakouk
64 1 Mehdi Abaakouk
65 126 Mehdi Abaakouk
Preparation des bridges openvswitch:
66 126 Mehdi Abaakouk
67 1 Mehdi Abaakouk
<pre>
68 130 Mehdi Abaakouk
$ apt-get install openvswitch-switch 
69 126 Mehdi Abaakouk
$ modprobe vhost-net
70 126 Mehdi Abaakouk
$ modprobe tun
71 126 Mehdi Abaakouk
$ modprobe loop
72 148 Mehdi Abaakouk
73 148 Mehdi Abaakouk
# On créé un switch br-eth0
74 151 Mehdi Abaakouk
ovs-vsctl add-br br-eth0
75 148 Mehdi Abaakouk
# On rajoute une petite bricole pour openstack 
76 151 Mehdi Abaakouk
ovs-vsctl br-set-external-id br-eth0 bridge-id br-eth0
77 148 Mehdi Abaakouk
# On ajoute le port eth0 dans le switch
78 151 Mehdi Abaakouk
ovs-vsctl add-port br-eth0 eth0  # Si aucun trunk vlan n'est spécifié, c'est un trunk avec tous les vlans 
79 148 Mehdi Abaakouk
80 148 Mehdi Abaakouk
# On créé des interfaces réseau utilisable sur la machine avec des vlans:
81 155 Mehdi Abaakouk
ovs-vsctl add-br vlan3132 br-eth0 3132
82 151 Mehdi Abaakouk
ovs-vsctl add-br vlan3175 br-eth0 3175
83 151 Mehdi Abaakouk
ovs-vsctl add-br vlan3199 br-eth0 3199
84 148 Mehdi Abaakouk
85 150 Mehdi Abaakouk
# On s'assure que eth0 sera toujours up
86 151 Mehdi Abaakouk
ovs-ofctl mod-port br-eth0 eth0 up
87 150 Mehdi Abaakouk
88 126 Mehdi Abaakouk
</pre>
89 1 Mehdi Abaakouk
90 126 Mehdi Abaakouk
_note: Les bridges openvswitch sont mémorisés et recréés automatiquement par le service openvswitch-switch_
91 126 Mehdi Abaakouk
92 133 Mehdi Abaakouk
On install le fichier attachment:rc.local dans /etc/
93 1 Mehdi Abaakouk
94 1 Mehdi Abaakouk
On re-charge le fichier attachment:rc.local
95 133 Mehdi Abaakouk
96 133 Mehdi Abaakouk
<pre>
97 126 Mehdi Abaakouk
bash -x /etc/rc.local
98 1 Mehdi Abaakouk
</pre>
99 126 Mehdi Abaakouk
100 126 Mehdi Abaakouk
101 126 Mehdi Abaakouk
Sur h7.tetaneutral.net le routage est le suivant
102 73 Mehdi Abaakouk
103 73 Mehdi Abaakouk
<pre>
104 155 Mehdi Abaakouk
ip route add 89.234.156.249/32 dev eth0.3132
105 155 Mehdi Abaakouk
ip route add 89.234.156.251/32 dev eth0.3132
106 155 Mehdi Abaakouk
ip route add 89.234.156.252/32 dev eth0.3132
107 155 Mehdi Abaakouk
ip route add 89.234.156.253/32 dev eth0.3132
108 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:f900::/56 dev eth0.3132
109 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:fb00::/56 dev eth0.3132
110 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:fc00::/56 dev eth0.3132
111 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:fd00::/56 dev eth0.3132
112 16 Mehdi Abaakouk
</pre>
113 1 Mehdi Abaakouk
114 20 Mehdi Abaakouk
h3. Preparation de la VM de management, le controlleur
115 6 Mehdi Abaakouk
116 6 Mehdi Abaakouk
h4. Installation des prérequis
117 6 Mehdi Abaakouk
118 1 Mehdi Abaakouk
<pre>
119 129 Mehdi Abaakouk
$ apt-get install libvirt-bin openstack-debian-images virtinst
120 131 Mehdi Abaakouk
#NOTE(sileht): temporairement récupérer la dernière version:
121 131 Mehdi Abaakouk
$ curl -# http://anonscm.debian.org/cgit/openstack/openstack-debian-images.git/plain/build-openstack-debian-image > /usr/sbin/build-openstack-debian-image
122 20 Mehdi Abaakouk
</pre>
123 1 Mehdi Abaakouk
124 1 Mehdi Abaakouk
h4. Preparation de l'image de la VM
125 92 Mehdi Abaakouk
126 20 Mehdi Abaakouk
<pre>
127 20 Mehdi Abaakouk
$ vim hook.sh
128 1 Mehdi Abaakouk
set -xv
129 20 Mehdi Abaakouk
130 92 Mehdi Abaakouk
echo "openstack" > $BODI_CHROOT_PATH/etc/hostname
131 40 Mehdi Abaakouk
132 46 Mehdi Abaakouk
cat > $BODI_CHROOT_PATH/etc/resolv.conf <<EOF
133 46 Mehdi Abaakouk
domain tetaneutral.net
134 46 Mehdi Abaakouk
search tetaneutral.net
135 1 Mehdi Abaakouk
nameserver 8.8.8.8
136 46 Mehdi Abaakouk
EOF
137 46 Mehdi Abaakouk
138 92 Mehdi Abaakouk
cat > $BODI_CHROOT_PATH/etc/network/interfaces <<EOF
139 6 Mehdi Abaakouk
auto lo
140 20 Mehdi Abaakouk
iface lo inet loopback
141 1 Mehdi Abaakouk
auto eth0
142 6 Mehdi Abaakouk
iface eth0 inet manual
143 4 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0
144 1 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0
145 4 Mehdi Abaakouk
  up ip link set eth0 up
146 10 Mehdi Abaakouk
  up ip addr add 89.234.156.249/32 dev eth0
147 152 Mehdi Abaakouk
  up ip route add 91.224.149.0/24 dev eth0
148 152 Mehdi Abaakouk
  up ip route add default via 91.224.149.254
149 20 Mehdi Abaakouk
150 1 Mehdi Abaakouk
iface eth0 inet6 static
151 7 Mehdi Abaakouk
    pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0
152 4 Mehdi Abaakouk
    pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0
153 21 Mehdi Abaakouk
    address 2a01:6600:8083:f900::1
154 12 Mehdi Abaakouk
    netmask 56
155 4 Mehdi Abaakouk
    gateway fe80::31
156 4 Mehdi Abaakouk
157 4 Mehdi Abaakouk
auto eth1
158 5 Mehdi Abaakouk
iface eth1 inet static
159 13 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth1.accept_ra=0
160 18 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth1.autoconf=0
161 18 Mehdi Abaakouk
  address 192.168.3.100
162 18 Mehdi Abaakouk
  netmask 255.255.255.0
163 18 Mehdi Abaakouk
EOF
164 18 Mehdi Abaakouk
165 18 Mehdi Abaakouk
mkdir -p $BODI_CHROOT_PATH/root/.ssh
166 59 Mehdi Abaakouk
chmod 600 $BODI_CHROOT_PATH/root/.ssh
167 59 Mehdi Abaakouk
cat >> $BODI_CHROOT_PATH/root/.ssh/authorized_keys <<EOF
168 11 Mehdi Abaakouk
ssh-dss AAAAB3NzaC1kc3MAAACBAJtnGLvuz4uVD6fnERDxDi/C0UyzwCiKmgNtEessopREYasAX4Gu6Fg10jAyIL5Nuc7YDnqj//pOfxNjD7hp99a2ZmkRQgh/ltClxYML9fqhBHgsUCpVse9nOYDHDnDgvXIPRSDUHat2UFpdchHVrFURNLIlZnBztsr+GCDURTV/AAAAFQD9SrBcH49ltaKOm6V5ssCPmgs1SwAAAIAbAvkQ3/tMzzdACO5B9s5Yb3ZuM7XImm0iqufivVf2Xy39g8HOBulUsN7eKEGPhVriqNolgIO7q7tVgYAff4/NE4yDP0Kp0SPg4tjt2yFJuL31Y3wzwHjnKrjgNlDSLl3uZnRXSipwUMwGKbdHB6NZSqlq192VKbHilQ00pbiMlAAAAIB5dfB1lVHkJ0o5CcaVQRPbca9DvbbRwnoTSmKHc5DUcqsPqDhS07CkM9ZcJuY1Nh4wGl4Q9kArj7Tnsvvygf/HReSUcIk4+nbDytJ8/pca/Qx4fzQQyppa94TylN62LSFT6MIJKLoMwYa0dQURT7Mv5+9Qj2vk5pZ38w2iQ9zVCg== root@h1
169 4 Mehdi Abaakouk
EOF
170 4 Mehdi Abaakouk
171 6 Mehdi Abaakouk
sed -i -e 's/^.*Port.*$/Port 2222/' -e 's/^[# ]*PasswordAuthentication.*$/PasswordAuthentication no/' $BODI_CHROOT_PATH/etc/ssh/sshd_config
172 4 Mehdi Abaakouk
chroot $BODI_CHROOT_PATH dpkg-reconfigure openssh-server
173 4 Mehdi Abaakouk
chroot $BODI_CHROOT_PATH apt-get purge -y cloud-init*
174 8 Mehdi Abaakouk
</pre>
175 1 Mehdi Abaakouk
176 90 Mehdi Abaakouk
<pre>
177 90 Mehdi Abaakouk
$ chmod +x hook.sh
178 156 Mehdi Abaakouk
$ build-openstack-debian-image --image-size 20  --release jessie -u http://apt.tetaneutral.net/debian/ -s http://apt.tetaneutral.net/debian/ --hook-script $(pwd)/hook.sh -e acpi-support
179 90 Mehdi Abaakouk
$ mv debian-jessie-7.0.0-3-amd64.raw /openstack.raw 
180 90 Mehdi Abaakouk
$ rm debian-jessie-7.0.0-3-amd64.qcow2
181 90 Mehdi Abaakouk
</pre>
182 90 Mehdi Abaakouk
183 90 Mehdi Abaakouk
_note: la derniere commande lancée par le script doit être 'qemu-img convert -c -f raw .... , sinon l'image de bootera pas_
184 90 Mehdi Abaakouk
_note(jessie): si l'erreur est celle ci-dessous, relancer manuellement 'kpartx -d debian-jessie-7.0.0-3-amd64.raw' jusqu'a ce que l'erreur disparaissent et le .raw est utilisable:_
185 90 Mehdi Abaakouk
<pre>
186 6 Mehdi Abaakouk
+ 'kpartx -d debian-jessie-7.0.0-3-amd64.raw'
187 1 Mehdi Abaakouk
device-mapper: remove ioctl on loop0p1 failed: Device or resource busy
188 1 Mehdi Abaakouk
loop deleted : /dev/loop0
189 4 Mehdi Abaakouk
</pre>
190 93 Mehdi Abaakouk
_note: si parted freeze -> lancer /etc/init.d/udev restart_
191 19 Mehdi Abaakouk
192 128 Mehdi Abaakouk
193 128 Mehdi Abaakouk
On garde l'image raw qui sera importable dans ceph plus tard et on la mets à la racine pour qui l'utilisateur libvirt puisse y accéder.
194 19 Mehdi Abaakouk
195 24 Mehdi Abaakouk
h4. Installation de la VM
196 19 Mehdi Abaakouk
197 1 Mehdi Abaakouk
<pre>
198 1 Mehdi Abaakouk
$
199 153 Mehdi Abaakouk
$ virt-install --name openstack --ram 2048 --network bridge=br-eth0,model=virtio --network bridge=br-eth0,model=virtio --network bridge=br-eth0,model=virtio --nographics --serial pty --wait -1 --noreboot --autostart --disk /openstack.raw,bus=virtio,cache=none,io=native --import
200 153 Mehdi Abaakouk
201 153 Mehdi Abaakouk
$ virsh edit openstack
202 153 Mehdi Abaakouk
 
203 153 Mehdi Abaakouk
# Pour chaque bridge ajouter, le vlan et openvswitch comme ceci:
204 157 Mehdi Abaakouk
#    <vlan><tag id='3132'/></vlan><virtualport type='openvswitch'/>
205 153 Mehdi Abaakouk
206 144 Mehdi Abaakouk
$ virsh  start openstack
207 1 Mehdi Abaakouk
$ ssh root@89.234.156.249 -p 2222
208 19 Mehdi Abaakouk
</pre>
209 19 Mehdi Abaakouk
210 24 Mehdi Abaakouk
Une fois connecté à la VM:
211 26 Mehdi Abaakouk
212 26 Mehdi Abaakouk
<pre>
213 4 Mehdi Abaakouk
$ apt-get install puppet
214 26 Mehdi Abaakouk
$ puppet agent --enable
215 32 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
216 26 Mehdi Abaakouk
Info: Caching certificate for ca
217 34 Mehdi Abaakouk
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
218 34 Mehdi Abaakouk
Info: Creating a new SSL certificate request for openstack.tetaneutral.net
219 35 Mehdi Abaakouk
Info: Certificate Request fingerprint (SHA256): AE:72:47:40:A0:E2:F4:59:BA:39:FA:3D:C2:A7:C9:1B:9F:87:A5:B7:65:3A:F9:D4:DE:AF:E2:A3:02:41:0F:2E
220 94 Mehdi Abaakouk
Info: Caching certificate for ca
221 35 Mehdi Abaakouk
Exiting; no certificate found and waitforcert is disabled
222 35 Mehdi Abaakouk
</pre>
223 35 Mehdi Abaakouk
224 35 Mehdi Abaakouk
Sur le puppetmaster:
225 35 Mehdi Abaakouk
226 35 Mehdi Abaakouk
<pre>
227 35 Mehdi Abaakouk
$ puppet ca sign openstack.tetaneutral.net 
228 35 Mehdi Abaakouk
</pre>
229 35 Mehdi Abaakouk
_note: si un vieux cert existe: puppet ca revoke openstack.tetaneutral.net ; puppet cert clean openstack.tetaneutral.net; puppet node clean openstack.tetaneutral.net_
230 35 Mehdi Abaakouk
231 35 Mehdi Abaakouk
De nouveau sur la VM:
232 35 Mehdi Abaakouk
233 35 Mehdi Abaakouk
<pre>
234 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
235 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
236 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
237 35 Mehdi Abaakouk
</pre>
238 64 Mehdi Abaakouk
239 35 Mehdi Abaakouk
Il ne doit plus y avoir d'erreur la 3°/4° fois.
240 35 Mehdi Abaakouk
241 35 Mehdi Abaakouk
h3. Configuration des hyperviseurs
242 35 Mehdi Abaakouk
243 35 Mehdi Abaakouk
Une fois la configuration réseau faite, tout ce fait avec puppet:
244 35 Mehdi Abaakouk
245 35 Mehdi Abaakouk
<pre>
246 35 Mehdi Abaakouk
$ apt-get install puppet
247 35 Mehdi Abaakouk
$ puppet agent --enable
248 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
249 35 Mehdi Abaakouk
Info: Caching certificate for ca
250 35 Mehdi Abaakouk
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
251 35 Mehdi Abaakouk
Info: Creating a new SSL certificate request for openstack.tetaneutral.net
252 35 Mehdi Abaakouk
Info: Certificate Request fingerprint (SHA256): AE:72:47:40:A0:E2:F4:59:BA:39:FA:3D:C2:A7:C9:1B:9F:87:A5:B7:65:3A:F9:D4:DE:AF:E2:A3:02:41:0F:2E
253 35 Mehdi Abaakouk
Info: Caching certificate for ca
254 35 Mehdi Abaakouk
Exiting; no certificate found and waitforcert is disabled
255 35 Mehdi Abaakouk
</pre>
256 35 Mehdi Abaakouk
257 101 Mehdi Abaakouk
Sur le puppetmaster:
258 35 Mehdi Abaakouk
259 35 Mehdi Abaakouk
<pre>
260 35 Mehdi Abaakouk
$ puppet ca sign openstack.tetaneutral.net 
261 35 Mehdi Abaakouk
</pre>
262 35 Mehdi Abaakouk
_note: si un vieux cert existe: puppet ca revoke openstack.tetaneutral.net ; puppet cert clean openstack.tetaneutral.net; puppet node clean openstack.tetaneutral.net_
263 35 Mehdi Abaakouk
264 35 Mehdi Abaakouk
De nouveau sur la VM:
265 35 Mehdi Abaakouk
266 35 Mehdi Abaakouk
<pre>
267 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
268 100 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
269 100 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
270 100 Mehdi Abaakouk
</pre>
271 100 Mehdi Abaakouk
272 35 Mehdi Abaakouk
Il ne doit plus y avoir d'erreur la 3°/4° fois.
273 1 Mehdi Abaakouk
274 187 Mehdi Abaakouk
h3. Information sur la configuration d'un hyperviseur sur le puppet master
275 37 Mehdi Abaakouk
276 38 Mehdi Abaakouk
La configuration puppet ressemble à :
277 38 Mehdi Abaakouk
278 109 Mehdi Abaakouk
<pre>
279 1 Mehdi Abaakouk
node "gX.tetaneutral.net" inherits openstack_node_common {
280 120 Mehdi Abaakouk
  # Configuration du routerid et de l'AS number de cette machine
281 1 Mehdi Abaakouk
  # Il faut aussi mettre la conf bgp de h7 ainsi que les fichiers 
282 1 Mehdi Abaakouk
  # /etc/puppet/manifests/files/openstack-bird.conf.erb et
283 125 Mehdi Abaakouk
  # /etc/puppet/manifests/files/openstack-bird6.conf.erb
284 125 Mehdi Abaakouk
  # pour ajouter cette AS interne
285 97 Mehdi Abaakouk
  ttnn_os_bird {'198.51.100.1': asnum => "65001"}
286 109 Mehdi Abaakouk
287 120 Mehdi Abaakouk
  # Dans le cas d'une moniteur ceph, mais uniquement 3 suffissent, on a déjà g1,g2,g3
288 109 Mehdi Abaakouk
  ttnn_ceph_mon {$::hostname:}
289 88 Mehdi Abaakouk
  # Sinon utilisait:
290 88 Mehdi Abaakouk
  # class{"ttnn_ceph_osd_only": }
291 109 Mehdi Abaakouk
292 88 Mehdi Abaakouk
  # La partie Openstack, l'uuid doit être unique par machine (générer avec uuid-gen)
293 109 Mehdi Abaakouk
  ttnn_os_compute {"9d26ec10-a48b-4f0f-a122-f10ed16d270f": }
294 109 Mehdi Abaakouk
}
295 109 Mehdi Abaakouk
</pre>
296 109 Mehdi Abaakouk
297 109 Mehdi Abaakouk
h3. Déplacement du disk du controlleur dans le cluster ceph
298 109 Mehdi Abaakouk
299 97 Mehdi Abaakouk
Les recettes puppet on créé un pool disks pour les mettres les VMs et volumes de VM
300 97 Mehdi Abaakouk
301 109 Mehdi Abaakouk
302 97 Mehdi Abaakouk
Sur g1, on import le disque de la VM dans ceph et on modifie la conf libvirt:
303 97 Mehdi Abaakouk
304 109 Mehdi Abaakouk
<pre>
305 111 Mehdi Abaakouk
$ virsh shutdown openstack
306 1 Mehdi Abaakouk
$ rbd -p disks import /var/lib/ceph/osd/ceph-0/openstack.raw  openstack-disk
307 1 Mehdi Abaakouk
$ virsh edit openstack
308 1 Mehdi Abaakouk
</pre>
309 120 Mehdi Abaakouk
310 109 Mehdi Abaakouk
Remplacer: 
311 112 Mehdi Abaakouk
<pre>
312 109 Mehdi Abaakouk
    <disk type='file' device='disk'>
313 109 Mehdi Abaakouk
      <driver name='qemu' type='raw' cache='none' io='native'/>
314 109 Mehdi Abaakouk
      <source file='/var/lib/ceph/osd/ceph-0/openstack.raw'/>
315 110 Mehdi Abaakouk
      <target dev='vda' bus='virtio'/>
316 109 Mehdi Abaakouk
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
317 97 Mehdi Abaakouk
    </disk>
318 97 Mehdi Abaakouk
</pre>
319 109 Mehdi Abaakouk
320 97 Mehdi Abaakouk
Par:
321 97 Mehdi Abaakouk
322 109 Mehdi Abaakouk
<pre>
323 109 Mehdi Abaakouk
    <disk type='network' device='disk'>
324 109 Mehdi Abaakouk
        <driver name='qemu' type='raw'/>
325 212 Mehdi Abaakouk
        <source protocol='rbd' name='disks/openstack-disk' />
326 97 Mehdi Abaakouk
        </source>
327 97 Mehdi Abaakouk
        <auth username='openstack-service'>
328 109 Mehdi Abaakouk
            <secret type='ceph' uuid='1fe74663-8dfa-486c-bb80-3bd94c90c967'/>
329 97 Mehdi Abaakouk
        </auth>
330 97 Mehdi Abaakouk
        <target dev='vda' bus='virtio'/>
331 97 Mehdi Abaakouk
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
332 97 Mehdi Abaakouk
    </disk>
333 97 Mehdi Abaakouk
</pre>
334 97 Mehdi Abaakouk
335 97 Mehdi Abaakouk
La clé ceph pour libvirt a déjà été installé par puppet pour avoir sont uuid:
336 97 Mehdi Abaakouk
337 97 Mehdi Abaakouk
<pre>
338 97 Mehdi Abaakouk
$ virsh secret-list
339 97 Mehdi Abaakouk
 UUID                                  Usage
340 97 Mehdi Abaakouk
--------------------------------------------------------------------------------
341 97 Mehdi Abaakouk
 1fe74663-8dfa-486c-bb80-3bd94c90c967  ceph client.openstack-service secret
342 97 Mehdi Abaakouk
</pre>
343 97 Mehdi Abaakouk
344 97 Mehdi Abaakouk
Puis on démarre
345 97 Mehdi Abaakouk
346 97 Mehdi Abaakouk
<pre>
347 97 Mehdi Abaakouk
$ virsh start openstack
348 97 Mehdi Abaakouk
</pre>
349 97 Mehdi Abaakouk
350 97 Mehdi Abaakouk
351 97 Mehdi Abaakouk
Ca marche !
352 97 Mehdi Abaakouk
353 97 Mehdi Abaakouk
<pre>
354 68 Mehdi Abaakouk
$ ssh openstack.t
355 68 Mehdi Abaakouk
X11 forwarding request failed on channel 0
356 68 Mehdi Abaakouk
357 68 Mehdi Abaakouk
  server: openstack.tetaneutral.net
358 102 Mehdi Abaakouk
  system: Debian jessie/sid, kernel 3.14-2-amd64, puppet 3.6.1
359 1 Mehdi Abaakouk
     cpu: 1/1 (QEMU Virtual CPU version 2.1.0)
360 102 Mehdi Abaakouk
  memory: 1.96 GB
361 1 Mehdi Abaakouk
362 102 Mehdi Abaakouk
    eth0: 52:54:00:90:d8:c7 / 89.234.156.249 / 2a01:6600:8083:f900::1
363 102 Mehdi Abaakouk
    eth1: 52:54:00:13:fa:13 / 192.168.3.100
364 68 Mehdi Abaakouk
365 68 Mehdi Abaakouk
 modules: openstack_node_common ttnn::server resolver checkmk::agent checkmk::client rsyslog::client rsyslog apt apt::update puppet nullmailer backup::client sexymotd 
366 68 Mehdi Abaakouk
                            _             _    
367 68 Mehdi Abaakouk
  ___  _ __   ___ _ __  ___| |_ __ _  ___| | __
368 68 Mehdi Abaakouk
 / _ \| '_ \ / _ \ '_ \/ __| __/ _` |/ __| |/ /
369 68 Mehdi Abaakouk
| (_) | |_) |  __/ | | \__ \ || (_| | (__|   < 
370 68 Mehdi Abaakouk
 \___/| .__/ \___|_| |_|___/\__\__,_|\___|_|\_\
371 68 Mehdi Abaakouk
      |_|                                      
372 68 Mehdi Abaakouk
Last login: Wed Aug 27 08:10:02 2014 from atoulouse-652-1-119-50.w2-6.abo.wanadoo.fr
373 68 Mehdi Abaakouk
root@openstack:~# 
374 68 Mehdi Abaakouk
375 68 Mehdi Abaakouk
</pre>
376 68 Mehdi Abaakouk
377 116 Mehdi Abaakouk
h2. Configuration des Placements Groups des pools:
378 116 Mehdi Abaakouk
379 142 Mehdi Abaakouk
Par défaut les pools sont créés avec des placements groups à 8 (pg_num=8), 3 replicats, avec un tolérance à 2, si il manque des OSDs" 
380 116 Mehdi Abaakouk
381 116 Mehdi Abaakouk
Mais cette valeur (pg_num) défini le bon fonctionnement de ceph. Dans le cas standard (ie: 1 seul pool) la recette est facile: 
382 116 Mehdi Abaakouk
383 116 Mehdi Abaakouk
<pre>
384 116 Mehdi Abaakouk
               (OSDs * 100)
385 116 Mehdi Abaakouk
Total PGs = (  ------------  )
386 116 Mehdi Abaakouk
              OSD per object
387 116 Mehdi Abaakouk
</pre>
388 116 Mehdi Abaakouk
389 142 Mehdi Abaakouk
On arrondi à la puissance de 2 supérieurs. Mais dans notre cas 3 pools ce n'est pas si simple, les pools auront des cas d'utilisation différent:
390 116 Mehdi Abaakouk
391 116 Mehdi Abaakouk
Ma proposition de configuration:
392 107 Mehdi Abaakouk
* Pool ssds: il a 3 OSDs pour lui tout seul, on applique la recette magique: 3*100/3 ~= 128 pgs
393 1 Mehdi Abaakouk
* Pools images et disks: ils ont 3 OSDs à ce partager donc il faut répartir les 128 pgs. soit 32pgs et 96pgs (PS: il faut au moins 20pgs pour 3 réplicats)
394 69 Mehdi Abaakouk
395 1 Mehdi Abaakouk
Soit:
396 1 Mehdi Abaakouk
<pre>
397 79 Mehdi Abaakouk
ceph osd pool set ssds pg_num 128
398 1 Mehdi Abaakouk
ceph osd pool set images pg_num 32
399 1 Mehdi Abaakouk
ceph osd pool set disks pg_num 96
400 1 Mehdi Abaakouk
401 1 Mehdi Abaakouk
# attendre un peu qu'il y est plus de pg_create dans 'ceph -s'
402 121 Mehdi Abaakouk
ceph osd pool set ssds pgp_num 128  
403 121 Mehdi Abaakouk
ceph osd pool set images pgp_num 32
404 121 Mehdi Abaakouk
ceph osd pool set disks pgp_num 96
405 121 Mehdi Abaakouk
</pre>
406 1 Mehdi Abaakouk
407 107 Mehdi Abaakouk
408 1 Mehdi Abaakouk
409 107 Mehdi Abaakouk
_ref: http://ceph.com/docs/master/rados/operations/placement-groups/_
410 107 Mehdi Abaakouk
411 1 Mehdi Abaakouk
h2. Preparation du Pool SSD pour ceph 
412 107 Mehdi Abaakouk
413 107 Mehdi Abaakouk
Chaque machine se trouve dans 2 hosts, un host SSD et un host HARDDISK (même si en réalité les deux sont sur la même machine physique),
414 107 Mehdi Abaakouk
415 107 Mehdi Abaakouk
Ensuite on créé 2 object root un pour les hosts SSD et un autre pour les host HARDDISK
416 107 Mehdi Abaakouk
417 107 Mehdi Abaakouk
On créé ensuite 2 règles de stockage une qui envoie les objects vers le root SSD et l'autre vers le root HARDDISK
418 107 Mehdi Abaakouk
419 107 Mehdi Abaakouk
Cela permettra d'avoir de définir une règle différente suivant les pools ceph.
420 107 Mehdi Abaakouk
421 107 Mehdi Abaakouk
Niveau Openstack nous avons 3 pools:
422 107 Mehdi Abaakouk
* disks: Ce pool aura les disques de VM et les volumes attaché
423 107 Mehdi Abaakouk
* ssds: Ce pool contiendra les volumes sur ssd
424 107 Mehdi Abaakouk
* images: c'est la que seront stocké les images de VMs (glance).
425 122 Mehdi Abaakouk
426 122 Mehdi Abaakouk
h3. Configuration de la crushmap de ceph:
427 122 Mehdi Abaakouk
428 135 Mehdi Abaakouk
Il faut s'assurer que la crushmap n'est pas en mode automatique (c'est déjà configuré par puppet):
429 122 Mehdi Abaakouk
430 1 Mehdi Abaakouk
<pre>
431 135 Mehdi Abaakouk
[global]
432 135 Mehdi Abaakouk
osd crush update on start = false
433 135 Mehdi Abaakouk
</pre>
434 135 Mehdi Abaakouk
435 135 Mehdi Abaakouk
Création de l'arbre de rangement physique des SSD, l'arbre nommé 'default' sera donc celui des disques durs
436 135 Mehdi Abaakouk
437 135 Mehdi Abaakouk
<pre>
438 122 Mehdi Abaakouk
$ ceph osd crush add-bucket ssd root
439 122 Mehdi Abaakouk
$ ceph osd crush add-bucket g1-ssd host
440 122 Mehdi Abaakouk
$ ceph osd crush add-bucket g2-ssd host
441 122 Mehdi Abaakouk
$ ceph osd crush add-bucket g3-ssd host
442 1 Mehdi Abaakouk
$ ceph osd crush move g1-ssd root=ssd
443 1 Mehdi Abaakouk
$ ceph osd crush move g2-ssd root=ssd
444 1 Mehdi Abaakouk
$ ceph osd crush move g3-ssd root=ssd
445 107 Mehdi Abaakouk
$ ceph osd tree
446 107 Mehdi Abaakouk
# id	weight	type name	up/down	reweight
447 1 Mehdi Abaakouk
-5	0	root ssd
448 118 Mehdi Abaakouk
-6	0		host g1-ssd
449 118 Mehdi Abaakouk
-7	0		host g2-ssd
450 118 Mehdi Abaakouk
-8	0		host g3-ssd
451 118 Mehdi Abaakouk
-1	3	root default
452 117 Mehdi Abaakouk
-2	1		host g1
453 117 Mehdi Abaakouk
0	1			osd.0	up	1	
454 117 Mehdi Abaakouk
3	1			osd.3	up	1	
455 118 Mehdi Abaakouk
-3	1		host g2
456 118 Mehdi Abaakouk
1	1			osd.1	up	1	
457 107 Mehdi Abaakouk
4	1			osd.4	up	1	
458 107 Mehdi Abaakouk
-4	1		host g3
459 122 Mehdi Abaakouk
2	1			osd.2	up	1	
460 122 Mehdi Abaakouk
5	1			osd.5	up	1	
461 122 Mehdi Abaakouk
</pre>
462 122 Mehdi Abaakouk
463 122 Mehdi Abaakouk
464 122 Mehdi Abaakouk
On range les osd qui ont des disques SSD dans ce nouvel arbre.
465 122 Mehdi Abaakouk
466 122 Mehdi Abaakouk
<pre>
467 195 Mehdi Abaakouk
$ ceph osd crush add osd.3 0  root=ssd host=g1-ssd
468 195 Mehdi Abaakouk
$ ceph osd crush add osd.4 0  root=ssd host=g2-ssd
469 195 Mehdi Abaakouk
$ ceph osd crush add osd.5 0  root=ssd host=g3-ssd
470 195 Mehdi Abaakouk
471 122 Mehdi Abaakouk
# Ou si l'osd a déjà éte positionné une fois
472 195 Mehdi Abaakouk
$ ceph osd crush set osd.3 0  root=ssd host=g1-ssd
473 195 Mehdi Abaakouk
$ ceph osd crush set osd.4 0  root=ssd host=g2-ssd
474 195 Mehdi Abaakouk
$ ceph osd crush set osd.5 0  root=ssd host=g3-ssd
475 96 Mehdi Abaakouk
476 108 Mehdi Abaakouk
# Vérifier le résultat
477 107 Mehdi Abaakouk
$ ceph osd tree
478 96 Mehdi Abaakouk
# id	weight	type name	up/down	reweight
479 96 Mehdi Abaakouk
-5	3	root ssd
480 121 Mehdi Abaakouk
-6	1		host g1-ssd
481 96 Mehdi Abaakouk
3	1			osd.3	up	1	
482 107 Mehdi Abaakouk
-7	1		host g2-ssd
483 107 Mehdi Abaakouk
4	1			osd.4	up	1	
484 107 Mehdi Abaakouk
-8	1		host g3-ssd
485 1 Mehdi Abaakouk
5	1			osd.5	up	1	
486 1 Mehdi Abaakouk
-1	3	root default
487 1 Mehdi Abaakouk
-2	1		host g1
488 1 Mehdi Abaakouk
0	1			osd.0	up	1	
489 107 Mehdi Abaakouk
-3	1		host g2
490 107 Mehdi Abaakouk
1	1			osd.1	up	1	
491 107 Mehdi Abaakouk
-4	1		host g3
492 195 Mehdi Abaakouk
2	1			osd.2	up	1
493 195 Mehdi Abaakouk
494 195 Mehdi Abaakouk
Puis recalculer les poids des OSD:
495 195 Mehdi Abaakouk
$ /root/tools/ceph-reweight-osds.sh
496 107 Mehdi Abaakouk
</pre>
497 107 Mehdi Abaakouk
498 107 Mehdi Abaakouk
h3. Definition de la crushmap de ttnn
499 107 Mehdi Abaakouk
500 107 Mehdi Abaakouk
501 107 Mehdi Abaakouk
Une fois la crushmap modifié on créée et applique la règle sur le pool ssds:
502 107 Mehdi Abaakouk
503 107 Mehdi Abaakouk
<pre>
504 107 Mehdi Abaakouk
$ ceph osd crush rule create-simple ssd_replicated_ruleset ssd host firstn
505 107 Mehdi Abaakouk
$ ceph osd crush rule dump
506 107 Mehdi Abaakouk
[
507 107 Mehdi Abaakouk
    { "rule_id": 0,
508 107 Mehdi Abaakouk
      "rule_name": "replicated_ruleset",
509 1 Mehdi Abaakouk
      "ruleset": 0,
510 107 Mehdi Abaakouk
      "type": 1,
511 107 Mehdi Abaakouk
      "min_size": 1,
512 107 Mehdi Abaakouk
      "max_size": 10,
513 107 Mehdi Abaakouk
      "steps": [
514 107 Mehdi Abaakouk
            { "op": "take",
515 107 Mehdi Abaakouk
              "item": -1,
516 1 Mehdi Abaakouk
              "item_name": "default"},
517 121 Mehdi Abaakouk
            { "op": "chooseleaf_firstn",
518 1 Mehdi Abaakouk
              "num": 0,
519 1 Mehdi Abaakouk
              "type": "host"},
520 107 Mehdi Abaakouk
            { "op": "emit"}]},
521 1 Mehdi Abaakouk
    { "rule_id": 1,
522 1 Mehdi Abaakouk
      "rule_name": "ssd_replicated_ruleset",
523 107 Mehdi Abaakouk
      "ruleset": 1,
524 1 Mehdi Abaakouk
      "type": 1,
525 1 Mehdi Abaakouk
      "min_size": 1,
526 1 Mehdi Abaakouk
      "max_size": 10,
527 113 Mehdi Abaakouk
      "steps": [
528 114 Mehdi Abaakouk
            { "op": "take",
529 1 Mehdi Abaakouk
              "item": -5,
530 114 Mehdi Abaakouk
              "item_name": "ssd"},
531 113 Mehdi Abaakouk
            { "op": "chooseleaf_firstn",
532 113 Mehdi Abaakouk
              "num": 0,
533 113 Mehdi Abaakouk
              "type": "host"},
534 113 Mehdi Abaakouk
            { "op": "emit"}]}]
535 113 Mehdi Abaakouk
536 113 Mehdi Abaakouk
$ ceph osd pool set ssds crush_ruleset 1
537 113 Mehdi Abaakouk
</pre>
538 1 Mehdi Abaakouk
539 114 Mehdi Abaakouk
Il faut ensuite attendre que ceph redistribue les data comme on lui a demandé, on peut suivre l'avancement avec :
540 114 Mehdi Abaakouk
541 114 Mehdi Abaakouk
<pre>
542 114 Mehdi Abaakouk
ceph -s
543 114 Mehdi Abaakouk
</pre>
544 115 Mehdi Abaakouk
545 232 Laurent GUERBY
h2. Pool ceph replicated
546 232 Laurent GUERBY
547 233 Laurent GUERBY
Creation via ceph :
548 233 Laurent GUERBY
549 233 Laurent GUERBY
<pre>
550 233 Laurent GUERBY
ceph osd pool create r2 12 12 replicated
551 233 Laurent GUERBY
ceph osd pool set r2 size 2
552 233 Laurent GUERBY
ceph osd pool set r2 min_size 1
553 233 Laurent GUERBY
</pre>
554 233 Laurent GUERBY
555 233 Laurent GUERBY
556 233 Laurent GUERBY
Puis ajout des pools via puppet
557 232 Laurent GUERBY
https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp#L21
558 232 Laurent GUERBY
<pre>
559 232 Laurent GUERBY
$os_cinder_ceph_pools = ...
560 232 Laurent GUERBY
"ceph-r2" => "r2",
561 232 Laurent GUERBY
...
562 232 Laurent GUERBY
</pre>
563 1 Mehdi Abaakouk
564 233 Laurent GUERBY
Sur openstack ou attendre le cron ou "puppet agent -vt"
565 233 Laurent GUERBY
566 233 Laurent GUERBY
Puis :
567 233 Laurent GUERBY
568 232 Laurent GUERBY
<pre>
569 233 Laurent GUERBY
cinder create --volume-type ceph-r2 --display-name utopialab.tetaneutral.net-disk-2 4096
570 233 Laurent GUERBY
nova volume-attach utopialab.tetaneutral.net xxxVolumeIDxxx
571 214 Laurent GUERBY
</pre>
572 214 Laurent GUERBY
573 219 Laurent GUERBY
h2. Pool ceph erasure coding
574 214 Laurent GUERBY
575 215 Laurent GUERBY
h3. Creation erasure coded pool
576 215 Laurent GUERBY
577 218 Laurent GUERBY
En pratique on a 5 machines avec chacune au moins un rotationnel (le plus petit = 2 TB sur g3), on va creer un 4+1 qui devrait permettre le fonctionnement continu malgré la perte d'une machine :
578 218 Laurent GUERBY
579 239 Laurent GUERBY
Ajout des pools via puppet
580 218 Laurent GUERBY
https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp#L21
581 218 Laurent GUERBY
<pre>
582 218 Laurent GUERBY
$os_cinder_ceph_pools = ...
583 218 Laurent GUERBY
"ceph-ec4p1" => "ec4p1",
584 1 Mehdi Abaakouk
...
585 229 Laurent GUERBY
</pre>
586 229 Laurent GUERBY
587 1 Mehdi Abaakouk
Apres sur la VM openstack
588 229 Laurent GUERBY
589 229 Laurent GUERBY
<pre>
590 229 Laurent GUERBY
puppet agent -vt
591 229 Laurent GUERBY
cinder type-list
592 229 Laurent GUERBY
# verifier que ceph-ec4p1 est bien present
593 229 Laurent GUERBY
</pre>
594 218 Laurent GUERBY
595 227 Laurent GUERBY
<pre>
596 227 Laurent GUERBY
# pool erasure code
597 215 Laurent GUERBY
ceph osd erasure-code-profile set ec4p1profile k=4 m=1 ruleset-failure-domain=host
598 215 Laurent GUERBY
# Note: ruleset-failure-domain cannot be changed after creation, host will choose only one disk per host, other option is osd whith no such constraint
599 239 Laurent GUERBY
ceph osd pool create ec4p1 4096 4096 erasure ec4p1profile
600 1 Mehdi Abaakouk
601 1 Mehdi Abaakouk
# cache avec ec4p1c pool "normal" car le pool erasure code n'implémente pas les write partiels.
602 239 Laurent GUERBY
ceph osd pool create ec4p1c 4096 4096 replicated
603 229 Laurent GUERBY
604 229 Laurent GUERBY
# mise en place du cache tier writeback overlay
605 229 Laurent GUERBY
ceph osd tier add ec4p1 ec4p1c
606 229 Laurent GUERBY
ceph osd tier cache-mode ec4p1c writeback
607 1 Mehdi Abaakouk
ceph osd tier set-overlay ec4p1 ec4p1c
608 223 Laurent GUERBY
609 222 Mehdi Abaakouk
# tuning du pool cache
610 1 Mehdi Abaakouk
ceph osd pool set ec4p1c size 3 
611 1 Mehdi Abaakouk
ceph osd pool set ec4p1c min_size 2
612 1 Mehdi Abaakouk
ceph osd pool set ec4p1c cache_target_dirty_ratio 0.4 # begin flushing modified (dirty) objects when they reach 40% of the cache pool’s capacity
613 225 Laurent GUERBY
ceph osd pool set ec4p1c cache_target_full_ratio 0.8 # begin flushing unmodified (clean) objects when they reach 80% of the cache pool’s capacity
614 239 Laurent GUERBY
ceph osd pool set ec4p1c target_max_bytes 100000000000 # to flush or evict at 100 GB = 100e9 bytes
615 239 Laurent GUERBY
ceph osd pool set ec4p1c target_max_objects 100000000000 # ?
616 225 Laurent GUERBY
ceph osd pool set ec4p1c hit_set_type bloom
617 225 Laurent GUERBY
ceph osd pool set ec4p1c hit_set_count 1
618 225 Laurent GUERBY
ceph osd pool set ec4p1c hit_set_period 3600
619 225 Laurent GUERBY
620 225 Laurent GUERBY
# creation et attach d'un disque sur une VM
621 1 Mehdi Abaakouk
cinder create --volume-type ceph-ec4p1 --display-name apt.tetaneutral.net-disk-1 1024
622 1 Mehdi Abaakouk
nova volume-attach apt.tetaneutral.net 4663c1c1-e5e9-4684-9e55-bb2d9cc18ac8
623 1 Mehdi Abaakouk
</pre>
624 1 Mehdi Abaakouk
625 1 Mehdi Abaakouk
Exemple de creation de ec3p1 avec cache 500G ec3p1c
626 1 Mehdi Abaakouk
627 228 Laurent GUERBY
<pre>
628 228 Laurent GUERBY
ceph osd erasure-code-profile set ec3p1profile k=3 m=1 ruleset-failure-domain=host
629 229 Laurent GUERBY
ceph osd pool create ec3p1 12 12 erasure ec3p1profile
630 229 Laurent GUERBY
631 229 Laurent GUERBY
ceph osd tier add ec3p1 ec3p1c
632 229 Laurent GUERBY
ceph osd tier cache-mode ec3p1c writeback
633 228 Laurent GUERBY
ceph osd tier set-overlay ec3p1 ec3p1c
634 228 Laurent GUERBY
635 228 Laurent GUERBY
ceph osd pool create ec3p1c 12 12 replicated
636 228 Laurent GUERBY
ceph osd pool set ec3p1c size 3 
637 228 Laurent GUERBY
ceph osd pool set ec3p1c min_size 2
638 228 Laurent GUERBY
ceph osd pool set ec3p1c cache_target_dirty_ratio 0.4 
639 228 Laurent GUERBY
ceph osd pool set ec3p1c cache_target_full_ratio 0.8 
640 228 Laurent GUERBY
ceph osd pool set ec3p1c target_max_bytes 500000000000 
641 228 Laurent GUERBY
ceph osd pool set ec3p1c target_max_objects 500000000000 
642 228 Laurent GUERBY
ceph osd pool set ec3p1c hit_set_type bloom
643 228 Laurent GUERBY
ceph osd pool set ec3p1c hit_set_count 1
644 228 Laurent GUERBY
ceph osd pool set ec3p1c hit_set_period 3600
645 230 Laurent GUERBY
646 231 Laurent GUERBY
cinder create --volume-type ceph-ec3p1 --display-name utopialab.tetaneutral.net-disk-1 8192
647 228 Laurent GUERBY
nova volume-attach utopialab.tetaneutral.net xxxVolumeIDxxx
648 219 Laurent GUERBY
</pre>
649 219 Laurent GUERBY
650 240 Laurent GUERBY
Effacer des profiles
651 240 Laurent GUERBY
652 240 Laurent GUERBY
<pre>
653 240 Laurent GUERBY
# ceph osd erasure-code-profile ls
654 240 Laurent GUERBY
default
655 240 Laurent GUERBY
ec3p1profile
656 240 Laurent GUERBY
ec4p1profile
657 240 Laurent GUERBY
# ceph osd erasure-code-profile get ec4p1profile
658 240 Laurent GUERBY
directory=/usr/lib/x86_64-linux-gnu/ceph/erasure-code
659 240 Laurent GUERBY
k=4
660 240 Laurent GUERBY
m=1
661 240 Laurent GUERBY
plugin=jerasure
662 240 Laurent GUERBY
ruleset-failure-domain=osd
663 240 Laurent GUERBY
technique=reed_sol_van
664 240 Laurent GUERBY
# ceph osd erasure-code-profile rm ec3p1profile
665 240 Laurent GUERBY
# ceph osd erasure-code-profile rm ec4p1profile
666 240 Laurent GUERBY
</pre>
667 240 Laurent GUERBY
668 240 Laurent GUERBY
669 1 Mehdi Abaakouk
h3. Erasure URL
670 1 Mehdi Abaakouk
671 1 Mehdi Abaakouk
http://www.spinics.net/lists/ceph-devel/msg20920.html
672 1 Mehdi Abaakouk
http://ceph.com/docs/master/rados/operations/cache-tiering/
673 1 Mehdi Abaakouk
674 1 Mehdi Abaakouk
An erasure encoded pool cannot be accessed directly using rbd. For this
675 219 Laurent GUERBY
reason we need a cache pool and an erasure pool. This not only allows
676 219 Laurent GUERBY
supporting rbd but increases performance.
677 219 Laurent GUERBY
678 219 Laurent GUERBY
http://ceph.com/docs/master/dev/erasure-coded-pool/#interface
679 219 Laurent GUERBY
680 219 Laurent GUERBY
Creation "ecpool" "ecruleset" "myprofile"
681 219 Laurent GUERBY
682 219 Laurent GUERBY
<pre>
683 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure
684 219 Laurent GUERBY
ceph osd crush rule create-erasure ecruleset
685 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure default ecruleset
686 219 Laurent GUERBY
ceph osd erasure-code-profile set myprofile ruleset-failure-domain=osd
687 219 Laurent GUERBY
ceph osd erasure-code-profile get myprofile
688 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure myprofile
689 219 Laurent GUERBY
ceph osd erasure-code-profile set myprofile k=3 m=1
690 219 Laurent GUERBY
ceph osd erasure-code-profile get myprofile
691 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure myprofile
692 219 Laurent GUERBY
693 219 Laurent GUERBY
ceph osd erasure-code-profile ls
694 219 Laurent GUERBY
ceph osd erasure-code-profile get default
695 219 Laurent GUERBY
ceph osd erasure-code-profile rm myprofile
696 217 Laurent GUERBY
ceph osd erasure-code-profile set myprofile ruleset-root=ssd
697 205 Mehdi Abaakouk
</pre>
698 167 Mehdi Abaakouk
699 234 Laurent GUERBY
h3. Remove erasure coded pool
700 234 Laurent GUERBY
701 234 Laurent GUERBY
<pre>
702 234 Laurent GUERBY
root@g1:~# ceph osd tier remove-overlay ec3p1c
703 234 Laurent GUERBY
there is now (or already was) no overlay for 'ec3p1c'
704 234 Laurent GUERBY
root@g1:~# ceph osd tier remove-overlay ec3p1
705 234 Laurent GUERBY
there is now (or already was) no overlay for 'ec3p1'
706 234 Laurent GUERBY
root@g1:~# ceph osd tier remove ec3p1 ec3p1c
707 234 Laurent GUERBY
pool 'ec3p1c' is now (or already was) not a tier of 'ec3p1'
708 234 Laurent GUERBY
root@g1:~# ceph osd pool delete ec3p1c ec3p1c --yes-i-really-really-mean-it
709 234 Laurent GUERBY
pool 'ec3p1c' removed
710 234 Laurent GUERBY
root@g1:~# ceph osd pool delete ec3p1 ec3p1 --yes-i-really-really-mean-it
711 234 Laurent GUERBY
pool 'ec3p1' removed
712 234 Laurent GUERBY
</pre>
713 234 Laurent GUERBY
714 167 Mehdi Abaakouk
h2. Activer le cache-tiering  /!\/!\ Plus utilisé pas encore assez stable /!\/!\ 
715 167 Mehdi Abaakouk
716 210 Mehdi Abaakouk
http://ceph.com/docs/master/rados/operations/cache-tiering/
717 210 Mehdi Abaakouk
718 167 Mehdi Abaakouk
h3. Preparation
719 167 Mehdi Abaakouk
720 175 Mehdi Abaakouk
<pre>
721 175 Mehdi Abaakouk
ceph mkpool ssd-cache
722 175 Mehdi Abaakouk
ceph osd pool set ssd-cache pg_num 128
723 167 Mehdi Abaakouk
ceph osd pool set ssd-cache pgp_num 128
724 167 Mehdi Abaakouk
ceph osd pool set ssds crush_ruleset 1
725 167 Mehdi Abaakouk
ceph osd tier add disks ssd-cache
726 173 Mehdi Abaakouk
ceph osd tier cache-mode ssd-cache writeback
727 221 Mehdi Abaakouk
ceph osd tier set-overlay disks ssd-cache
728 1 Mehdi Abaakouk
ceph osd pool set ssd-cache target_max_bytes $[15 * 1024 * 1024 * 1024]
729 173 Mehdi Abaakouk
ceph osd pool set ssd-cache target_max_objects 3000000
730 173 Mehdi Abaakouk
731 173 Mehdi Abaakouk
# http://lists.ceph.com/pipermail/ceph-users-ceph.com/2014-August/042174.html
732 173 Mehdi Abaakouk
ceph osd pool set ssd-cache cache_target_dirty_ratio 0.4
733 176 Mehdi Abaakouk
ceph osd pool set ssd-cache cache_target_full_ratio 0.8
734 173 Mehdi Abaakouk
ceph osd pool set ssd-cache hit_set_type bloom
735 174 Mehdi Abaakouk
ceph osd pool set ssd-cache hit_set_count 1
736 174 Mehdi Abaakouk
ceph osd pool set ssd-cache hit_set_period 3600
737 210 Mehdi Abaakouk
738 210 Mehdi Abaakouk
ceph osd dump -f json-pretty | grep ssd-cache -A40 -B1
739 210 Mehdi Abaakouk
</pre>
740 210 Mehdi Abaakouk
741 210 Mehdi Abaakouk
h3. Gestion du cache
742 210 Mehdi Abaakouk
743 210 Mehdi Abaakouk
http://lists.ceph.com/pipermail/ceph-users-ceph.com/2014-August/042018.html
744 210 Mehdi Abaakouk
745 210 Mehdi Abaakouk
<pre>
746 210 Mehdi Abaakouk
rados -p ssd-cache cache-flush-evict-all
747 173 Mehdi Abaakouk
# puis control-c
748 167 Mehdi Abaakouk
ceph df|grep ssd-cache
749 179 Laurent GUERBY
</pre>
750 179 Laurent GUERBY
751 179 Laurent GUERBY
h2. Optimisations
752 179 Laurent GUERBY
753 179 Laurent GUERBY
via Loic :
754 200 Loic Dachary
http://ceph.com/docs/giant/rados/configuration/osd-config-ref/
755 200 Loic Dachary
dans /etc/ceph/ceph.conf
756 179 Laurent GUERBY
osd-disk-thread-ioprio-class = idle
757 179 Laurent GUERBY
osd-disk-thread-ioprio-priority = 7   
758 154 Laurent GUERBY
de façon hebdomadaire ceph va examiner l'etat des objets (scrub) et faire plein d'IO pour ça. Ce parametre dit que ces IO passent en dernier. Ca n'affecte pas les IO normales faites via rbd.
759 154 Laurent GUERBY
760 154 Laurent GUERBY
h2. Migration IP ceph
761 154 Laurent GUERBY
762 1 Mehdi Abaakouk
Au besoin pour passer cluster de test a dev
763 184 Mehdi Abaakouk
* http://ceph.com/docs/master/rados/operations/add-or-rm-mons/#changing-a-monitor-s-ip-address-the-messy-way
764 184 Mehdi Abaakouk
* http://ceph.com/docs/master/rados/operations/add-or-rm-mons/#changing-a-monitor-s-ip-address-the-right-way
765 184 Mehdi Abaakouk
766 237 Laurent GUERBY
h2. Configuration des Policies
767 184 Mehdi Abaakouk
768 196 Mehdi Abaakouk
Les rules modifiées /etc/{nova,cinder,neutron,glance}/policy.json sont ici:
769 1 Mehdi Abaakouk
770 1 Mehdi Abaakouk
http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/openstack-tools/revisions/master/show/policy